.lazyload{opacity:0.25.2;transition:opacity 0.3s ease-in-out}.lazyloaded{opacity:1}.lazyload.fade-in{opacity:.25;transition:opacity 0.6s ease-in-out}.lazyload.fade-in.lazyloaded{opacity:1}.lazyload.slide-bottom{opacity:.25;transform:translateY(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-bottom.lazyloaded{opacity:1;transform:translateY(0)}.lazyload.slide-right{opacity:.25;transform:translateX(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-right.lazyloaded{opacity:1;transform:translateX(0)}.lazyload.slide-left{opacity:.25;transform:translateX(-30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload.slide-left.lazyloaded{opacity:1;transform:translateX(0)}.lazyload-bg.lazyloaded{opacity:1}.lazyload-bg.fade-in{opacity:.25;transition:opacity 0.6s ease-in-out}.lazyload-bg.fade-in.lazyloaded{opacity:1}.lazyload-bg.slide-bottom{opacity:.25;transform:translateY(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-bottom.lazyloaded{opacity:1;transform:translateY(0)}.lazyload-bg.slide-right{opacity:.25;transform:translateX(30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-right.lazyloaded{opacity:1;transform:translateX(0)}.lazyload-bg.slide-left{opacity:.25;transform:translateX(-30px);transition:opacity 0.6s ease-in-out,transform 0.6s ease-in-out}.lazyload-bg.slide-left.lazyloaded{opacity:1;transform:translateX(0)}@import url(https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap);@import url(https://klizos.com/wp-content/plugins/seo-tool/build/\\"https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap\\);(()=>{var __webpack_modules__={41:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Rk: () => (/* binding */ getRegisteredStyles),\n/* harmony export */   SF: () => (/* binding */ registerStyles),\n/* harmony export */   sk: () => (/* binding */ insertStyles)\n/* harmony export */ });\nvar isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFNkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanM/Nzk1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41\n")},443:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M2.01 21 23 12 2.01 3 2 10l15 2-15 2z"\n}), \'Send\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQzLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQThDO0FBQ25GLDZCQUE2QztBQUM3QztBQUNBLENBQUMsQ0FBQztBQUNGLFNBQWU7QUFDZiw0Q0FBNEMsbUJBQU8sQ0FBQyxJQUF1QjtBQUMzRSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFtQjtBQUM3QyxlQUFlLFNBQWU7QUFDOUI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9TZW5kLmpzPzViYzAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIuMDEgMjEgMjMgMTIgMi4wMSAzIDIgMTBsMTUgMi0xNSAyelwiXG59KSwgJ1NlbmQnKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///443\n')},530:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6z"\n}), \'AttachFile\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMwLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQThDO0FBQ25GLDZCQUE2QztBQUM3QztBQUNBLENBQUMsQ0FBQztBQUNGLFNBQWU7QUFDZiw0Q0FBNEMsbUJBQU8sQ0FBQyxJQUF1QjtBQUMzRSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFtQjtBQUM3QyxlQUFlLFNBQWU7QUFDOUI7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9pY29ucy1tYXRlcmlhbC9BdHRhY2hGaWxlLmpzP2FhZTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2LjUgNnYxMS41YzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00VjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNXYxMC41YzAgLjU1LS40NSAxLTEgMXMtMS0uNDUtMS0xVjZIMTB2OS41YzAgMS4zOCAxLjEyIDIuNSAyLjUgMi41czIuNS0xLjEyIDIuNS0yLjVWNWMwLTIuMjEtMS43OS00LTQtNFM3IDIuNzkgNyA1djEyLjVjMCAzLjA0IDIuNDYgNS41IDUuNSA1LjVzNS41LTIuNDYgNS41LTUuNVY2elwiXG59KSwgJ0F0dGFjaEZpbGUnKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///530\n')},540:module=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement("style");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\nmodule.exports = insertStyleElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcz9kZTZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///540\n')},561:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ createSvgIcon)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8168);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _SvgIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5765);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848);\n\'use client\';\n\n\n\n\n\n/**\n * Private module reserved for @mui packages.\n */\n\nfunction createSvgIcon(path, displayName) {\n  function Component(props, ref) {\n    return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_SvgIcon__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)({\n      "data-testid": `${displayName}Icon`,\n      ref: ref\n    }, props, {\n      children: path\n    }));\n  }\n  if (false) // removed by dead control flow\n{}\n  Component.muiName = _SvgIcon__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A.muiName;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(Component));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYxLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBRTBEO0FBQzNCO0FBQ0U7O0FBRWpDO0FBQ0E7QUFDQTtBQUNnRDtBQUNqQztBQUNmO0FBQ0Esd0JBQXdCLHNEQUFJLENBQUMseURBQU8sRUFBRSx1RkFBUTtBQUM5Qyx3QkFBd0IsWUFBWTtBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBSTFDO0FBQ0gsc0JBQXNCLHlEQUFPO0FBQzdCLHNCQUFzQix1Q0FBVSxlQUFlLDZDQUFnQjtBQUMvRCIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcz8zM2JhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///561\n')},725:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n  return Math.max(min, Math.min(val, max));\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clamp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI1LmpzIiwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9jbGFtcC9jbGFtcC5qcz9lNWMxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsIG1heCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbCwgbWF4KSk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFtcDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///725\n")},771:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.X4 = alpha;\n__webpack_unused_export__ = blend;\n__webpack_unused_export__ = void 0;\nexports.e$ = darken;\n__webpack_unused_export__ = decomposeColor;\n__webpack_unused_export__ = emphasize;\nexports.eM = getContrastRatio;\n__webpack_unused_export__ = getLuminance;\n__webpack_unused_export__ = hexToRgb;\n__webpack_unused_export__ = hslToRgb;\nexports.a = lighten;\n__webpack_unused_export__ = private_safeAlpha;\n__webpack_unused_export__ = void 0;\n__webpack_unused_export__ = private_safeDarken;\n__webpack_unused_export__ = private_safeEmphasize;\n__webpack_unused_export__ = private_safeLighten;\n__webpack_unused_export__ = recomposeColor;\n__webpack_unused_export__ = rgbToHex;\nvar _formatMuiErrorMessage2 = _interopRequireDefault(__webpack_require__(8944));\nvar _clamp = _interopRequireDefault(__webpack_require__(8586));\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n  if (false) // removed by dead control flow\n{}\n  return (0, _clamp.default)(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nfunction hexToRgb(color) {\n  color = color.slice(1);\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let colors = color.match(re);\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(n => n + n);\n  }\n  return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nfunction decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n    throw new Error( false ? 0 : (0, _formatMuiErrorMessage2.default)(9, color));\n  }\n  let values = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n      throw new Error( false ? 0 : (0, _formatMuiErrorMessage2.default)(10, colorSpace));\n    }\n  } else {\n    values = values.split(',');\n  }\n  values = values.map(value => parseFloat(value));\n  return {\n    type,\n    values,\n    colorSpace\n  };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nconst colorChannel = color => {\n  const decomposedColor = decomposeColor(color);\n  return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.indexOf('hsl') !== -1 && idx !== 0 ? `${val}%` : val).join(' ');\n};\n__webpack_unused_export__ = colorChannel;\nconst private_safeColorChannel = (color, warning) => {\n  try {\n    return colorChannel(color);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n__webpack_unused_export__ = private_safeColorChannel;\nfunction recomposeColor(color) {\n  const {\n    type,\n    colorSpace\n  } = color;\n  let {\n    values\n  } = color;\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.indexOf('color') !== -1) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n  return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nfunction rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n  const {\n    values\n  } = decomposeColor(color);\n  return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nfunction hslToRgb(color) {\n  color = decomposeColor(color);\n  const {\n    values\n  } = color;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n  return recomposeColor({\n    type,\n    values: rgb\n  });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: http://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nfunction getLuminance(color) {\n  color = decomposeColor(color);\n  let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(val => {\n    if (color.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: http://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nfunction getContrastRatio(foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction alpha(color, value) {\n  color = decomposeColor(color);\n  value = clampWrapper(value);\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  if (color.type === 'color') {\n    color.values[3] = `/${value}`;\n  } else {\n    color.values[3] = value;\n  }\n  return recomposeColor(color);\n}\nfunction private_safeAlpha(color, value, warning) {\n  try {\n    return alpha(color, value);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1 || color.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nfunction private_safeDarken(color, coefficient, warning) {\n  try {\n    return darken(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  } else if (color.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (1 - color.values[i]) * coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nfunction private_safeLighten(color, coefficient, warning) {\n  try {\n    return lighten(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nfunction emphasize(color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nfunction private_safeEmphasize(color, coefficient, warning) {\n  try {\n    return emphasize(color, coefficient);\n  } catch (error) {\n    if (warning && \"production\" !== 'production') // removed by dead control flow\n{}\n    return color;\n  }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nfunction blend(background, overlay, opacity, gamma = 1.0) {\n  const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osbUJBQW1CLFlBQW9CLG1CQUFtQjtBQUFBLEVBRXJEO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yLmpzPzc1YzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///771\n")},862:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6673);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_createChainedFunction__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBcUU7QUFDckUsaUVBQWUsaUZBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanM/OGY3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJ0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///862\n')},1020:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar f=__webpack_require__(1594),k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=""+g);void 0!==a.key&&(e=""+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAyMC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYSxNQUFNLG1CQUFPLENBQUMsSUFBTyw2S0FBNks7QUFDL00sa0JBQWtCLFVBQVUsZUFBZSxxQkFBcUIsNkJBQTZCLDBCQUEwQiwwREFBMEQsNEVBQTRFLE9BQU8sd0RBQXdELGdCQUFnQixHQUFHLFdBQVcsR0FBRyxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzP2QzMWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmPXJlcXVpcmUoXCJyZWFjdFwiKSxrPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLG09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxuPWYuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIscD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gcShjLGEsZyl7dmFyIGIsZD17fSxlPW51bGwsaD1udWxsO3ZvaWQgMCE9PWcmJihlPVwiXCIrZyk7dm9pZCAwIT09YS5rZXkmJihlPVwiXCIrYS5rZXkpO3ZvaWQgMCE9PWEucmVmJiYoaD1hLnJlZik7Zm9yKGIgaW4gYSltLmNhbGwoYSxiKSYmIXAuaGFzT3duUHJvcGVydHkoYikmJihkW2JdPWFbYl0pO2lmKGMmJmMuZGVmYXVsdFByb3BzKWZvcihiIGluIGE9Yy5kZWZhdWx0UHJvcHMsYSl2b2lkIDA9PT1kW2JdJiYoZFtiXT1hW2JdKTtyZXR1cm57JCR0eXBlb2Y6ayx0eXBlOmMsa2V5OmUscmVmOmgscHJvcHM6ZCxfb3duZXI6bi5jdXJyZW50fX1leHBvcnRzLkZyYWdtZW50PWw7ZXhwb3J0cy5qc3g9cTtleHBvcnRzLmpzeHM9cTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1020\n')},1113:module=>{"use strict";eval("\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\nmodule.exports = styleTagTransform;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTExMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanM/MWRkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1113\n")},1159:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useControlled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2501);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useControlled__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTE1OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXFEO0FBQ3JELGlFQUFlLHlFQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzP2Q2ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1159\n")},1249:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"\n}), \'ErrorOutline\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI0OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvRXJyb3JPdXRsaW5lLmpzP2MzMzMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4XCJcbn0pLCAnRXJyb3JPdXRsaW5lJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1249\n')},1287:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   i: () => (/* binding */ useInsertionEffectWithLayoutFallback),\n/* harmony export */   s: () => (/* binding */ useInsertionEffectAlwaysWithSyncFallback)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = react__WEBPACK_IMPORTED_MODULE_0__['useInsertion' + 'Effect'] ? react__WEBPACK_IMPORTED_MODULE_0__['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI4Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0I7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsa0NBQUssOEJBQThCLGtDQUFLO0FBQ2pFO0FBQ0EsaUVBQWlFLGtEQUFxQjs7QUFFSSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzL2Rpc3QvZW1vdGlvbi11c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy5icm93c2VyLmVzbS5qcz9jNGIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1287\n")},1317:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ deepmerge),\n/* harmony export */   Q: () => (/* binding */ isPlainObject)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8168);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nfunction isPlainObject(item) {\n  if (typeof item !== 'object' || item === null) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(item);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n  if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(source) || !isPlainObject(source)) {\n    return source;\n  }\n  const output = {};\n  Object.keys(source).forEach(key => {\n    output[key] = deepClone(source[key]);\n  });\n  return output;\n}\nfunction deepmerge(target, source, options = {\n  clone: true\n}) {\n  const output = options.clone ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)({}, target) : target;\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(key => {\n      if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(source[key])) {\n        output[key] = source[key];\n      } else if (isPlainObject(source[key]) &&\n      // Avoid prototype pollution\n      Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n        // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n        output[key] = deepmerge(target[key], source[key], options);\n      } else if (options.clone) {\n        output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n  return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMxNy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBEO0FBQzNCOztBQUUvQjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNlO0FBQ2Y7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLHVGQUFRLEdBQUc7QUFDNUM7QUFDQTtBQUNBLHdCQUF3QixpREFBb0I7QUFDNUM7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzP2MzZDQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qc1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChzb3VyY2UpIHx8ICFpc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICBvdXRwdXRba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zID0ge1xuICBjbG9uZTogdHJ1ZVxufSkge1xuICBjb25zdCBvdXRwdXQgPSBvcHRpb25zLmNsb25lID8gX2V4dGVuZHMoe30sIHRhcmdldCkgOiB0YXJnZXQ7XG4gIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzb3VyY2Vba2V5XSkgJiZcbiAgICAgIC8vIEF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSkgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1317\n")},1354:module=>{"use strict";eval('\n\nmodule.exports = function (item) {\n  var content = item[1];\n  var cssMapping = item[3];\n  if (!cssMapping) {\n    return content;\n  }\n  if (typeof btoa === "function") {\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n    var sourceMapping = "/*# ".concat(data, " */");\n    return [content].concat([sourceMapping]).join("\\n");\n  }\n  return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM1NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1354\n')},1432:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4"\n}), \'Person\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQzMi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvUGVyc29uLmpzPzRhZTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cInVzZSBjbGllbnRcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9jcmVhdGVTdmdJY29uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9jcmVhdGVTdmdJY29uXCIpKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICgwLCBfY3JlYXRlU3ZnSWNvbi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDEyYzIuMjEgMCA0LTEuNzkgNC00cy0xLjc5LTQtNC00LTQgMS43OS00IDQgMS43OSA0IDQgNG0wIDJjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTRcIlxufSksICdQZXJzb24nKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1432\n')},1434:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2zm10 14.5V20H8v-3.5l4-4zm-4-5-4-4V4h8v3.5z"\n}), \'HourglassEmpty\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQzNC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvSG91cmdsYXNzRW1wdHkuanM/NTIxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYyem0xMCAxNC41VjIwSDh2LTMuNWw0LTR6bS00LTUtNC00VjRoOHYzLjV6XCJcbn0pLCAnSG91cmdsYXNzRW1wdHknKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1434\n')},1523:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (/* binding */ useForkRef)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _setRef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7365);\n'use client';\n\n\n\nfunction useForkRef(...refs) {\n  /**\n   * This will create a new function if the refs passed to this hook change and are all defined.\n   * This means react will call the old forkRef with `null` and the new forkRef\n   * with the ref. Cleanup naturally emerges from this behavior.\n   */\n  return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return instance => {\n      refs.forEach(ref => {\n        (0,_setRef__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(ref, instance);\n      });\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUyMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFK0I7QUFDQTtBQUNoQjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDBDQUFhO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDREQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VGb3JrUmVmL3VzZUZvcmtSZWYuanM/Mzc0YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzZXRSZWYgZnJvbSAnLi4vc2V0UmVmJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcmtSZWYoLi4ucmVmcykge1xuICAvKipcbiAgICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiB0aGUgcmVmcyBwYXNzZWQgdG8gdGhpcyBob29rIGNoYW5nZSBhbmQgYXJlIGFsbCBkZWZpbmVkLlxuICAgKiBUaGlzIG1lYW5zIHJlYWN0IHdpbGwgY2FsbCB0aGUgb2xkIGZvcmtSZWYgd2l0aCBgbnVsbGAgYW5kIHRoZSBuZXcgZm9ya1JlZlxuICAgKiB3aXRoIHRoZSByZWYuIENsZWFudXAgbmF0dXJhbGx5IGVtZXJnZXMgZnJvbSB0aGlzIGJlaGF2aW9yLlxuICAgKi9cbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyZWZzLmV2ZXJ5KHJlZiA9PiByZWYgPT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2UgPT4ge1xuICAgICAgcmVmcy5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICAgIHNldFJlZihyZWYsIGluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCByZWZzKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1523\n")},1529:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useEnhancedEffect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUyOS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsa0RBQXFCLEdBQUcsNENBQWU7QUFDakcsaUVBQWUsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vdXNlRW5oYW5jZWRFZmZlY3QvdXNlRW5oYW5jZWRFZmZlY3QuanM/NWUwNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBBIHZlcnNpb24gb2YgYFJlYWN0LnVzZUxheW91dEVmZmVjdGAgdGhhdCBkb2VzIG5vdCBzaG93IGEgd2FybmluZyB3aGVuIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBlZmZlY3RzIHRoYXQgYXJlIG9ubHkgbmVlZGVkIGZvciBjbGllbnQtc2lkZSByZW5kZXJpbmcgYnV0IG5vdCBmb3IgU1NSLlxuICpcbiAqIEJlZm9yZSB5b3UgdXNlIHRoaXMgaG9vaywgbWFrZSBzdXJlIHRvIHJlYWQgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ2FlYXJvbi9lN2Q5N2NkZjM4YTI5MDc5MjRlYTEyZTRlYmRmM2M4NVxuICogYW5kIGNvbmZpcm0gaXQgZG9lc24ndCBhcHBseSB0byB5b3VyIHVzZS1jYXNlLlxuICovXG5jb25zdCB1c2VFbmhhbmNlZEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1529\n")},1547:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _useEnhancedEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1529);\n'use client';\n\n\n\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n  const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(fn);\n  (0,_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_1__/* [\"default\"] */ .A)(() => {\n    ref.current = fn;\n  });\n  return react__WEBPACK_IMPORTED_MODULE_0__.useRef((...args) =>\n  // @ts-expect-error hide `this`\n  (0, ref.current)(...args)).current;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useEventCallback);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTU0Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFK0I7QUFDc0I7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyx5Q0FBWTtBQUMxQixFQUFFLHVFQUFpQjtBQUNuQjtBQUNBLEdBQUc7QUFDSCxTQUFTLHlDQUFZO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUV2ZW50Q2FsbGJhY2svdXNlRXZlbnRDYWxsYmFjay5qcz85ZDc5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3VzZUVuaGFuY2VkRWZmZWN0JztcblxuLyoqXG4gKiBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MDk5I2lzc3VlY29tbWVudC00NDAwMTM4OTJcbiAqIFNlZSBSRkMgaW4gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmZjcy9wdWxsLzIyMFxuICovXG5cbmZ1bmN0aW9uIHVzZUV2ZW50Q2FsbGJhY2soZm4pIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKGZuKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gZm47XG4gIH0pO1xuICByZXR1cm4gUmVhY3QudXNlUmVmKCguLi5hcmdzKSA9PlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGhpZGUgYHRoaXNgXG4gICgwLCByZWYuY3VycmVudCkoLi4uYXJncykpLmN1cnJlbnQ7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1547\n")},1594:n=>{"use strict";n.exports=React},1609:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (/* binding */ generateUtilityClass)\n/* harmony export */ });\n/* unused harmony exports globalStateClasses, isGlobalState */\n/* harmony import */ var _ClassNameGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9071);\n\nconst globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nfunction generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${_ClassNameGenerator__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A.generate(componentName)}-${slot}`;\n}\nfunction isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYwOS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1RDtBQUNoRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBLCtCQUErQixrQkFBa0IsR0FBRyxpQkFBaUIsT0FBTyxvRUFBa0IseUJBQXlCLEdBQUcsS0FBSztBQUMvSDtBQUNPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dlbmVyYXRlVXRpbGl0eUNsYXNzL2dlbmVyYXRlVXRpbGl0eUNsYXNzLmpzPzRlNDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1609\n")},1668:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_useId__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4661);\n'use client';\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_useId__WEBPACK_IMPORTED_MODULE_0__/* [\"default\"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY2OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXFDO0FBQ3JDLGlFQUFlLGlFQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcz8wZDI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSWQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1668\n")},1845:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 4-8 5-8-5V6l8 5 8-5z"\n}), \'Email\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTg0NS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvRW1haWwuanM/OWY0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0ybTAgNC04IDUtOC01VjZsOCA1IDgtNXpcIlxufSksICdFbWFpbCcpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1845\n')},1848:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Ay: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_system_createStyled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6461);\n/* harmony import */ var _defaultTheme__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2765);\n/* harmony import */ var _identifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8312);\n/* harmony import */ var _rootShouldForwardProp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9770);\n\'use client\';\n\n\n\n\n\n\n\nconst styled = (0,_mui_system_createStyled__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Ay)({\n  themeId: _identifier__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,\n  defaultTheme: _defaultTheme__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,\n  rootShouldForwardProp: _rootShouldForwardProp__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (styled);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTg0OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRW9EO0FBQ1Y7QUFDTjtBQUN3QjtBQUNlO0FBQ0E7QUFDM0UsZUFBZSw4RUFBWTtBQUMzQixXQUFXLDREQUFRO0FBQ25CLGNBQWM7QUFDZCx1QkFBdUI7QUFDdkIsQ0FBQztBQUNELGlFQUFlLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanM/NTY3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5pbXBvcnQgcm9vdFNob3VsZEZvcndhcmRQcm9wIGZyb20gJy4vcm9vdFNob3VsZEZvcndhcmRQcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi9zbG90U2hvdWxkRm9yd2FyZFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuL3Jvb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1848\n')},1935:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   A: () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _mui_utils_debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4705);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_mui_utils_debounce__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkzNS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTJDO0FBQzNDLGlFQUFlLG9FQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcz9lZjIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWJvdW5jZSBmcm9tICdAbXVpL3V0aWxzL2RlYm91bmNlJztcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1935\n')},2032:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('\n\'use client\';\n\nObject.defineProperty(exports, "__esModule", ({\n  value: true\n}));\nObject.defineProperty(exports, "default", ({\n  enumerable: true,\n  get: function () {\n    return _utils.createSvgIcon;\n  }\n}));\nvar _utils = __webpack_require__(8928);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiOztBQUVBLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcz84ZGU5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbHMuY3JlYXRlU3ZnSWNvbjtcbiAgfVxufSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvdXRpbHNcIik7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2032\n')},2162:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar React = __webpack_require__(1594),\n  shim = __webpack_require__(9888);\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = "function" === typeof Object.is ? Object.is : is,\n  useSyncExternalStore = shim.useSyncExternalStore,\n  useRef = React.useRef,\n  useEffect = React.useEffect,\n  useMemo = React.useMemo,\n  useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot,\n  selector,\n  isEqual\n) {\n  var instRef = useRef(null);\n  if (null === instRef.current) {\n    var inst = { hasValue: !1, value: null };\n    instRef.current = inst;\n  } else inst = instRef.current;\n  instRef = useMemo(\n    function () {\n      function memoizedSelector(nextSnapshot) {\n        if (!hasMemo) {\n          hasMemo = !0;\n          memoizedSnapshot = nextSnapshot;\n          nextSnapshot = selector(nextSnapshot);\n          if (void 0 !== isEqual && inst.hasValue) {\n            var currentSelection = inst.value;\n            if (isEqual(currentSelection, nextSnapshot))\n              return (memoizedSelection = currentSelection);\n          }\n          return (memoizedSelection = nextSnapshot);\n        }\n        currentSelection = memoizedSelection;\n        if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n        var nextSelection = selector(nextSnapshot);\n        if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n          return (memoizedSnapshot = nextSnapshot), currentSelection;\n        memoizedSnapshot = nextSnapshot;\n        return (memoizedSelection = nextSelection);\n      }\n      var hasMemo = !1,\n        memoizedSnapshot,\n        memoizedSelection,\n        maybeGetServerSnapshot =\n          void 0 === getServerSnapshot ? null : getServerSnapshot;\n      return [\n        function () {\n          return memoizedSelector(getSnapshot());\n        },\n        null === maybeGetServerSnapshot\n          ? void 0\n          : function () {\n              return memoizedSelector(maybeGetServerSnapshot());\n            }\n      ];\n    },\n    [getSnapshot, getServerSnapshot, selector, isEqual]\n  );\n  var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n  useEffect(\n    function () {\n      inst.hasValue = !0;\n      inst.value = value;\n    },\n    [value]\n  );\n  useDebugValue(value);\n  return value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE2Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixZQUFZLG1CQUFPLENBQUMsSUFBTztBQUMzQixTQUFTLG1CQUFPLENBQUMsSUFBOEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLmpzPzU4YjIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLnByb2R1Y3Rpb24uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICBzaGltID0gcmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7XG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiAoeCA9PT0geSAmJiAoMCAhPT0geCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbn1cbnZhciBvYmplY3RJcyA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE9iamVjdC5pcyA/IE9iamVjdC5pcyA6IGlzLFxuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHNoaW0udXNlU3luY0V4dGVybmFsU3RvcmUsXG4gIHVzZVJlZiA9IFJlYWN0LnVzZVJlZixcbiAgdXNlRWZmZWN0ID0gUmVhY3QudXNlRWZmZWN0LFxuICB1c2VNZW1vID0gUmVhY3QudXNlTWVtbyxcbiAgdXNlRGVidWdWYWx1ZSA9IFJlYWN0LnVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZnVuY3Rpb24gKFxuICBzdWJzY3JpYmUsXG4gIGdldFNuYXBzaG90LFxuICBnZXRTZXJ2ZXJTbmFwc2hvdCxcbiAgc2VsZWN0b3IsXG4gIGlzRXF1YWxcbikge1xuICB2YXIgaW5zdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgaWYgKG51bGwgPT09IGluc3RSZWYuY3VycmVudCkge1xuICAgIHZhciBpbnN0ID0geyBoYXNWYWx1ZTogITEsIHZhbHVlOiBudWxsIH07XG4gICAgaW5zdFJlZi5jdXJyZW50ID0gaW5zdDtcbiAgfSBlbHNlIGluc3QgPSBpbnN0UmVmLmN1cnJlbnQ7XG4gIGluc3RSZWYgPSB1c2VNZW1vKFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIG1lbW9pemVkU2VsZWN0b3IobmV4dFNuYXBzaG90KSB7XG4gICAgICAgIGlmICghaGFzTWVtbykge1xuICAgICAgICAgIGhhc01lbW8gPSAhMDtcbiAgICAgICAgICBtZW1vaXplZFNuYXBzaG90ID0gbmV4dFNuYXBzaG90O1xuICAgICAgICAgIG5leHRTbmFwc2hvdCA9IHNlbGVjdG9yKG5leHRTbmFwc2hvdCk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaXNFcXVhbCAmJiBpbnN0Lmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGluc3QudmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBuZXh0U25hcHNob3QpKVxuICAgICAgICAgICAgICByZXR1cm4gKG1lbW9pemVkU2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAobWVtb2l6ZWRTZWxlY3Rpb24gPSBuZXh0U25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBtZW1vaXplZFNlbGVjdGlvbjtcbiAgICAgICAgaWYgKG9iamVjdElzKG1lbW9pemVkU25hcHNob3QsIG5leHRTbmFwc2hvdCkpIHJldHVybiBjdXJyZW50U2VsZWN0aW9uO1xuICAgICAgICB2YXIgbmV4dFNlbGVjdGlvbiA9IHNlbGVjdG9yKG5leHRTbmFwc2hvdCk7XG4gICAgICAgIGlmICh2b2lkIDAgIT09IGlzRXF1YWwgJiYgaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBuZXh0U2VsZWN0aW9uKSlcbiAgICAgICAgICByZXR1cm4gKG1lbW9pemVkU25hcHNob3QgPSBuZXh0U25hcHNob3QpLCBjdXJyZW50U2VsZWN0aW9uO1xuICAgICAgICBtZW1vaXplZFNuYXBzaG90ID0gbmV4dFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gKG1lbW9pemVkU2VsZWN0aW9uID0gbmV4dFNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgICB2YXIgaGFzTWVtbyA9ICExLFxuICAgICAgICBtZW1vaXplZFNuYXBzaG90LFxuICAgICAgICBtZW1vaXplZFNlbGVjdGlvbixcbiAgICAgICAgbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdCA9XG4gICAgICAgICAgdm9pZCAwID09PSBnZXRTZXJ2ZXJTbmFwc2hvdCA/IG51bGwgOiBnZXRTZXJ2ZXJTbmFwc2hvdDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbWVtb2l6ZWRTZWxlY3RvcihnZXRTbmFwc2hvdCgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbCA9PT0gbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtZW1vaXplZFNlbGVjdG9yKG1heWJlR2V0U2VydmVyU25hcHNob3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICBdO1xuICAgIH0sXG4gICAgW2dldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCwgc2VsZWN0b3IsIGlzRXF1YWxdXG4gICk7XG4gIHZhciB2YWx1ZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgaW5zdFJlZlswXSwgaW5zdFJlZlsxXSk7XG4gIHVzZUVmZmVjdChcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICBpbnN0Lmhhc1ZhbHVlID0gITA7XG4gICAgICBpbnN0LnZhbHVlID0gdmFsdWU7XG4gICAgfSxcbiAgICBbdmFsdWVdXG4gICk7XG4gIHVzZURlYnVnVmFsdWUodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2162\n')},2221:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   b: () => (/* binding */ useDefaultProps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1594);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7379);\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848);\n'use client';\n\n\n\n\n\nconst PropsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nfunction DefaultPropsProvider({\n  value,\n  children\n}) {\n  return /*#__PURE__*/_jsx(PropsContext.Provider, {\n    value: value,\n    children: children\n  });\n}\n false ? 0 : void 0;\nfunction getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name]) {\n    return props;\n  }\n  const config = theme.components[name];\n  if (config.defaultProps) {\n    // compatible with v5 signature\n    return (0,_mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__/* [\"default\"] */ .A)(config.defaultProps, props);\n  }\n  if (!config.styleOverrides && !config.variants) {\n    // v6 signature, no property 'defaultProps'\n    return (0,_mui_utils_resolveProps__WEBPACK_IMPORTED_MODULE_2__/* [\"default\"] */ .A)(config, props);\n  }\n  return props;\n}\nfunction useDefaultProps({\n  props,\n  name\n}) {\n  const ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(PropsContext);\n  return getThemeProps({\n    props,\n    name,\n    theme: {\n      components: ctx\n    }\n  });\n}\n/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (DefaultPropsProvider)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIyMS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRStCO0FBQ0k7QUFDZ0I7QUFDSDtBQUNoRCxrQ0FBa0MsZ0RBQW1CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxNQUFxQyxHQUFHLENBYXZDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNEVBQVk7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsV0FBVyw0RUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsY0FBYyw2Q0FBZ0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esc0VBQWUsb0VBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL0RlZmF1bHRQcm9wc1Byb3ZpZGVyL0RlZmF1bHRQcm9wc1Byb3ZpZGVyLmpzPzhjMGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUHJvcHNDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmZ1bmN0aW9uIERlZmF1bHRQcm9wc1Byb3ZpZGVyKHtcbiAgdmFsdWUsXG4gIGNoaWxkcmVuXG59KSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQcm9wc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGVmYXVsdFByb3BzUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5mdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIGNvbnN0IGNvbmZpZyA9IHRoZW1lLmNvbXBvbmVudHNbbmFtZV07XG4gIGlmIChjb25maWcuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIHY1IHNpZ25hdHVyZVxuICAgIHJldHVybiByZXNvbHZlUHJvcHMoY29uZmlnLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xuICB9XG4gIGlmICghY29uZmlnLnN0eWxlT3ZlcnJpZGVzICYmICFjb25maWcudmFyaWFudHMpIHtcbiAgICAvLyB2NiBzaWduYXR1cmUsIG5vIHByb3BlcnR5ICdkZWZhdWx0UHJvcHMnXG4gICAgcmV0dXJuIHJlc29sdmVQcm9wcyhjb25maWcsIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmYXVsdFByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgY29uc3QgY3R4ID0gUmVhY3QudXNlQ29udGV4dChQcm9wc0NvbnRleHQpO1xuICByZXR1cm4gZ2V0VGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICB0aGVtZToge1xuICAgICAgY29tcG9uZW50czogY3R4XG4gICAgfVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRQcm9wc1Byb3ZpZGVyOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2221\n")},2255:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault = __webpack_require__(4994);\n__webpack_unused_export__ = ({\n  value: true\n});\nexports.A = void 0;\nvar _createSvgIcon = _interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime = __webpack_require__(4848);\nvar _default = exports.A = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {\n  d: "M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"\n}), \'ChatBubbleOutline\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjI1NS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hhdEJ1YmJsZU91dGxpbmUuanM/NTk5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxOGw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMm0wIDE0SDZsLTIgMlY0aDE2elwiXG59KSwgJ0NoYXRCdWJibGVPdXRsaW5lJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2255\n')},2320:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// external \"wp.element\"\nconst external_wp_element_namespaceObject=wp.element;\n// EXTERNAL MODULE:./node_modules/use-sync-external-store/shim/index.js\nvar shim=__webpack_require__(9888);\n// EXTERNAL MODULE:./node_modules/use-sync-external-store/shim/with-selector.js\nvar with_selector=__webpack_require__(9242);\n;// external \"ReactDOM\"\nconst external_ReactDOM_namespaceObject=ReactDOM;\nvar external_ReactDOM_default=__webpack_require__.n(external_ReactDOM_namespaceObject);\n;// ./node_modules/react-redux/es/utils/reactBatchedUpdates.js\n\n;// ./node_modules/react-redux/es/utils/batch.js\n// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback){\n callback();\n}\n\nlet batch=defaultNoopBatch;// Allow injecting another batching function later\n\nconst setBatch=newBatch=>batch=newBatch;// Supply a getter just to skip dealing with ESM bindings\n\nconst getBatch=()=>batch;\n// EXTERNAL MODULE:external \"React\"\nvar external_React_=__webpack_require__(1594);\nvar external_React_default=__webpack_require__.n(external_React_);\n;// ./node_modules/react-redux/es/components/Context.js\n\nconst ContextKey=Symbol.for(`react-redux-context`);;\n\nfunction getContext(){\n var _gT$ContextKey;;\n const contextMap=(_gT$ContextKey=gT[ContextKey]) !=null ? _gT$ContextKey :gT[ContextKey]=new Map();\n let realContext=contextMap.get(external_React_.createContext);\n\n if (!realContext){\n realContext=external_React_.createContext(null);\n\n contextMap.set(external_React_.createContext,realContext);\n}\n\n return realContext;\n}\n\nconst Context_ReactReduxContext=getContext();\n const Context=((null && (Context_ReactReduxContext)));\n;// ./node_modules/react-redux/es/hooks/useReduxContext.js\n\n\n\n\nfunction createReduxContextHook(context=Context_ReactReduxContext){\n return function useReduxContext(){\n const contextValue=(0,external_React_.useContext)(context);\n\n return contextValue;\n};\n}\n\n\nconst useReduxContext_useReduxContext=createReduxContextHook();\n;// ./node_modules/react-redux/es/utils/useSyncExternalStore.js\nconst useSyncExternalStore_notInitialized=()=>{\n throw new Error('uSES not initialized!');\n};\n;// ./node_modules/react-redux/es/hooks/useSelector.js\n\n\n\n\nlet useSyncExternalStoreWithSelector=useSyncExternalStore_notInitialized;\nconst initializeUseSelector=fn=>{\n useSyncExternalStoreWithSelector=fn;\n};\n\nconst refEquality=(a,b)=>a===b;\n\n\n\nfunction createSelectorHook(context=Context_ReactReduxContext){\n const useReduxContext=context===Context_ReactReduxContext ? useReduxContext_useReduxContext :createReduxContextHook(context);){\n const{\n equalityFn=refEquality,\n stabilityCheck=undefined,\n noopCheck=undefined\n}=typeof equalityFnOrOptions==='function' ?{\n equalityFn:equalityFnOrOptions\n}:equalityFnOrOptions;\n\n const{\n store,\n subscription,\n getServerState,\n stabilityCheck:globalStabilityCheck,\n noopCheck:globalNoopCheck\n}=useReduxContext();\n const firstRun=(0,external_React_.useRef)(true);\n const wrappedSelector=(0,external_React_.useCallback)({\n [selector.name](state){\n const selected=selector(state);\n\n return selected;\n}\n\n}[selector.name],[selector,globalStabilityCheck,stabilityCheck]);\n const selectedState=useSyncExternalStoreWithSelector(subscription.addNestedSub,store.getState,getServerState || store.getState,wrappedSelector,equalityFn);\n (0,external_React_.useDebugValue)(selectedState);\n return selectedState;\n};\n}\n\n\nconst useSelector=createSelectorHook();\n// EXTERNAL MODULE:./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs=__webpack_require__(4146);\n// EXTERNAL MODULE:./node_modules/react-redux/node_modules/react-is/index.js\nvar react_is=__webpack_require__(4737);\n;// ./node_modules/react-redux/es/utils/Subscription.js\n // encapsulates the subscription logic for connecting a component to the redux store,as\n// well as nesting subscriptions of descendant components,so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection(){\n const batch=getBatch();\n let first=null;\n let last=null;\n return{\n clear(){\n first=null;\n last=null;\n},\n\n notify(){\n batch(()=>{\n let listener=first;\n\n while (listener){\n listener.callback();\n listener=listener.next;\n}\n});\n},\n\n get(){\n let listeners=[];\n let listener=first;\n\n while (listener){\n listeners.push(listener);\n listener=listener.next;\n}\n\n return listeners;\n},\n\n subscribe(callback){\n let isSubscribed=true;\n let listener=last={\n callback,\n next:null,\n prev:last\n};\n\n if (listener.prev){\n listener.prev.next=listener;\n}else{\n first=listener;\n}\n\n return function unsubscribe(){\n if (!isSubscribed || first===null) return;\n isSubscribed=false;\n\n if (listener.next){\n listener.next.prev=listener.prev;\n}else{\n last=listener.prev;\n}\n\n if (listener.prev){\n listener.prev.next=listener.next;\n}else{\n first=listener.next;\n}\n};\n}\n\n};\n}\n\nconst nullListeners={\n notify(){},\n\n get:()=>[]\n};\nfunction Subscription_createSubscription(store,parentSub){\n let unsubscribe;\n let listeners=nullListeners;// Reasons to keep the subscription active\n\n let subscriptionsAmount=0;// Is this specific subscription subscribed (or only nested ones?)\n\n let selfSubscribed=false;\n\n function addNestedSub(listener){\n trySubscribe();\n const cleanupListener=listeners.subscribe(listener);// cleanup nested sub\n\n let removed=false;\n return ()=>{\n if (!removed){\n removed=true;\n cleanupListener();\n tryUnsubscribe();\n}\n};\n}\n\n function notifyNestedSubs(){\n listeners.notify();\n}\n\n function handleChangeWrapper(){\n if (subscription.onStateChange){\n subscription.onStateChange();\n}\n}\n\n function isSubscribed(){\n return selfSubscribed;\n}\n\n function trySubscribe(){\n subscriptionsAmount++;\n\n if (!unsubscribe){\n unsubscribe=parentSub ? parentSub.addNestedSub(handleChangeWrapper):store.subscribe(handleChangeWrapper);\n listeners=createListenerCollection();\n}\n}\n\n function tryUnsubscribe(){\n subscriptionsAmount--;\n\n if (unsubscribe && subscriptionsAmount===0){\n unsubscribe();\n unsubscribe=undefined;\n listeners.clear();\n listeners=nullListeners;\n}\n}\n\n function trySubscribeSelf(){\n if (!selfSubscribed){\n selfSubscribed=true;\n trySubscribe();\n}\n}\n\n function tryUnsubscribeSelf(){\n if (selfSubscribed){\n selfSubscribed=false;\n tryUnsubscribe();\n}\n}\n\n const subscription={\n addNestedSub,\n notifyNestedSubs,\n handleChangeWrapper,\n isSubscribed,\n trySubscribe:trySubscribeSelf,\n tryUnsubscribe:tryUnsubscribeSelf,\n getListeners:()=>listeners\n};\n return subscription;\n}\n;// ./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js\n // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it,we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available,otherwise a store update may happen between render and the effect,\n// which may cause missed updates;we also must ensure the store subscription\n// is created synchronously,otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nconst canUseDOM=!!(typeof window !=='undefined' && typeof window.document !=='undefined' && typeof window.document.createElement !=='undefined');\nconst useIsomorphicLayoutEffect_useIsomorphicLayoutEffect=canUseDOM ? external_React_.useLayoutEffect :external_React_.useEffect;\n;// ./node_modules/react-redux/es/components/connect.js\n\n\nconst _excluded=(null && ([\"reactReduxForwardedRef\"]));\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlet useSyncExternalStore=(null && (notInitialized));\nconst initializeConnect=fn=>{\n useSyncExternalStore=fn;\n};// Define some constant arrays just to avoid re-creating these\n\nconst EMPTY_ARRAY=(null && ([null,0]));\nconst NO_SUBSCRIPTION_ARRAY=(null && ([null,null]));// Attempts to stringify whatever not-really-a-component value we were given\n// for logging in an error message\n\nconst stringifyComponent=Comp=>{\n try{\n return JSON.stringify(Comp);\n}catch (err){\n return String(Comp);\n}\n};\n\n// This is \"just\" a `useLayoutEffect`,but with two modifications:\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\n// - we extract this to a separate function to avoid closing over values\n// and causing memory leaks\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc,effectArgs,dependencies){\n useIsomorphicLayoutEffect(()=>effectFunc(...effectArgs),dependencies);\n}// Effect callback,extracted:assign the latest props values to refs for later usage\n\n\nfunction captureWrapperProps(lastWrapperProps,lastChildProps,renderIsScheduled,wrapperProps,// actualChildProps:unknown,\nchildPropsFromStoreUpdate,notifyNestedSubs){\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current=wrapperProps;\n renderIsScheduled.current=false;// If the render was from a store update,clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current){\n childPropsFromStoreUpdate.current=null;\n notifyNestedSubs();\n}\n}// Effect callback,extracted:subscribe to the Redux store or nearest connected ancestor,\n// check for updates after dispatched actions,and trigger re-renders.\n\n\nfunction subscribeUpdates(shouldHandleStateChanges,store,subscription,childPropsSelector,lastWrapperProps,lastChildProps,renderIsScheduled,isMounted,childPropsFromStoreUpdate,notifyNestedSubs,// forceComponentUpdateDispatch:React.Dispatch<any>,\nadditionalSubscribeListener){\n // If we're not subscribed to the store,nothing to do here\n if (!shouldHandleStateChanges) return ()=>{};// Capture values for checking if and when this component unmounts\n\n let didUnsubscribe=false;\n let lastThrownError=null;// We'll run this callback every time a store subscription update propagates to this component\n\n const checkForUpdates=()=>{\n if (didUnsubscribe || !isMounted.current){\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n}// TODO We're currently calling getState ourselves here,rather than letting `uSES` do it\n\n\n const latestStoreState=store.getState();\n let newChildProps,error;\n\n try{\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps=childPropsSelector(latestStoreState,lastWrapperProps.current);\n}catch (e){\n error=e;\n lastThrownError=e;\n}\n\n if (!error){\n lastThrownError=null;\n}// If the child props haven't changed,nothing to do here - cascade the subscription update\n\n\n if (newChildProps===lastChildProps.current){\n if (!renderIsScheduled.current){\n notifyNestedSubs();\n}\n}else{\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer,we couldn't clear out the value without\n // forcing another re-render,which we don't want.\n lastChildProps.current=newChildProps;\n childPropsFromStoreUpdate.current=newChildProps;\n renderIsScheduled.current=true;// TODO This is hacky and not how `uSES` is meant to be used\n // Trigger the React `useSyncExternalStore` subscriber\n\n additionalSubscribeListener();\n}\n};// Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange=checkForUpdates;\n subscription.trySubscribe();// Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n const unsubscribeWrapper=()=>{\n didUnsubscribe=true;\n subscription.tryUnsubscribe();\n subscription.onStateChange=null;\n\n if (lastThrownError){\n // It's possible that we caught an error due to a bad mapState function,but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly,but\n // if we ever do those wrong,this throw will surface the error in our tests.\n // In that case,throw the error from here so it doesn't get lost.\n throw lastThrownError;\n}\n};\n\n return unsubscribeWrapper;\n}// Reducer initial state creation for our update reducer\n\n\nconst initStateUpdates=()=>EMPTY_ARRAY;\n\nfunction strictEqual(a,b){\n return a===b;\n}\n\n\n\nlet hasWarnedAboutDeprecatedPureOption=false;\n\n\nfunction connect(mapStateToProps,mapDispatchToProps,mergeProps,{\n // The `pure` option has been removed,so TS doesn't like us destructuring this to check its existence.\n // @ts-ignore\n pure,\n areStatesEqual=strictEqual,\n areOwnPropsEqual=shallowEqual,\n areStatePropsEqual=shallowEqual,\n areMergedPropsEqual=shallowEqual,\n // use React's forwardRef to expose a ref of the wrapped component\n forwardRef=false,\n // the context consumer to use\n context=ReactReduxContext\n}){\n if (false) // removed by dead control flow\n{}\n\n const Context=context;\n const initMapStateToProps=mapStateToPropsFactory(mapStateToProps);\n const initMapDispatchToProps=mapDispatchToPropsFactory(mapDispatchToProps);\n const initMergeProps=mergePropsFactory(mergeProps);\n const shouldHandleStateChanges=Boolean(mapStateToProps);\n\n const wrapWithConnect=WrappedComponent=>{\n if (false) // removed by dead control flow\n{}\n\n const wrappedComponentName=WrappedComponent.displayName || WrappedComponent.name || 'Component';\n const displayName=`Connect(${wrappedComponentName})`;\n const selectorFactoryOptions={\n shouldHandleStateChanges,\n displayName,\n wrappedComponentName,\n WrappedComponent,\n // @ts-ignore\n initMapStateToProps,\n // @ts-ignore\n initMapDispatchToProps,\n initMergeProps,\n areStatesEqual,\n areStatePropsEqual,\n areOwnPropsEqual,\n areMergedPropsEqual\n};\n\n function ConnectFunction(props){\n const [propsContext,reactReduxForwardedRef,wrapperProps]=React.useMemo(()=>{\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs,alternate context instances).\n // To maintain the wrapperProps object reference,memoize this destructuring.\n const{\n reactReduxForwardedRef\n}=props,\n wrapperProps=_objectWithoutPropertiesLoose(props,_excluded);\n\n return [props.context,reactReduxForwardedRef,wrapperProps];\n},[props]);\n const ContextToUse=React.useMemo(()=>{\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && // @ts-ignore\n isContextConsumer(React.createElement(propsContext.Consumer,null)) ? propsContext:Context;\n},[propsContext,Context]);// Retrieve the store and ancestor subscription via context,if available\n\n const contextValue=React.useContext(ContextToUse);// The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n const didStoreComeFromProps=Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n const didStoreComeFromContext=Boolean(contextValue) && Boolean(contextValue.store);// Based on the previous check,one of these must be true\n\n\n const store=didStoreComeFromProps ? props.store :contextValue.store;\n const getServerState=didStoreComeFromContext ? contextValue.getServerState :store.getState;\n const childPropsSelector=React.useMemo(()=>{\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return defaultSelectorFactory(store.dispatch,selectorFactoryOptions);\n},[store]);\n const [subscription,notifyNestedSubs]=React.useMemo(()=>{\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY;// This Subscription's source should match where store came from:props vs. context. A component\n // connected to the store via props shouldn't use subscription from context,or vice versa.\n\n const subscription=createSubscription(store,didStoreComeFromProps ? undefined:contextValue.subscription);// `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop,where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n const notifyNestedSubs=subscription.notifyNestedSubs.bind(subscription);\n return [subscription,notifyNestedSubs];\n},[store,didStoreComeFromProps,contextValue]);// Determine what{store,subscription}value should be put into nested context,if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n const overriddenContextValue=React.useMemo(()=>{\n if (didStoreComeFromProps){\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n},contextValue,{\n subscription\n});\n},[didStoreComeFromProps,contextValue,subscription]);// Set up refs to coordinate values between the subscription effect and the render logic\n\n const lastChildProps=React.useRef();\n const lastWrapperProps=React.useRef(wrapperProps);\n const childPropsFromStoreUpdate=React.useRef();\n const renderIsScheduled=React.useRef(false);\n const isProcessingDispatch=React.useRef(false);\n const isMounted=React.useRef(false);\n const latestSubscriptionCallbackError=React.useRef();\n useIsomorphicLayoutEffect(()=>{\n isMounted.current=true;\n return ()=>{\n isMounted.current=false;\n};\n},[]);\n const actualChildPropsSelector=React.useMemo(()=>{\n const selector=()=>{\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However,we may have gotten new wrapper props after that\n // If we have new child props,and the same wrapper props,we know we should use the new child props as-is.\n // But,if we have new wrapper props,those might change the child props,so we have to recalculate things.\n // So,we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps===lastWrapperProps.current){\n return childPropsFromStoreUpdate.current;\n}// TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates,we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(),wrapperProps);\n};\n\n return selector;\n},[store,wrapperProps]);// We need this to execute synchronously every time we re-render. However,React warns\n // about useLayoutEffect in SSR,so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning,since neither will run anyway.\n\n const subscribeForReact=React.useMemo(()=>{\n const subscribe=reactListener=>{\n if (!subscription){\n return ()=>{};\n}\n\n return subscribeUpdates(shouldHandleStateChanges,store,subscription,// @ts-ignore\n childPropsSelector,lastWrapperProps,lastChildProps,renderIsScheduled,isMounted,childPropsFromStoreUpdate,notifyNestedSubs,reactListener);\n};\n\n return subscribe;\n},[subscription]);\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps,[lastWrapperProps,lastChildProps,renderIsScheduled,wrapperProps,childPropsFromStoreUpdate,notifyNestedSubs]);\n let actualChildProps;\n\n try{\n actualChildProps=useSyncExternalStore(// TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\n subscribeForReact,// TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\n actualChildPropsSelector,getServerState ? ()=>childPropsSelector(getServerState(),wrapperProps):actualChildPropsSelector);\n}catch (err){\n if (latestSubscriptionCallbackError.current){\n;\n err.message+=`\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`;\n}\n\n throw err;\n}\n\n useIsomorphicLayoutEffect(()=>{\n latestSubscriptionCallbackError.current=undefined;\n childPropsFromStoreUpdate.current=undefined;\n lastChildProps.current=actualChildProps;\n});// Now that all that's done,we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n const renderedWrappedComponent=React.useMemo(()=>{\n return (\n \n // @ts-ignore\n React.createElement(WrappedComponent,_extends({},actualChildProps,{\n ref:reactReduxForwardedRef\n}))\n);\n},[reactReduxForwardedRef,WrappedComponent,actualChildProps]);// If React sees the exact same element reference as last time,it bails out of re-rendering\n // that child,same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n const renderedChild=React.useMemo(()=>{\n if (shouldHandleStateChanges){\n // If this component is subscribed to store updates,we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance,and putting a different value into the context.\n return React.createElement(ContextToUse.Provider,{\n value:overriddenContextValue\n},renderedWrappedComponent);\n}\n\n return renderedWrappedComponent;\n},[ContextToUse,renderedWrappedComponent,overriddenContextValue]);\n return renderedChild;\n}\n\n const _Connect=React.memo(ConnectFunction);\n\n // Add a hacky cast to get the right output type\n const Connect=_Connect;\n Connect.WrappedComponent=WrappedComponent;\n Connect.displayName=ConnectFunction.displayName=displayName;\n\n if (forwardRef){\n const _forwarded=React.forwardRef(function forwardConnectRef(props,ref){\n // @ts-ignore\n return React.createElement(Connect,_extends({},props,{\n reactReduxForwardedRef:ref\n}));\n});\n\n const forwarded=_forwarded;\n forwarded.displayName=displayName;\n forwarded.WrappedComponent=WrappedComponent;\n return hoistStatics(forwarded,WrappedComponent);\n}\n\n return hoistStatics(Connect,WrappedComponent);\n};\n\n return wrapWithConnect;\n}\n\n const components_connect=((null && (connect)));\n;// ./node_modules/react-redux/es/components/Provider.js\n\n\n\n\n\nfunction Provider({\n store,\n context,\n children,\n serverState,\n stabilityCheck='once',\n noopCheck='once'\n}){\n const contextValue=external_React_.useMemo(()=>{\n const subscription=Subscription_createSubscription(store);\n return{\n store,\n subscription,\n getServerState:serverState ? ()=>serverState:undefined,\n stabilityCheck,\n noopCheck\n};\n},[store,serverState,stabilityCheck,noopCheck]);\n const previousState=external_React_.useMemo(()=>store.getState(),[store]);\n useIsomorphicLayoutEffect_useIsomorphicLayoutEffect(()=>{\n const{\n subscription\n}=contextValue;\n subscription.onStateChange=subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !==store.getState()){\n subscription.notifyNestedSubs();\n}\n\n return ()=>{\n subscription.tryUnsubscribe();\n subscription.onStateChange=undefined;\n};\n},[contextValue,previousState]);\n const Context=context || Context_ReactReduxContext;// @ts-ignore 'AnyAction' is assignable to the constraint of type 'A',but 'A' could be instantiated with a different subtype\n\n return external_React_.createElement(Context.Provider,{\n value:contextValue\n},children);\n}\n\n const components_Provider=(Provider);\n;// ./node_modules/react-redux/es/hooks/useStore.js\n\n\n\n\nfunction createStoreHook(context=Context_ReactReduxContext){\n const useReduxContext=// @ts-ignore\n context===Context_ReactReduxContext ? useReduxContext_useReduxContext :// @ts-ignore\n createReduxContextHook(context);\n return function useStore(){\n const{\n store\n}=useReduxContext();// @ts-ignore\n\n return store;\n};\n}\n\n\nconst useStore_useStore=createStoreHook();\n;// ./node_modules/react-redux/es/hooks/useDispatch.js\n\n\n\n\nfunction createDispatchHook(context=Context_ReactReduxContext){\n const useStore=// @ts-ignore\n context===Context_ReactReduxContext ? useStore_useStore :createStoreHook(context);\n return function useDispatch(){\n const store=useStore();// @ts-ignore\n\n return store.dispatch;\n};\n}\n\n\nconst useDispatch=createDispatchHook();\n;// ./node_modules/react-redux/es/exports.js\n\n\n\n\n\n\n\n\n\n;// ./node_modules/react-redux/es/index.js\n// The primary entry point assumes we're working with standard ReactDOM/RN,but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that,the useSyncExternalStore compat shim is needed.\n\n\n\n\n\n\ninitializeUseSelector(with_selector.useSyncExternalStoreWithSelector);\ninitializeConnect(shim.useSyncExternalStore);// Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM,React Native)\n\nsetBatch(external_ReactDOM_namespaceObject.unstable_batchedUpdates);\n\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose=__webpack_require__(8587);\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/clsx/dist/clsx.mjs\nvar clsx=__webpack_require__(4164);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\nvar composeClasses=__webpack_require__(5659);\n// EXTERNAL MODULE:./node_modules/@mui/system/colorManipulator.js\nvar colorManipulator=__webpack_require__(771);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/styled.js\nvar styled=__webpack_require__(1848);\n;// ./node_modules/@mui/material/styles/getOverlayAlpha.js\n// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nconst getOverlayAlpha=elevation=>{\n let alphaValue;\n if (elevation < 1){\n alphaValue=5.11916 * elevation ** 2;\n}else{\n alphaValue=4.5 * Math.log(elevation+1)+2;\n}\n return (alphaValue / 100).toFixed(2);\n};\n const styles_getOverlayAlpha=(getOverlayAlpha);\n// EXTERNAL MODULE:./node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js\nvar DefaultPropsProvider=__webpack_require__(5669);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\nvar generateUtilityClasses=__webpack_require__(8413);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\nvar generateUtilityClass_generateUtilityClass=__webpack_require__(1609);\n;// ./node_modules/@mui/material/Paper/paperClasses.js\n\n\nfunction getPaperUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPaper',slot);\n}\nconst paperClasses=(0,generateUtilityClasses.A)('MuiPaper',['root','rounded','outlined','elevation','elevation0','elevation1','elevation2','elevation3','elevation4','elevation5','elevation6','elevation7','elevation8','elevation9','elevation10','elevation11','elevation12','elevation13','elevation14','elevation15','elevation16','elevation17','elevation18','elevation19','elevation20','elevation21','elevation22','elevation23','elevation24']);\n const Paper_paperClasses=((null && (paperClasses)));\n// EXTERNAL MODULE:./node_modules/react/jsx-runtime.js\nvar jsx_runtime=__webpack_require__(4848);\n;// ./node_modules/@mui/material/Paper/Paper.js\n'use client';\n\n\n\nconst Paper_excluded=[\"className\",\"component\",\"elevation\",\"square\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses=ownerState=>{\n const{\n square,\n elevation,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,!square && 'rounded',variant==='elevation' && `elevation${elevation}`]\n};\n return (0,composeClasses.A)(slots,getPaperUtilityClass,classes);\n};\nconst PaperRoot=(0,styled.Ay)('div',{\n name:'MuiPaper',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],!ownerState.square && styles.rounded,ownerState.variant==='elevation' && styles[`elevation${ownerState.elevation}`]];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _theme$vars$overlays;\n return (0,esm_extends.A)({\n backgroundColor:(theme.vars || theme).palette.background.paper,\n color:(theme.vars || theme).palette.text.primary,\n transition:theme.transitions.create('box-shadow')\n},!ownerState.square &&{\n borderRadius:theme.shape.borderRadius\n},ownerState.variant==='outlined' &&{\n border:`1px solid ${(theme.vars || theme).palette.divider}`\n},ownerState.variant==='elevation' && (0,esm_extends.A)({\n boxShadow:(theme.vars || theme).shadows[ownerState.elevation]\n},!theme.vars && theme.palette.mode==='dark' &&{\n backgroundImage:`linear-gradient(${(0,colorManipulator.X4)('#fff',styles_getOverlayAlpha(ownerState.elevation))},${(0,colorManipulator.X4)('#fff',styles_getOverlayAlpha(ownerState.elevation))})`\n},theme.vars &&{\n backgroundImage:(_theme$vars$overlays=theme.vars.overlays)==null ? void 0:_theme$vars$overlays[ownerState.elevation]\n}));\n});\nconst Paper=external_React_.forwardRef(function Paper(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPaper'\n});\n const{\n className,\n component='div',\n elevation=1,\n square=false,\n variant='elevation'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Paper_excluded);,props,{\n component,\n elevation,\n square,\n variant\n});\n const classes=useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(PaperRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other));\n});\n false ? 0 :void 0;\n const Paper_Paper=(Paper);\n// EXTERNAL MODULE:./node_modules/@mui/styled-engine/index.js+4 modules\nvar styled_engine=__webpack_require__(2532);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx=__webpack_require__(3571);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js\nvar extendSxProp=__webpack_require__(9599);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/createTheme/createTheme.js+2 modules\nvar createTheme=__webpack_require__(8749);\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js\nvar emotion_element_f0de968e_browser_esm=__webpack_require__(4684);\n;// ./node_modules/@mui/system/esm/useThemeWithoutDefault.js\n'use client';\n\n\n\nfunction isObjectEmpty(obj){\n return Object.keys(obj).length===0;\n}\nfunction useTheme(defaultTheme=null){\n const contextTheme=external_React_.useContext(emotion_element_f0de968e_browser_esm.T);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme:contextTheme;\n}\n const useThemeWithoutDefault=(useTheme);\n;// ./node_modules/@mui/system/esm/useTheme.js\n'use client';\n\n\n\nconst systemDefaultTheme=(0,createTheme.A)();\nfunction useTheme_useTheme(defaultTheme=systemDefaultTheme){\n return useThemeWithoutDefault(defaultTheme);\n}\n const esm_useTheme=(useTheme_useTheme);\n;// ./node_modules/@mui/system/esm/createBox.js\n'use client';\n\n\n\nconst createBox_excluded=[\"className\",\"component\"];){\n const{\n themeId,\n defaultTheme,\n defaultClassName='MuiBox-root',\n generateClassName\n}=options;\n const BoxRoot=(0,styled_engine[\"default\"])('div',{\n shouldForwardProp:prop=>prop !=='theme' && prop !=='sx' && prop !=='as'\n})(styleFunctionSx.A);\n const Box=external_React_.forwardRef(function Box(inProps,ref){\n const theme=esm_useTheme(defaultTheme);\n const _extendSxProp=(0,extendSxProp.A)(inProps),\n{\n className,\n component='div'\n}=_extendSxProp,\n other=(0,objectWithoutPropertiesLoose.A)(_extendSxProp,createBox_excluded);\n return (0,jsx_runtime.jsx)(BoxRoot,(0,esm_extends.A)({\n as:component,\n ref:ref,\n className:(0,clsx.A)(className,generateClassName ? generateClassName(defaultClassName):defaultClassName),\n theme:themeId ? theme[themeId] || theme:theme\n},other));\n});\n return Box;\n}\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js\nvar ClassNameGenerator=__webpack_require__(9071);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/createTheme.js+13 modules\nvar styles_createTheme=__webpack_require__(6544);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/identifier.js\nvar identifier=__webpack_require__(8312);\n;// ./node_modules/@mui/material/Box/boxClasses.js\n\nconst boxClasses=(0,generateUtilityClasses.A)('MuiBox',['root']);\n const Box_boxClasses=(boxClasses);\n;// ./node_modules/@mui/material/Box/Box.js\n'use client';\n\n\n\n\n\n\n\nconst defaultTheme=(0,styles_createTheme.A)();\nconst Box=createBox({\n themeId:identifier.A,\n defaultTheme,\n defaultClassName:Box_boxClasses.root,\n generateClassName:ClassNameGenerator.A.generate\n});\n false ? 0 :void 0;\n const Box_Box=(Box);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useId/useId.js\nvar useId=__webpack_require__(4661);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge=__webpack_require__(1317);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js\nvar formatMuiErrorMessage=__webpack_require__(9453);\n;// ./node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js\n\nfunction isHostComponent(element){\n return typeof element==='string';\n}\n const isHostComponent_isHostComponent=(isHostComponent);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useForkRef/useForkRef.js\nvar useForkRef=__webpack_require__(1523);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js\nvar ownerWindow=__webpack_require__(4877);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js\nvar useEventCallback=__webpack_require__(1547);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js\nvar useEnhancedEffect=__webpack_require__(1529);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/debounce/debounce.js\nvar debounce=__webpack_require__(4705);\n;// ./node_modules/@mui/material/TextareaAutosize/TextareaAutosize.js\n'use client';\n\n\n\nconst TextareaAutosize_excluded=[\"onChange\",\"maxRows\",\"minRows\",\"style\",\"value\"];\n\n\n\n\n\nfunction getStyleValue(value){\n return parseInt(value,10) || 0;\n}\nconst styles={\n shadow:{\n // Visibility needed to hide the extra text area on iPads\n visibility:'hidden',\n // Remove from the content flow\n position:'absolute',\n // Ignore the scrollbar width\n overflow:'hidden',\n height:0,\n top:0,\n left:0,\n // Create a new layer,increase the isolation of the computed values\n transform:'translateZ(0)'\n}\n};\nfunction TextareaAutosize_isObjectEmpty(object){\n // eslint-disable-next-line\n for (const _ in object){\n return false;\n}\n return true;\n}\nfunction isEmpty(obj){\n return TextareaAutosize_isObjectEmpty(obj) || obj.outerHeightStyle===0 && !obj.overflowing;\n}\n\n\nconst TextareaAutosize=external_React_.forwardRef(function TextareaAutosize(props,forwardedRef){\n const{\n onChange,\n maxRows,\n minRows=1,\n style,\n value\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TextareaAutosize_excluded);\n const{\n current:isControlled\n}=external_React_.useRef(value !=null);\n const textareaRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(forwardedRef,textareaRef);\n const heightRef=external_React_.useRef(null);\n const hiddenTextareaRef=external_React_.useRef(null);\n const calculateTextareaStyles=external_React_.useCallback(()=>{\n const textarea=textareaRef.current;\n const hiddenTextarea=hiddenTextareaRef.current;\n if (!textarea || !hiddenTextarea){\n return undefined;\n}\n const containerWindow=(0,ownerWindow.A)(textarea);\n const computedStyle=containerWindow.getComputedStyle(textarea);\n\n // If input's width is shrunk and it's not visible,don't sync height.\n if (computedStyle.width==='0px'){\n return{\n outerHeightStyle:0,\n overflowing:false\n};\n}\n hiddenTextarea.style.width=computedStyle.width;\n hiddenTextarea.value=textarea.value || props.placeholder || 'x';\n if (hiddenTextarea.value.slice(-1)==='\\n'){\n // Certain fonts which overflow the line height will cause the textarea\n // to report a different scrollHeight depending on whether the last line\n // is empty. Make it non-empty to avoid this issue.\n hiddenTextarea.value+=' ';\n}\n const boxSizing=computedStyle.boxSizing;\n const padding=getStyleValue(computedStyle.paddingBottom)+getStyleValue(computedStyle.paddingTop);\n const border=getStyleValue(computedStyle.borderBottomWidth)+getStyleValue(computedStyle.borderTopWidth);\n\n // The height of the inner content\n const innerHeight=hiddenTextarea.scrollHeight;\n\n // Measure height of a textarea with a single row\n hiddenTextarea.value='x';\n const singleRowHeight=hiddenTextarea.scrollHeight;\n\n // The height of the outer content\n let outerHeight=innerHeight;\n if (minRows){\n outerHeight=Math.max(Number(minRows) * singleRowHeight, outerHeight);\n}\n if (maxRows){\n outerHeight=Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n}\n outerHeight=Math.max(outerHeight, singleRowHeight);\n\n // Take the box sizing into account for applying this value as a style.\n const outerHeightStyle=outerHeight+(boxSizing==='border-box' ? padding+border :0);\n const overflowing=Math.abs(outerHeight - innerHeight) <=1;\n return{\n outerHeightStyle,\n overflowing\n};\n},[maxRows,minRows,props.placeholder]);\n const didHeightChange=(0,useEventCallback.A)(()=>{\n const textarea=textareaRef.current;\n const textareaStyles=calculateTextareaStyles();\n if (!textarea || !textareaStyles || isEmpty(textareaStyles)){\n return false;\n}\n const outerHeightStyle=textareaStyles.outerHeightStyle;\n return heightRef.current !=null && heightRef.current !==outerHeightStyle;\n});\n const syncHeight=external_React_.useCallback(()=>{\n const textarea=textareaRef.current;\n const textareaStyles=calculateTextareaStyles();\n if (!textarea || !textareaStyles || isEmpty(textareaStyles)){\n return;\n}\n const outerHeightStyle=textareaStyles.outerHeightStyle;\n if (heightRef.current !==outerHeightStyle){\n heightRef.current=outerHeightStyle;\n textarea.style.height=`${outerHeightStyle}px`;\n}\n textarea.style.overflow=textareaStyles.overflowing ? 'hidden':'';\n},[calculateTextareaStyles]);\n const frameRef=external_React_.useRef(-1);\n (0,useEnhancedEffect.A)(()=>{\n const debouncedHandleResize=(0,debounce.A)(syncHeight);\n const textarea=textareaRef==null ? void 0 :textareaRef.current;\n if (!textarea){\n return undefined;\n}\n const containerWindow=(0,ownerWindow.A)(textarea);\n containerWindow.addEventListener('resize',debouncedHandleResize);\n let resizeObserver;\n if (typeof ResizeObserver !=='undefined'){\n resizeObserver=new ResizeObserver(()=>{\n if (didHeightChange()){\n // avoid \"ResizeObserver loop completed with undelivered notifications\" error\n // by temporarily unobserving the textarea element while manipulating the height\n // and reobserving one frame later\n resizeObserver.unobserve(textarea);\n cancelAnimationFrame(frameRef.current);\n syncHeight();\n frameRef.current=requestAnimationFrame(()=>{\n resizeObserver.observe(textarea);\n});\n}\n});\n resizeObserver.observe(textarea);\n}\n return ()=>{\n debouncedHandleResize.clear();\n cancelAnimationFrame(frameRef.current);\n containerWindow.removeEventListener('resize',debouncedHandleResize);\n if (resizeObserver){\n resizeObserver.disconnect();\n}\n};\n},[calculateTextareaStyles,syncHeight,didHeightChange]);\n (0,useEnhancedEffect.A)(()=>{\n syncHeight();\n});\n const handleChange=event=>{\n if (!isControlled){\n syncHeight();\n}\n if (onChange){\n onChange(event);\n}\n};\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(\"textarea\",(0,esm_extends.A)({\n value:value,\n onChange:handleChange,\n ref:handleRef\n // Apply the rows prop to get a \"correct\" first SSR paint\n,\n rows:minRows,\n style:style\n},other)),(0,jsx_runtime.jsx)(\"textarea\",{\n \"aria-hidden\":true,\n className:props.className,\n readOnly:true,\n ref:hiddenTextareaRef,\n tabIndex:-1,\n style:(0,esm_extends.A)({},styles.shadow,style,{\n paddingTop:0,\n paddingBottom:0\n})\n})]\n});\n});\n false ? 0 :void 0;\n const TextareaAutosize_TextareaAutosize=(TextareaAutosize);\n;// ./node_modules/@mui/material/FormControl/formControlState.js\nfunction formControlState({\n props,\n states,\n muiFormControl\n}){\n return states.reduce((acc,state)=>{\n acc[state]=props[state];\n if (muiFormControl){\n if (typeof props[state]==='undefined'){\n acc[state]=muiFormControl[state];\n}\n}\n return acc;\n});\n}\n;// ./node_modules/@mui/material/FormControl/FormControlContext.js\n\n\nconst FormControlContext=external_React_.createContext(undefined);\n const FormControl_FormControlContext=(FormControlContext);\n;// ./node_modules/@mui/material/FormControl/useFormControl.js\n'use client';\n\n\n\nfunction useFormControl(){\n return external_React_.useContext(FormControl_FormControlContext);\n}\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/capitalize.js\nvar capitalize=__webpack_require__(8466);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useForkRef.js\nvar utils_useForkRef=__webpack_require__(6852);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEnhancedEffect.js\nvar utils_useEnhancedEffect=__webpack_require__(2778);\n// EXTERNAL MODULE:./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js\nvar GlobalStyles=__webpack_require__(9940);\n;// ./node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js\n'use client';\n\n\n\n\n\n\nfunction GlobalStyles_GlobalStyles({\n styles,\n themeId,\n defaultTheme={}\n}){\n const upperTheme=esm_useTheme(defaultTheme);\n const globalStyles=typeof styles==='function' ? styles(themeId ? upperTheme[themeId] || upperTheme :upperTheme) :styles;\n return (0,jsx_runtime.jsx)(GlobalStyles.A,{\n styles:globalStyles\n});\n}\n false ? 0 :void 0;\n const esm_GlobalStyles_GlobalStyles=(GlobalStyles_GlobalStyles);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/defaultTheme.js\nvar styles_defaultTheme=__webpack_require__(2765);\n;// ./node_modules/@mui/material/GlobalStyles/GlobalStyles.js\n'use client';\n\n\n\n\n\n\n\n\nfunction GlobalStyles_GlobalStyles_GlobalStyles(props){\n return (0,jsx_runtime.jsx)(esm_GlobalStyles_GlobalStyles,(0,esm_extends.A)({},props,{\n defaultTheme:styles_defaultTheme.A,\n themeId:identifier.A\n}));\n}\n false ? 0 :void 0;\n const material_GlobalStyles_GlobalStyles=(GlobalStyles_GlobalStyles_GlobalStyles);\n;// ./node_modules/@mui/material/InputBase/utils.js\n// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns{boolean}true if string (including '') or number (including zero)\nfunction hasValue(value){\n return value !=null && !(Array.isArray(value) && value.length===0);\n}\n\n// Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns{boolean}False when not present or empty string.\n// True when any number or string with length.\nfunction isFilled(obj,SSR=false){\n return obj && (hasValue(obj.value) && obj.value !=='' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !=='');\n}\n\n// Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns{boolean}False when no adornments.\n// True when adorned at the start.\nfunction isAdornedStart(obj){\n return obj.startAdornment;\n}\n;// ./node_modules/@mui/material/InputBase/inputBaseClasses.js\n\n\nfunction getInputBaseUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputBase',slot);\n}\nconst inputBaseClasses=(0,generateUtilityClasses.A)('MuiInputBase',['root','formControl','focused','disabled','adornedStart','adornedEnd','error','sizeSmall','multiline','colorSecondary','fullWidth','hiddenLabel','readOnly','input','inputSizeSmall','inputMultiline','inputTypeSearch','inputAdornedStart','inputAdornedEnd','inputHiddenLabel']);\n const InputBase_inputBaseClasses=(inputBaseClasses);\n;// ./node_modules/@mui/material/InputBase/InputBase.js\n'use client';\n\n\n\n\nconst InputBase_excluded=[\"aria-describedby\",\"autoComplete\",\"autoFocus\",\"className\",\"color\",\"components\",\"componentsProps\",\"defaultValue\",\"disabled\",\"disableInjectingGlobalStyles\",\"endAdornment\",\"error\",\"fullWidth\",\"id\",\"inputComponent\",\"inputProps\",\"inputRef\",\"margin\",\"maxRows\",\"minRows\",\"multiline\",\"name\",\"onBlur\",\"onChange\",\"onClick\",\"onFocus\",\"onKeyDown\",\"onKeyUp\",\"placeholder\",\"readOnly\",\"renderSuffix\",\"rows\",\"size\",\"slotProps\",\"slots\",\"startAdornment\",\"type\",\"value\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst rootOverridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.formControl && styles.formControl,ownerState.startAdornment && styles.adornedStart,ownerState.endAdornment && styles.adornedEnd,ownerState.error && styles.error,ownerState.size==='small' && styles.sizeSmall,ownerState.multiline && styles.multiline,ownerState.color && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.fullWidth && styles.fullWidth,ownerState.hiddenLabel && styles.hiddenLabel];\n};\nconst inputOverridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.input,ownerState.size==='small' && styles.inputSizeSmall,ownerState.multiline && styles.inputMultiline,ownerState.type==='search' && styles.inputTypeSearch,ownerState.startAdornment && styles.inputAdornedStart,ownerState.endAdornment && styles.inputAdornedEnd,ownerState.hiddenLabel && styles.inputHiddenLabel];\n};\nconst InputBase_useUtilityClasses=ownerState=>{\n const{\n classes,\n color,\n disabled,\n error,\n endAdornment,\n focused,\n formControl,\n fullWidth,\n hiddenLabel,\n multiline,\n readOnly,\n size,\n startAdornment,\n type\n}=ownerState;\n const slots={\n root:['root',`color${(0,capitalize.A)(color)}`,disabled && 'disabled',error && 'error',fullWidth && 'fullWidth',focused && 'focused',formControl && 'formControl',size && size !=='medium' && `size${(0,capitalize.A)(size)}`,multiline && 'multiline',startAdornment && 'adornedStart',endAdornment && 'adornedEnd',hiddenLabel && 'hiddenLabel',readOnly && 'readOnly'],\n input:['input',disabled && 'disabled',type==='search' && 'inputTypeSearch',multiline && 'inputMultiline',size==='small' && 'inputSizeSmall',hiddenLabel && 'inputHiddenLabel',startAdornment && 'inputAdornedStart',endAdornment && 'inputAdornedEnd',readOnly && 'readOnly']\n};\n return (0,composeClasses.A)(slots,getInputBaseUtilityClass,classes);\n};\nconst InputBaseRoot=(0,styled.Ay)('div',{\n name:'MuiInputBase',\n slot:'Root',\n overridesResolver:rootOverridesResolver\n})(({\n theme,\n ownerState\n},theme.typography.body1,{\n color:(theme.vars || theme).palette.text.primary,\n lineHeight:'1.4375em',\n // 23px\n boxSizing:'border-box',\n // Prevent padding issue with fullWidth.\n position:'relative',\n cursor:'text',\n display:'inline-flex',\n alignItems:'center',\n [`&.${InputBase_inputBaseClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled,\n cursor:'default'\n}\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'4px 0 5px'\n},ownerState.size==='small' &&{\n paddingTop:1\n}),ownerState.fullWidth &&{\n width:'100%'\n}));\nconst InputBaseComponent=(0,styled.Ay)('input',{\n name:'MuiInputBase',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>{\n const light=theme.palette.mode==='light';\n const placeholder=(0,esm_extends.A)({\n color:'currentColor'\n},theme.vars ?{\n opacity:theme.vars.opacity.inputPlaceholder\n}:{\n opacity:light ? 0.42:0.5\n},{\n transition:theme.transitions.create('opacity',{\n duration:theme.transitions.duration.shorter\n})\n});\n const placeholderHidden={\n opacity:'0!important'\n};\n const placeholderVisible=theme.vars ?{\n opacity:theme.vars.opacity.inputPlaceholder\n}:{\n opacity:light ? 0.42:0.5\n};\n return (0,esm_extends.A)({\n font:'inherit',\n letterSpacing:'inherit',\n color:'currentColor',\n padding:'4px 0 5px',\n border:0,\n boxSizing:'content-box',\n background:'none',\n height:'1.4375em',\n // Reset 23pxthe native input line-height\n margin:0,\n // Reset for Safari\n WebkitTapHighlightColor:'transparent',\n display:'block',\n // Make the flex item shrink with Firefox\n minWidth:0,\n width:'100%',\n // Fix IE11 width issue\n animationName:'mui-auto-fill-cancel',\n animationDuration:'10ms',\n '&::-webkit-input-placeholder':placeholder,\n '&::-moz-placeholder':placeholder,\n // Firefox 19+\n '&:-ms-input-placeholder':placeholder,\n // IE11\n '&::-ms-input-placeholder':placeholder,\n // Edge\n '&:focus':{\n outline:0\n},\n // Reset Firefox invalid required input style\n '&:invalid':{\n boxShadow:'none'\n},\n '&::-webkit-search-decoration':{\n // Remove the padding when type=search.\n WebkitAppearance:'none'\n},\n // Show and hide the placeholder logic\n [`label[data-shrink=false]+.${InputBase_inputBaseClasses.formControl}&`]:{\n '&::-webkit-input-placeholder':placeholderHidden,\n '&::-moz-placeholder':placeholderHidden,\n // Firefox 19+\n '&:-ms-input-placeholder':placeholderHidden,\n // IE11\n '&::-ms-input-placeholder':placeholderHidden,\n // Edge\n '&:focus::-webkit-input-placeholder':placeholderVisible,\n '&:focus::-moz-placeholder':placeholderVisible,\n // Firefox 19+\n '&:focus:-ms-input-placeholder':placeholderVisible,\n // IE11\n '&:focus::-ms-input-placeholder':placeholderVisible // Edge\n},\n [`&.${InputBase_inputBaseClasses.disabled}`]:{\n opacity:1,\n // Reset iOS opacity\n WebkitTextFillColor:(theme.vars || theme).palette.text.disabled // Fix opacity Safari bug\n},\n '&:-webkit-autofill':{\n animationDuration:'5000s',\n animationName:'mui-auto-fill'\n}\n},ownerState.size==='small' &&{\n paddingTop:1\n},ownerState.multiline &&{\n height:'auto',\n resize:'none',\n padding:0,\n paddingTop:0\n},ownerState.type==='search' &&{\n // Improve type search style.\n MozAppearance:'textfield'\n});\n});\nconst inputGlobalStyles=(0,jsx_runtime.jsx)(material_GlobalStyles_GlobalStyles,{\n styles:{\n '@keyframes mui-auto-fill':{\n from:{\n display:'block'\n}\n},\n '@keyframes mui-auto-fill-cancel':{\n from:{\n display:'block'\n}\n}\n}\n});\n\n\nconst InputBase=external_React_.forwardRef(function InputBase(inProps,ref){\n var _slotProps$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInputBase'\n});\n const{\n 'aria-describedby':ariaDescribedby,\n autoComplete,\n autoFocus,\n className,\n components={},\n startAdornment,\n type='text',\n value:valueProp\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputBase_excluded);\n const value=inputPropsProp.value !=null ? inputPropsProp.value :valueProp;\n const{\n current:isControlled\n}=external_React_.useRef(value !=null);\n const inputRef=external_React_.useRef();\n const handleInputRefWarning=external_React_.useCallback(instance=>{\n if (false) // removed by dead control flow\n{}\n},[]);\n const handleInputRef=(0,utils_useForkRef.A)(inputRef,inputRefProp,inputPropsProp.ref,handleInputRefWarning);\n const [focused,setFocused]=external_React_.useState(false);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','disabled','error','hiddenLabel','size','required','filled']\n});\n fcs.focused=muiFormControl ? muiFormControl.focused :focused;\n\n // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n external_React_.useEffect(()=>{\n if (!muiFormControl && disabled && focused){\n setFocused(false);\n if (onBlur){\n onBlur();\n}\n}\n},[muiFormControl,disabled,focused,onBlur]);\n const onFilled=muiFormControl && muiFormControl.onFilled;\n const onEmpty=muiFormControl && muiFormControl.onEmpty;\n const checkDirty=external_React_.useCallback(obj=>{\n if (isFilled(obj)){\n if (onFilled){\n onFilled();\n}\n}else if (onEmpty){\n onEmpty();\n}\n},[onFilled,onEmpty]);\n (0,utils_useEnhancedEffect.A)(()=>{\n if (isControlled){\n checkDirty({\n value\n});\n}\n},[value,checkDirty,isControlled]);\n const handleFocus=event=>{\n // Fix a bug with IE11 where the focus/blur events are triggered\n // while the component is disabled.\n if (fcs.disabled){\n event.stopPropagation();\n return;\n}\n if (onFocus){\n onFocus(event);\n}\n if (inputPropsProp.onFocus){\n inputPropsProp.onFocus(event);\n}\n if (muiFormControl && muiFormControl.onFocus){\n muiFormControl.onFocus(event);\n}else{\n setFocused(true);\n}\n};\n const handleBlur=event=>{\n if (onBlur){\n onBlur(event);\n}\n if (inputPropsProp.onBlur){\n inputPropsProp.onBlur(event);\n}\n if (muiFormControl && muiFormControl.onBlur){\n muiFormControl.onBlur(event);\n}else{\n setFocused(false);\n}\n};\n const handleChange=(event,...args)=>{\n if (!isControlled){\n const element=event.target || inputRef.current;\n if (element==null){\n throw new Error(false ? 0:(0,formatMuiErrorMessage.A)(1));\n}\n checkDirty({\n value:element.value\n});\n}\n if (inputPropsProp.onChange){\n inputPropsProp.onChange(event,...args);\n}\n\n // Perform in the willUpdate\n if (onChange){\n onChange(event,...args);\n}\n};\n\n // Check the input state on mount,in case it was filled by the user\n // or auto filled by the browser before the hydration (for SSR).\n external_React_.useEffect(()=>{\n checkDirty(inputRef.current);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[]);\n const handleClick=event=>{\n if (inputRef.current && event.currentTarget===event.target){\n inputRef.current.focus();\n}\n if (onClick){\n onClick(event);\n}\n};\n let InputComponent=inputComponent;\n let inputProps=inputPropsProp;\n if (multiline && InputComponent==='input'){\n if (rows){\n if (false) // removed by dead control flow\n{}\n inputProps=(0,esm_extends.A)({\n type:undefined,\n minRows:rows,\n maxRows:rows\n},inputProps);\n}else{\n inputProps=(0,esm_extends.A)({\n type:undefined,\n maxRows,\n minRows\n},inputProps);\n}\n InputComponent=TextareaAutosize_TextareaAutosize;\n}\n const handleAutoFill=event=>{\n // Provide a fake value as Chrome might not let you access it for security reasons.\n checkDirty(event.animationName==='mui-auto-fill-cancel' ? inputRef.current :{\n value:'x'\n});\n};\n external_React_.useEffect(()=>{\n if (muiFormControl){\n muiFormControl.setAdornedStart(Boolean(startAdornment));\n}\n},[muiFormControl,startAdornment]);,props,{\n color:fcs.color || 'primary',\n disabled:fcs.disabled,\n endAdornment,\n error:fcs.error,\n focused:fcs.focused,\n formControl:muiFormControl,\n fullWidth,\n hiddenLabel:fcs.hiddenLabel,\n multiline,\n size:fcs.size,\n startAdornment,\n type\n});\n const classes=InputBase_useUtilityClasses(ownerState);\n const Root=slots.root || components.Root || InputBaseRoot;;\n const Input=slots.input || components.Input || InputBaseComponent;,inputProps,(_slotProps$input=slotProps.input) !=null ? _slotProps$input :componentsProps.input);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[!disableInjectingGlobalStyles && inputGlobalStyles,(0,jsx_runtime.jsxs)(Root,(0,esm_extends.A)({},rootProps,!isHostComponent_isHostComponent(Root) &&{\n ownerState:(0,esm_extends.A)({},ownerState,rootProps.ownerState)\n},{\n ref:ref,\n onClick:handleClick\n},other,{\n className:(0,clsx.A)(classes.root,rootProps.className,className,readOnly && 'MuiInputBase-readOnly'),\n children:[startAdornment,(0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:null,\n children:(0,jsx_runtime.jsx)(Input,(0,esm_extends.A)({\n ownerState:ownerState,\n \"aria-invalid\":fcs.error,\n \"aria-describedby\":ariaDescribedby,\n autoComplete:autoComplete,\n autoFocus:autoFocus,\n defaultValue:defaultValue,\n disabled:fcs.disabled,\n id:id,\n onAnimationStart:handleAutoFill,\n name:name,\n placeholder:placeholder,\n readOnly:readOnly,\n required:fcs.required,\n rows:rows,\n value:value,\n onKeyDown:onKeyDown,\n onKeyUp:onKeyUp,\n type:type\n},inputProps,!isHostComponent_isHostComponent(Input) &&{\n as:InputComponent,\n ownerState:(0,esm_extends.A)({},ownerState,inputProps.ownerState)\n},{\n ref:handleInputRef,\n className:(0,clsx.A)(classes.input,inputProps.className,readOnly && 'MuiInputBase-readOnly'),\n onBlur:handleBlur,\n onChange:handleChange,\n onFocus:handleFocus\n}))\n},fcs,{\n startAdornment\n})):null]\n}))]\n});\n});\n false ? 0 :void 0;\n const InputBase_InputBase=(InputBase);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/rootShouldForwardProp.js\nvar rootShouldForwardProp=__webpack_require__(9770);\n;// ./node_modules/@mui/material/Input/inputClasses.js\n\n\n\n\nfunction getInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiInput',['root','underline','input']));\n const Input_inputClasses=(inputClasses);\n;// ./node_modules/@mui/material/Input/Input.js\n'use client';\n\n\n\nconst Input_excluded=[\"disableUnderline\",\"components\",\"componentsProps\",\"fullWidth\",\"inputComponent\",\"multiline\",\"slotProps\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\nconst Input_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableUnderline\n}=ownerState;\n const slots={\n root:['root',!disableUnderline && 'underline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getInputUtilityClass,classes);,classes,composedClasses);\n};\nconst InputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiInput',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [...rootOverridesResolver(props,styles),!ownerState.disableUnderline && styles.underline];\n}\n})(({\n theme,\n ownerState\n})=>{\n const light=theme.palette.mode==='light';\n let bottomLineColor=light ? 'rgba(0,0,0,.42)' :'rgba(255,255,255,.7)';\n if (theme.vars){\n bottomLineColor=`rgba(${theme.vars.palette.common.onBackgroundChannel}/ ${theme.vars.opacity.inputUnderline})`;\n}\n return (0,esm_extends.A)({\n position:'relative'\n},ownerState.formControl &&{\n 'label+&':{\n marginTop:16\n}\n},!ownerState.disableUnderline &&{\n '&::after':{\n borderBottom:`2px solid ${(theme.vars || theme).palette[ownerState.color].main}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\"',\n position:'absolute',\n right:0,\n transform:'scaleX(0)',\n transition:theme.transitions.create('transform',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&.${Input_inputClasses.focused}:after`]:{\n // translateX(0) is a workaround for Safari transform scale bug\n // See https://github.com/mui/material-ui/issues/31766\n transform:'scaleX(1) translateX(0)'\n},\n [`&.${Input_inputClasses.error}`]:{\n '&::before,&::after':{\n borderBottomColor:(theme.vars || theme).palette.error.main\n}\n},\n '&::before':{\n borderBottom:`1px solid ${bottomLineColor}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\\\\00a0\"',\n position:'absolute',\n right:0,\n transition:theme.transitions.create('border-bottom-color',{\n duration:theme.transitions.duration.shorter\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&:hover:not(.${Input_inputClasses.disabled},.${Input_inputClasses.error}):before`]:{\n borderBottom:`2px solid ${(theme.vars || theme).palette.text.primary}`,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n borderBottom:`1px solid ${bottomLineColor}`\n}\n},\n [`&.${Input_inputClasses.disabled}:before`]:{\n borderBottomStyle:'dotted'\n}\n});\n});\nconst InputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n});\nconst Input=external_React_.forwardRef(function Input(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInput'\n});\n const{\n disableUnderline,\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Input_excluded);\n const classes=Input_useUtilityClasses(props);\n const ownerState={\n disableUnderline\n};\n const inputComponentsProps={\n root:{\n ownerState\n}\n};\n const componentsProps=(slotProps !=null ? slotProps :componentsPropsProp) ? (0,deepmerge.A)(slotProps !=null ? slotProps :componentsPropsProp,inputComponentsProps) :inputComponentsProps;\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :InputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :InputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n slotProps:componentsProps,\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\nInput.muiName='Input';\n const Input_Input=(Input);\n;// ./node_modules/@mui/material/FilledInput/filledInputClasses.js\n\n\n\n\nfunction getFilledInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFilledInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiFilledInput',['root','underline','input']));\n const FilledInput_filledInputClasses=(filledInputClasses);\n;// ./node_modules/@mui/material/FilledInput/FilledInput.js\n'use client';\n\n\n\nconst FilledInput_excluded=[\"disableUnderline\",\"components\",\"componentsProps\",\"fullWidth\",\"hiddenLabel\",\"inputComponent\",\"multiline\",\"slotProps\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FilledInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableUnderline\n}=ownerState;\n const slots={\n root:['root',!disableUnderline && 'underline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getFilledInputUtilityClass,classes);,classes,composedClasses);\n};\nconst FilledInputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiFilledInput',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [...rootOverridesResolver(props,styles),!ownerState.disableUnderline && styles.underline];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _palette;\n const light=theme.palette.mode==='light';\n const bottomLineColor=light ? 'rgba(0,0,0,.42)' :'rgba(255,255,255,.7)';\n const backgroundColor=light ? 'rgba(0,0,0,.06)' :'rgba(255,255,255,.09)';\n const hoverBackground=light ? 'rgba(0,0,0,.09)' :'rgba(255,255,255,.13)';\n const disabledBackground=light ? 'rgba(0,0,0,.12)' :'rgba(255,255,255,.12)';\n return (0,esm_extends.A)({\n position:'relative',\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg :backgroundColor,\n borderTopLeftRadius:(theme.vars || theme).shape.borderRadius,\n borderTopRightRadius:(theme.vars || theme).shape.borderRadius,\n transition:theme.transitions.create('background-color',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n '&:hover':{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.hoverBg :hoverBackground,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg:backgroundColor\n}\n},\n [`&.${FilledInput_filledInputClasses.focused}`]:{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.bg:backgroundColor\n},\n [`&.${FilledInput_filledInputClasses.disabled}`]:{\n backgroundColor:theme.vars ? theme.vars.palette.FilledInput.disabledBg:disabledBackground\n}\n},!ownerState.disableUnderline &&{\n '&::after':{\n borderBottom:`2px solid ${(_palette=(theme.vars || theme).palette[ownerState.color || 'primary'])==null ? void 0:_palette.main}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\"',\n position:'absolute',\n right:0,\n transform:'scaleX(0)',\n transition:theme.transitions.create('transform',{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&.${FilledInput_filledInputClasses.focused}:after`]:{\n // translateX(0) is a workaround for Safari transform scale bug\n // See https://github.com/mui/material-ui/issues/31766\n transform:'scaleX(1) translateX(0)'\n},\n [`&.${FilledInput_filledInputClasses.error}`]:{\n '&::before,&::after':{\n borderBottomColor:(theme.vars || theme).palette.error.main\n}\n},\n '&::before':{\n borderBottom:`1px solid ${theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ ${theme.vars.opacity.inputUnderline})`:bottomLineColor}`,\n left:0,\n bottom:0,\n // Doing the other way around crash on IE11 \"''\" https://github.com/cssinjs/jss/issues/242\n content:'\"\\\\00a0\"',\n position:'absolute',\n right:0,\n transition:theme.transitions.create('border-bottom-color',{\n duration:theme.transitions.duration.shorter\n}),\n pointerEvents:'none' // Transparent to the hover style.\n},\n [`&:hover:not(.${FilledInput_filledInputClasses.disabled},.${FilledInput_filledInputClasses.error}):before`]:{\n borderBottom:`1px solid ${(theme.vars || theme).palette.text.primary}`\n},\n [`&.${FilledInput_filledInputClasses.disabled}:before`]:{\n borderBottomStyle:'dotted'\n}\n},ownerState.startAdornment &&{\n paddingLeft:12\n},ownerState.endAdornment &&{\n paddingRight:12\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'25px 12px 8px'\n},ownerState.size==='small' &&{\n paddingTop:21,\n paddingBottom:4\n},ownerState.hiddenLabel &&{\n paddingTop:16,\n paddingBottom:17\n},ownerState.hiddenLabel && ownerState.size==='small' &&{\n paddingTop:8,\n paddingBottom:9\n}));\n});\nconst FilledInputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiFilledInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n paddingTop:25,\n paddingRight:12,\n paddingBottom:8,\n paddingLeft:12\n},!theme.vars &&{\n '&:-webkit-autofill':{\n WebkitBoxShadow:theme.palette.mode==='light' ? null:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:theme.palette.mode==='light' ? null:'#fff',\n caretColor:theme.palette.mode==='light' ? null:'#fff',\n borderTopLeftRadius:'inherit',\n borderTopRightRadius:'inherit'\n}\n},theme.vars &&{\n '&:-webkit-autofill':{\n borderTopLeftRadius:'inherit',\n borderTopRightRadius:'inherit'\n},\n [theme.getColorSchemeSelector('dark')]:{\n '&:-webkit-autofill':{\n WebkitBoxShadow:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:'#fff',\n caretColor:'#fff'\n}\n}\n},ownerState.size==='small' &&{\n paddingTop:21,\n paddingBottom:4\n},ownerState.hiddenLabel &&{\n paddingTop:16,\n paddingBottom:17\n},ownerState.startAdornment &&{\n paddingLeft:0\n},ownerState.endAdornment &&{\n paddingRight:0\n},ownerState.hiddenLabel && ownerState.size==='small' &&{\n paddingTop:8,\n paddingBottom:9\n},ownerState.multiline &&{\n paddingTop:0,\n paddingBottom:0,\n paddingLeft:0,\n paddingRight:0\n}));\nconst FilledInput=external_React_.forwardRef(function FilledInput(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFilledInput'\n});\n const{\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FilledInput_excluded);,props,{\n fullWidth,\n inputComponent,\n multiline,\n type\n});\n const classes=FilledInput_useUtilityClasses(props);\n const filledInputComponentsProps={\n root:{\n ownerState\n},\n input:{\n ownerState\n}\n};\n const componentsProps=(slotProps !=null ? slotProps :componentsPropsProp) ? (0,deepmerge.A)(filledInputComponentsProps,slotProps !=null ? slotProps :componentsPropsProp) :filledInputComponentsProps;\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :FilledInputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :FilledInputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n componentsProps:componentsProps,\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\nFilledInput.muiName='Input';\n const FilledInput_FilledInput=(FilledInput);\n;// ./node_modules/@mui/material/OutlinedInput/NotchedOutline.js\n'use client';\n\n\n\nvar _span;\nconst NotchedOutline_excluded=[\"children\",\"classes\",\"className\",\"label\",\"notched\"];\n\n\n\n\nconst NotchedOutlineRoot=(0,styled.Ay)('fieldset',{\n shouldForwardProp:rootShouldForwardProp.A\n})({\n textAlign:'left',\n position:'absolute',\n bottom:0,\n right:0,\n top:-5,\n left:0,\n margin:0,\n padding:'0 8px',\n pointerEvents:'none',\n borderRadius:'inherit',\n borderStyle:'solid',\n borderWidth:1,\n overflow:'hidden',\n minWidth:'0%'\n});\nconst NotchedOutlineLegend=(0,styled.Ay)('legend',{\n shouldForwardProp:rootShouldForwardProp.A\n})(({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n float:'unset',\n // Fix conflict with bootstrap\n width:'auto',\n // Fix conflict with bootstrap\n overflow:'hidden'\n},!ownerState.withLabel &&{\n padding:0,\n lineHeight:'11px',\n // sync with `height` in `legend` styles\n transition:theme.transitions.create('width',{\n duration:150,\n easing:theme.transitions.easing.easeOut\n})\n},ownerState.withLabel && (0,esm_extends.A)({\n display:'block',\n // Fix conflict with normalize.css and sanitize.css\n padding:0,\n height:11,\n // sync with `lineHeight` in `legend` styles\n fontSize:'0.75em',\n visibility:'hidden',\n maxWidth:.01,\n transition:theme.transitions.create('max-width',{\n duration:50,\n easing:theme.transitions.easing.easeOut\n}),\n whiteSpace:'nowrap',\n '&>span':{\n paddingLeft:5,\n paddingRight:5,\n display:'inline-block',\n opacity:0,\n visibility:'visible'\n}\n},ownerState.notched &&{\n maxWidth:'100%',\n transition:theme.transitions.create('max-width',{\n duration:100,\n easing:theme.transitions.easing.easeOut,\n delay:50\n})\n})));\n\n\nfunction NotchedOutline(props){\n const{\n className,\n label,\n notched\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,NotchedOutline_excluded);\n const withLabel=label !=null && label !=='';,props,{\n notched,\n withLabel\n});\n return (0,jsx_runtime.jsx)(NotchedOutlineRoot,(0,esm_extends.A)({\n \"aria-hidden\":true,\n className:className,\n ownerState:ownerState\n},other,{\n children:(0,jsx_runtime.jsx)(NotchedOutlineLegend,{\n ownerState:ownerState,\n children:withLabel ? (0,jsx_runtime.jsx)(\"span\",{\n children:label\n}) :// notranslate needed while Google Translate will not fix zero-width space issue\n _span || (_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n}))\n})\n}));\n}\n false ? 0 :void 0;\n;// ./node_modules/@mui/material/OutlinedInput/outlinedInputClasses.js\n\n\n\n\nfunction getOutlinedInputUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiOutlinedInput',slot);\n},InputBase_inputBaseClasses,(0,generateUtilityClasses.A)('MuiOutlinedInput',['root','notchedOutline','input']));\n const OutlinedInput_outlinedInputClasses=(outlinedInputClasses);\n;// ./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\n'use client';\n\n\n\nconst OutlinedInput_excluded=[\"components\",\"fullWidth\",\"inputComponent\",\"label\",\"multiline\",\"notched\",\"slots\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst OutlinedInput_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n notchedOutline:['notchedOutline'],\n input:['input']\n};\n const composedClasses=(0,composeClasses.A)(slots,getOutlinedInputUtilityClass,classes);,classes,composedClasses);\n};\nconst OutlinedInputRoot=(0,styled.Ay)(InputBaseRoot,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiOutlinedInput',\n slot:'Root',\n overridesResolver:rootOverridesResolver\n})(({\n theme,\n ownerState\n})=>{\n const borderColor=theme.palette.mode==='light' ? 'rgba(0,0,0,.23)' :'rgba(255,255,255,.23)';\n return (0,esm_extends.A)({\n position:'relative',\n borderRadius:(theme.vars || theme).shape.borderRadius,\n [`&:hover .${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.text.primary\n},\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n [`&:hover .${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ .23)`:borderColor\n}\n},\n [`&.${OutlinedInput_outlinedInputClasses.focused}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette[ownerState.color].main,\n borderWidth:2\n},\n [`&.${OutlinedInput_outlinedInputClasses.error}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.error.main\n},\n [`&.${OutlinedInput_outlinedInputClasses.disabled}.${OutlinedInput_outlinedInputClasses.notchedOutline}`]:{\n borderColor:(theme.vars || theme).palette.action.disabled\n}\n},ownerState.startAdornment &&{\n paddingLeft:14\n},ownerState.endAdornment &&{\n paddingRight:14\n},ownerState.multiline && (0,esm_extends.A)({\n padding:'16.5px 14px'\n},ownerState.size==='small' &&{\n padding:'8.5px 14px'\n}));\n});\nconst OutlinedInput_NotchedOutlineRoot=(0,styled.Ay)(NotchedOutline,{\n name:'MuiOutlinedInput',\n slot:'NotchedOutline',\n overridesResolver:(props,styles)=>styles.notchedOutline\n})(({\n theme\n})=>{\n const borderColor=theme.palette.mode==='light' ? 'rgba(0,0,0,.23)' :'rgba(255,255,255,.23)';\n return{\n borderColor:theme.vars ? `rgba(${theme.vars.palette.common.onBackgroundChannel}/ .23)`:borderColor\n};\n});\nconst OutlinedInputInput=(0,styled.Ay)(InputBaseComponent,{\n name:'MuiOutlinedInput',\n slot:'Input',\n overridesResolver:inputOverridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n padding:'16.5px 14px'\n},!theme.vars &&{\n '&:-webkit-autofill':{\n WebkitBoxShadow:theme.palette.mode==='light' ? null:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:theme.palette.mode==='light' ? null:'#fff',\n caretColor:theme.palette.mode==='light' ? null:'#fff',\n borderRadius:'inherit'\n}\n},theme.vars &&{\n '&:-webkit-autofill':{\n borderRadius:'inherit'\n},\n [theme.getColorSchemeSelector('dark')]:{\n '&:-webkit-autofill':{\n WebkitBoxShadow:'0 0 0 100px #266798 inset',\n WebkitTextFillColor:'#fff',\n caretColor:'#fff'\n}\n}\n},ownerState.size==='small' &&{\n padding:'8.5px 14px'\n},ownerState.multiline &&{\n padding:0\n},ownerState.startAdornment &&{\n paddingLeft:0\n},ownerState.endAdornment &&{\n paddingRight:0\n}));\nconst OutlinedInput=external_React_.forwardRef(function OutlinedInput(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$input,_React$Fragment;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiOutlinedInput'\n});\n const{\n components={},\n type='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,OutlinedInput_excluded);\n const classes=OutlinedInput_useUtilityClasses(props);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','disabled','error','focused','hiddenLabel','size','required']\n});,props,{\n color:fcs.color || 'primary',\n disabled:fcs.disabled,\n error:fcs.error,\n focused:fcs.focused,\n formControl:muiFormControl,\n fullWidth,\n hiddenLabel:fcs.hiddenLabel,\n multiline,\n size:fcs.size,\n type\n});\n const RootSlot=(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :OutlinedInputRoot;\n const InputSlot=(_ref2=(_slots$input=slots.input) !=null ? _slots$input :components.Input) !=null ? _ref2 :OutlinedInputInput;\n return (0,jsx_runtime.jsx)(InputBase_InputBase,(0,esm_extends.A)({\n slots:{\n root:RootSlot,\n input:InputSlot\n},\n renderSuffix:state=>(0,jsx_runtime.jsx)(OutlinedInput_NotchedOutlineRoot,{\n ownerState:ownerState,\n className:classes.notchedOutline,\n label:label !=null && label !=='' && fcs.required ? _React$Fragment || (_React$Fragment=(0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[label,\"\\u2009\",'*']\n})):label,\n notched:typeof notched !=='undefined' ? notched:Boolean(state.startAdornment || state.filled || state.focused)\n}),\n fullWidth:fullWidth,\n inputComponent:inputComponent,\n multiline:multiline,\n ref:ref,\n type:type\n},other,{\n classes:(0,esm_extends.A)({},classes,{\n notchedOutline:null\n})\n}));\n});\n false ? 0 :void 0;\nOutlinedInput.muiName='Input';\n const OutlinedInput_OutlinedInput=(OutlinedInput);\n;// ./node_modules/@mui/material/FormLabel/formLabelClasses.js\n\n\nfunction getFormLabelUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormLabel',slot);\n}\nconst formLabelClasses=(0,generateUtilityClasses.A)('MuiFormLabel',['root','colorSecondary','focused','disabled','error','filled','required','asterisk']);\n const FormLabel_formLabelClasses=(formLabelClasses);\n;// ./node_modules/@mui/material/FormLabel/FormLabel.js\n'use client';\n\n\n\nconst FormLabel_excluded=[\"children\",\"className\",\"color\",\"component\",\"disabled\",\"error\",\"filled\",\"focused\",\"required\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FormLabel_useUtilityClasses=ownerState=>{\n const{\n classes,\n color,\n focused,\n disabled,\n error,\n filled,\n required\n}=ownerState;\n const slots={\n root:['root',`color${(0,capitalize.A)(color)}`,disabled && 'disabled',error && 'error',filled && 'filled',focused && 'focused',required && 'required'],\n asterisk:['asterisk',error && 'error']\n};\n return (0,composeClasses.A)(slots,getFormLabelUtilityClasses,classes);\n};\nconst FormLabelRoot=(0,styled.Ay)('label',{\n name:'MuiFormLabel',\n slot:'Root',\n overridesResolver:({\n ownerState\n},styles)=>{\n return (0,esm_extends.A)({},styles.root,ownerState.color==='secondary' && styles.colorSecondary,ownerState.filled && styles.filled);\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n color:(theme.vars || theme).palette.text.secondary\n},theme.typography.body1,{\n lineHeight:'1.4375em',\n padding:0,\n position:'relative',\n [`&.${FormLabel_formLabelClasses.focused}`]:{\n color:(theme.vars || theme).palette[ownerState.color].main\n},\n [`&.${FormLabel_formLabelClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled\n},\n [`&.${FormLabel_formLabelClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n}));\nconst AsteriskComponent=(0,styled.Ay)('span',{\n name:'MuiFormLabel',\n slot:'Asterisk',\n overridesResolver:(props,styles)=>styles.asterisk\n})(({\n theme\n})=>({\n [`&.${FormLabel_formLabelClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n}));\nconst FormLabel=external_React_.forwardRef(function FormLabel(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormLabel'\n});\n const{\n children,\n className,\n component='label'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormLabel_excluded);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['color','required','focused','disabled','error','filled']\n});,props,{\n color:fcs.color || 'primary',\n component,\n disabled:fcs.disabled,\n error:fcs.error,\n filled:fcs.filled,\n focused:fcs.focused,\n required:fcs.required\n});\n const classes=FormLabel_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(FormLabelRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:[children,fcs.required && (0,jsx_runtime.jsxs)(AsteriskComponent,{\n ownerState:ownerState,\n \"aria-hidden\":true,\n className:classes.asterisk,\n children:[\"\\u2009\",'*']\n})]\n}));\n});\n false ? 0 :void 0;\n const FormLabel_FormLabel=(FormLabel);\n;// ./node_modules/@mui/material/InputLabel/inputLabelClasses.js\n\n\nfunction getInputLabelUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputLabel',slot);\n}\nconst inputLabelClasses=(0,generateUtilityClasses.A)('MuiInputLabel',['root','focused','disabled','error','required','asterisk','formControl','sizeSmall','shrink','animated','standard','filled','outlined']);\n const InputLabel_inputLabelClasses=((null && (inputLabelClasses)));\n;// ./node_modules/@mui/material/InputLabel/InputLabel.js\n'use client';\n\n\n\nconst InputLabel_excluded=[\"disableAnimation\",\"margin\",\"shrink\",\"variant\",\"className\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst InputLabel_useUtilityClasses=ownerState=>{\n const{\n classes,\n formControl,\n size,\n shrink,\n disableAnimation,\n variant,\n required\n}=ownerState;\n const slots={\n root:['root',formControl && 'formControl',!disableAnimation && 'animated',shrink && 'shrink',size && size !=='normal' && `size${(0,capitalize.A)(size)}`,variant],\n asterisk:[required && 'asterisk']\n};\n const composedClasses=(0,composeClasses.A)(slots,getInputLabelUtilityClasses,classes);,classes,composedClasses);\n};\nconst InputLabelRoot=(0,styled.Ay)(FormLabel_FormLabel,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiInputLabel',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [{\n [`& .${FormLabel_formLabelClasses.asterisk}`]:styles.asterisk\n},styles.root,ownerState.formControl && styles.formControl,ownerState.size==='small' && styles.sizeSmall,ownerState.shrink && styles.shrink,!ownerState.disableAnimation && styles.animated,ownerState.focused && styles.focused,styles[ownerState.variant]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n display:'block',\n transformOrigin:'top left',\n whiteSpace:'nowrap',\n overflow:'hidden',\n textOverflow:'ellipsis',\n maxWidth:'100%'\n},ownerState.formControl &&{\n position:'absolute',\n left:0,\n top:0,\n // slight alteration to spec spacing to match visual spec result\n transform:'translate(0,20px) scale(1)'\n},ownerState.size==='small' &&{\n // Compensation for the `Input.inputSizeSmall` style.\n transform:'translate(0,17px) scale(1)'\n},ownerState.shrink &&{\n transform:'translate(0,-1.5px) scale(.75)',\n transformOrigin:'top left',\n maxWidth:'133%'\n},!ownerState.disableAnimation &&{\n transition:theme.transitions.create(['color','transform','max-width'],{\n duration:theme.transitions.duration.shorter,\n easing:theme.transitions.easing.easeOut\n})\n},ownerState.variant==='filled' && (0,esm_extends.A)({\n // Chrome's autofill feature gives the input field a yellow background.\n // Since the input field is behind the label in the HTML tree,\n // the input field is drawn last and hides the label with an opaque background color.\n // zIndex:1 will raise the label above opaque background-colors of input.\n zIndex:1,\n pointerEvents:'none',\n transform:'translate(12px,16px) scale(1)',\n maxWidth:'calc(100% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(12px,13px) scale(1)'\n},ownerState.shrink && (0,esm_extends.A)({\n userSelect:'none',\n pointerEvents:'auto',\n transform:'translate(12px,7px) scale(.75)',\n maxWidth:'calc(133% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(12px,4px) scale(.75)'\n})),ownerState.variant==='outlined' && (0,esm_extends.A)({\n // see comment above on filled.zIndex\n zIndex:1,\n pointerEvents:'none',\n transform:'translate(14px,16px) scale(1)',\n maxWidth:'calc(100% - 24px)'\n},ownerState.size==='small' &&{\n transform:'translate(14px,9px) scale(1)'\n},ownerState.shrink &&{\n userSelect:'none',\n pointerEvents:'auto',\n // Theoretically,we should have (8+5)*2/0.75=34px\n // but it feels a better when it bleeds a bit on the left,so 32px.\n maxWidth:'calc(133% - 32px)',\n transform:'translate(14px,-9px) scale(.75)'\n})));\nconst InputLabel=external_React_.forwardRef(function InputLabel(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiInputLabel',\n props:inProps\n});\n const{\n disableAnimation=false,\n shrink:shrinkProp,\n className\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputLabel_excluded);\n const muiFormControl=useFormControl();\n let shrink=shrinkProp;\n if (typeof shrink==='undefined' && muiFormControl){\n shrink=muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n}\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['size','variant','required','focused']\n});,props,{\n disableAnimation,\n formControl:muiFormControl,\n shrink,\n size:fcs.size,\n variant:fcs.variant,\n required:fcs.required,\n focused:fcs.focused\n});\n const classes=InputLabel_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(InputLabelRoot,(0,esm_extends.A)({\n \"data-shrink\":shrink,\n ownerState:ownerState,\n ref:ref,\n className:(0,clsx.A)(classes.root,className)\n},other,{\n classes:classes\n}));\n});\n false ? 0 :void 0;\n const InputLabel_InputLabel=(InputLabel);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/isMuiElement.js+1 modules\nvar isMuiElement=__webpack_require__(8593);\n;// ./node_modules/@mui/material/FormControl/formControlClasses.js\n\n\nfunction getFormControlUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormControl',slot);\n}\nconst formControlClasses=(0,generateUtilityClasses.A)('MuiFormControl',['root','marginNone','marginNormal','marginDense','fullWidth','disabled']);\n const FormControl_formControlClasses=((null && (formControlClasses)));\n;// ./node_modules/@mui/material/FormControl/FormControl.js\n'use client';\n\n\n\nconst FormControl_excluded=[\"children\",\"className\",\"color\",\"component\",\"disabled\",\"error\",\"focused\",\"fullWidth\",\"hiddenLabel\",\"margin\",\"required\",\"size\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst FormControl_useUtilityClasses=ownerState=>{\n const{\n classes,\n margin,\n fullWidth\n}=ownerState;\n const slots={\n root:['root',margin !=='none' && `margin${(0,capitalize.A)(margin)}`,fullWidth && 'fullWidth']\n};\n return (0,composeClasses.A)(slots,getFormControlUtilityClasses,classes);\n};\nconst FormControlRoot=(0,styled.Ay)('div',{\n name:'MuiFormControl',\n slot:'Root',\n overridesResolver:({\n ownerState\n},styles)=>{\n return (0,esm_extends.A)({},styles.root,styles[`margin${(0,capitalize.A)(ownerState.margin)}`],ownerState.fullWidth && styles.fullWidth);\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inline-flex',\n flexDirection:'column',\n position:'relative',\n // Reset fieldset default style.\n minWidth:0,\n padding:0,\n margin:0,\n border:0,\n verticalAlign:'top'\n},ownerState.margin==='normal' &&{\n marginTop:16,\n marginBottom:8\n},ownerState.margin==='dense' &&{\n marginTop:8,\n marginBottom:4\n},ownerState.fullWidth &&{\n width:'100%'\n}));\n\n\nconst FormControl=external_React_.forwardRef(function FormControl(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormControl'\n});\n const{\n children,\n className,\n color='primary',\n component='div',\n disabled=false,\n error=false,\n focused:visuallyFocused,\n fullWidth=false,\n hiddenLabel=false,\n margin='none',\n required=false,\n size='medium',\n variant='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormControl_excluded);,props,{\n color,\n component,\n disabled,\n error,\n fullWidth,\n hiddenLabel,\n margin,\n required,\n size,\n variant\n});\n const classes=FormControl_useUtilityClasses(ownerState);\n const [adornedStart,setAdornedStart]=external_React_.useState(()=>{\n // We need to iterate through the children and find the Input in order\n // to fully support server-side rendering.\n let initialAdornedStart=false;\n if (children){\n external_React_.Children.forEach(children,child=>{\n if (!(0,isMuiElement.A)(child,['Input','Select'])){\n return;\n}\n const input=(0,isMuiElement.A)(child,['Select']) ? child.props.input :child;\n if (input && isAdornedStart(input.props)){\n initialAdornedStart=true;\n}\n});\n}\n return initialAdornedStart;\n});\n const [filled,setFilled]=external_React_.useState(()=>{\n // We need to iterate through the children and find the Input in order\n // to fully support server-side rendering.\n let initialFilled=false;\n if (children){\n external_React_.Children.forEach(children,child=>{\n if (!(0,isMuiElement.A)(child,['Input','Select'])){\n return;\n}\n if (isFilled(child.props,true) || isFilled(child.props.inputProps,true)){\n initialFilled=true;\n}\n});\n}\n return initialFilled;\n});\n const [focusedState,setFocused]=external_React_.useState(false);\n if (disabled && focusedState){\n setFocused(false);\n}\n const focused=visuallyFocused !==undefined && !disabled ? visuallyFocused :focusedState;\n let registerEffect;\n const childContext=external_React_.useMemo(()=>{\n return{\n adornedStart,\n setAdornedStart,\n color,\n disabled,\n error,\n filled,\n focused,\n fullWidth,\n hiddenLabel,\n size,\n onBlur:()=>{\n setFocused(false);\n},\n onEmpty:()=>{\n setFilled(false);\n},\n onFilled:()=>{\n setFilled(true);\n},\n onFocus:()=>{\n setFocused(true);\n},\n registerEffect,\n required,\n variant\n};\n},[adornedStart,color,disabled,error,filled,focused,fullWidth,hiddenLabel,registerEffect,required,size,variant]);\n return (0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:childContext,\n children:(0,jsx_runtime.jsx)(FormControlRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children\n}))\n});\n});\n false ? 0 :void 0;\n const FormControl_FormControl=(FormControl);\n;// ./node_modules/@mui/material/FormHelperText/formHelperTextClasses.js\n\n\nfunction getFormHelperTextUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiFormHelperText',slot);\n}\nconst formHelperTextClasses=(0,generateUtilityClasses.A)('MuiFormHelperText',['root','error','disabled','sizeSmall','sizeMedium','contained','focused','filled','required']);\n const FormHelperText_formHelperTextClasses=(formHelperTextClasses);\n;// ./node_modules/@mui/material/FormHelperText/FormHelperText.js\n'use client';\n\n\n\nvar FormHelperText_span;\nconst FormHelperText_excluded=[\"children\",\"className\",\"component\",\"disabled\",\"error\",\"filled\",\"focused\",\"margin\",\"required\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\nconst FormHelperText_useUtilityClasses=ownerState=>{\n const{\n classes,\n contained,\n size,\n disabled,\n error,\n filled,\n focused,\n required\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',error && 'error',size && `size${(0,capitalize.A)(size)}`,contained && 'contained',focused && 'focused',filled && 'filled',required && 'required']\n};\n return (0,composeClasses.A)(slots,getFormHelperTextUtilityClasses,classes);\n};\nconst FormHelperTextRoot=(0,styled.Ay)('p',{\n name:'MuiFormHelperText',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.size && styles[`size${(0,capitalize.A)(ownerState.size)}`],ownerState.contained && styles.contained,ownerState.filled && styles.filled];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n color:(theme.vars || theme).palette.text.secondary\n},theme.typography.caption,{\n textAlign:'left',\n marginTop:3,\n marginRight:0,\n marginBottom:0,\n marginLeft:0,\n [`&.${FormHelperText_formHelperTextClasses.disabled}`]:{\n color:(theme.vars || theme).palette.text.disabled\n},\n [`&.${FormHelperText_formHelperTextClasses.error}`]:{\n color:(theme.vars || theme).palette.error.main\n}\n},ownerState.size==='small' &&{\n marginTop:4\n},ownerState.contained &&{\n marginLeft:14,\n marginRight:14\n}));\nconst FormHelperText=external_React_.forwardRef(function FormHelperText(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiFormHelperText'\n});\n const{\n children,\n className,\n component='p'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,FormHelperText_excluded);\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['variant','size','disabled','error','filled','focused','required']\n});,props,{\n component,\n contained:fcs.variant==='filled' || fcs.variant==='outlined',\n variant:fcs.variant,\n size:fcs.size,\n disabled:fcs.disabled,\n error:fcs.error,\n filled:fcs.filled,\n focused:fcs.focused,\n required:fcs.required\n});\n const classes=FormHelperText_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(FormHelperTextRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children===' ' ? // notranslate needed while Google Translate will not fix zero-width space issue\n FormHelperText_span || (FormHelperText_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n})):children\n}));\n});\n false ? 0 :void 0;\n const FormHelperText_FormHelperText=(FormHelperText);\n;// ./node_modules/@mui/utils/esm/getReactElementRef/getReactElementRef.js\n\n\n\nfunction getReactElementRef(element){\n // 'ref' is passed as prop in React 19,whereas 'ref' is directly attached to children in older versions\n if (parseInt(external_React_.version,10)>=19){\n var _element$props;\n return (element==null || (_element$props=element.props)==null ? void 0:_element$props.ref) || null;\n}\n // @ts-expect-error element.ref is not included in the ReactElement type\n // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/70189\n return (element==null ? void 0:element.ref) || null;\n}\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerDocument.js\nvar ownerDocument=__webpack_require__(6248);\n;// ./node_modules/@mui/system/esm/RtlProvider/index.js\n\n\nconst RtlProvider_excluded=(null && ([\"value\"]));\n\n\n\nconst RtlContext=external_React_.createContext();\nfunction RtlProvider(_ref){\n let{\n value\n}=_ref,\n props=_objectWithoutPropertiesLoose(_ref,RtlProvider_excluded);\n return _jsx(RtlContext.Provider,_extends({\n value:value !=null ? value:true\n},props));\n}\n false ? 0 :void 0;\nconst useRtl=()=>{\n const value=external_React_.useContext(RtlContext);\n return value !=null ? value:false;\n};\n const esm_RtlProvider=((null && (RtlProvider)));\n;// ./node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js\n\n\n\n\n\n\nfunction appendOwnerState(elementType,otherProps,ownerState){\n if (elementType===undefined || isHostComponent_isHostComponent(elementType)){\n return otherProps;\n},otherProps,{\n ownerState:(0,esm_extends.A)({},otherProps.ownerState,ownerState)\n});\n}\n const appendOwnerState_appendOwnerState=(appendOwnerState);\n;// ./node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js\n\nfunction extractEventHandlers(object,excludeKeys=[]){\n if (object===undefined){\n return{};\n};\n Object.keys(object).filter(prop=>prop.match(/^on[A-Z]/) && typeof object[prop]==='function' && !excludeKeys.includes(prop)).forEach(prop=>{\n result[prop]=object[prop];\n});\n return result;\n}\n const extractEventHandlers_extractEventHandlers=(extractEventHandlers);\n;// ./node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js\n\nfunction omitEventHandlers(object){\n if (object===undefined){\n return{};\n};\n Object.keys(object).filter(prop=>!(prop.match(/^on[A-Z]/) && typeof object[prop]==='function')).forEach(prop=>{\n result[prop]=object[prop];\n});\n return result;\n}\n const omitEventHandlers_omitEventHandlers=(omitEventHandlers);\n;// ./node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js\n\n\n\n\n\nfunction mergeSlotProps(parameters){\n const{\n getSlotProps,\n additionalProps,\n externalSlotProps,\n externalForwardedProps,\n className\n}=parameters;\n if (!getSlotProps){\n // The simpler case - getSlotProps is not defined,so no internal event handlers are defined,\n // so we can simply merge all the props without having to worry about extracting event handlers.\n const joinedClasses=(0,clsx.A)(additionalProps==null ? void 0 :additionalProps.className,className,externalForwardedProps==null ? void 0 :externalForwardedProps.className,externalSlotProps==null ? void 0 :externalSlotProps.className);,additionalProps==null ? void 0 :additionalProps.style,externalForwardedProps==null ? void 0 :externalForwardedProps.style,externalSlotProps==null ? void 0 :externalSlotProps.style);,additionalProps,externalForwardedProps,externalSlotProps);\n if (joinedClasses.length>0){\n props.className=joinedClasses;\n}\n if (Object.keys(mergedStyle).length>0){\n props.style=mergedStyle;\n}\n return{\n props,\n internalRef:undefined\n};\n},externalForwardedProps,externalSlotProps));\n const componentsPropsWithoutEventHandlers=omitEventHandlers_omitEventHandlers(externalSlotProps);\n const otherPropsWithoutEventHandlers=omitEventHandlers_omitEventHandlers(externalForwardedProps);\n const internalSlotProps=getSlotProps(eventHandlers);\n\n // The order of classes is important here.\n // Emotion (that we use in libraries consuming Base UI) depends on this order\n // to properly override style. It requires the most important classes to be last\n // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n const joinedClasses=(0,clsx.A)(internalSlotProps==null ? void 0 :internalSlotProps.className,additionalProps==null ? void 0 :additionalProps.className,className,externalForwardedProps==null ? void 0 :externalForwardedProps.className,externalSlotProps==null ? void 0 :externalSlotProps.className);,internalSlotProps==null ? void 0 :internalSlotProps.style,additionalProps==null ? void 0 :additionalProps.style,externalForwardedProps==null ? void 0 :externalForwardedProps.style,externalSlotProps==null ? void 0 :externalSlotProps.style);,internalSlotProps,additionalProps,otherPropsWithoutEventHandlers,componentsPropsWithoutEventHandlers);\n if (joinedClasses.length>0){\n props.className=joinedClasses;\n}\n if (Object.keys(mergedStyle).length>0){\n props.style=mergedStyle;\n}\n return{\n props,\n internalRef:internalSlotProps.ref\n};\n}\n const mergeSlotProps_mergeSlotProps=(mergeSlotProps);\n;// ./node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js\n\nfunction resolveComponentProps(componentProps,ownerState,slotState){\n if (typeof componentProps==='function'){\n return componentProps(ownerState,slotState);\n}\n return componentProps;\n}\n const resolveComponentProps_resolveComponentProps=(resolveComponentProps);\n;// ./node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js\n'use client';\n\n\n\nconst useSlotProps_excluded=[\"elementType\",\"externalSlotProps\",\"ownerState\",\"skipResolvingSlotProps\"];\n\n\n\n\n\nfunction useSlotProps(parameters){\n var _parameters$additiona;\n const{\n elementType,\n externalSlotProps,\n ownerState,\n skipResolvingSlotProps=false\n}=parameters,\n rest=(0,objectWithoutPropertiesLoose.A)(parameters,useSlotProps_excluded);:resolveComponentProps_resolveComponentProps(externalSlotProps,ownerState);\n const{\n props:mergedProps,\n internalRef\n},rest,{\n externalSlotProps:resolvedComponentsProps\n}));\n const ref=(0,useForkRef.A)(internalRef,resolvedComponentsProps==null ? void 0 :resolvedComponentsProps.ref,(_parameters$additiona=parameters.additionalProps)==null ? void 0 :_parameters$additiona.ref);,mergedProps,{\n ref\n}),ownerState);\n return props;\n}\n const useSlotProps_useSlotProps=(useSlotProps);\n;// ./node_modules/@mui/material/List/ListContext.js\n'use client';);\n const List_ListContext=(ListContext);\n;// ./node_modules/@mui/material/List/listClasses.js\n\n\nfunction getListUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiList',slot);\n}\nconst listClasses=(0,generateUtilityClasses.A)('MuiList',['root','padding','dense','subheader']);\n const List_listClasses=((null && (listClasses)));\n;// ./node_modules/@mui/material/List/List.js\n'use client';\n\n\n\nconst List_excluded=[\"children\",\"className\",\"component\",\"dense\",\"disablePadding\",\"subheader\"];\n\n\n\n\n\n\n\n\n\n\nconst List_useUtilityClasses=ownerState=>{\n const{\n classes,\n disablePadding,\n dense,\n subheader\n}=ownerState;\n const slots={\n root:['root',!disablePadding && 'padding',dense && 'dense',subheader && 'subheader']\n};\n return (0,composeClasses.A)(slots,getListUtilityClass,classes);\n};\nconst ListRoot=(0,styled.Ay)('ul',{\n name:'MuiList',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,!ownerState.disablePadding && styles.padding,ownerState.dense && styles.dense,ownerState.subheader && styles.subheader];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n listStyle:'none',\n margin:0,\n padding:0,\n position:'relative'\n},!ownerState.disablePadding &&{\n paddingTop:8,\n paddingBottom:8\n},ownerState.subheader &&{\n paddingTop:0\n}));\nconst List=external_React_.forwardRef(function List(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiList'\n});\n const{\n children,\n className,\n component='ul',\n dense=false,\n disablePadding=false,\n subheader\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,List_excluded);\n const context=external_React_.useMemo(()=>({\n dense\n}),[dense]);,props,{\n component,\n dense,\n disablePadding\n});\n const classes=List_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(List_ListContext.Provider,{\n value:context,\n children:(0,jsx_runtime.jsxs)(ListRoot,(0,esm_extends.A)({\n as:component,\n className:(0,clsx.A)(classes.root,className),\n ref:ref,\n ownerState:ownerState\n},other,{\n children:[subheader,children]\n}))\n});\n});\n false ? 0 :void 0;\n const List_List=(List);\n;// ./node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js\n// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nfunction getScrollbarSize(doc){\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth=doc.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n}\n;// ./node_modules/@mui/material/utils/getScrollbarSize.js\n\n const utils_getScrollbarSize=(getScrollbarSize);\n;// ./node_modules/@mui/material/MenuList/MenuList.js\n'use client';\n\n\n\nconst MenuList_excluded=[\"actions\",\"autoFocus\",\"autoFocusItem\",\"children\",\"className\",\"disabledItemsFocusable\",\"disableListWrap\",\"onKeyDown\",\"variant\"];\n\n\n\n\n\n\n\n\n\nfunction nextItem(list,item,disableListWrap){\n if (list===item){\n return list.firstChild;\n}\n if (item && item.nextElementSibling){\n return item.nextElementSibling;\n}\n return disableListWrap ? null:list.firstChild;\n}\nfunction previousItem(list,item,disableListWrap){\n if (list===item){\n return disableListWrap ? list.firstChild:list.lastChild;\n}\n if (item && item.previousElementSibling){\n return item.previousElementSibling;\n}\n return disableListWrap ? null:list.lastChild;\n}\nfunction textCriteriaMatches(nextFocus,textCriteria){\n if (textCriteria===undefined){\n return true;\n}\n let text=nextFocus.innerText;\n if (text===undefined){\n // jsdom doesn't support innerText\n text=nextFocus.textContent;\n}\n text=text.trim().toLowerCase();\n if (text.length===0){\n return false;\n}\n if (textCriteria.repeating){\n return text[0]===textCriteria.keys[0];\n}\n return text.indexOf(textCriteria.keys.join(''))===0;\n}\nfunction moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,traversalFunction,textCriteria){\n let wrappedOnce=false;\n let nextFocus=traversalFunction(list,currentFocus,currentFocus ? disableListWrap :false);\n while (nextFocus){\n // Prevent infinite loop.\n if (nextFocus===list.firstChild){\n if (wrappedOnce){\n return false;\n}\n wrappedOnce=true;\n}\n\n // Same logic as useAutocomplete.js\n const nextFocusDisabled=disabledItemsFocusable ? false :nextFocus.disabled || nextFocus.getAttribute('aria-disabled')==='true';\n if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus,textCriteria) || nextFocusDisabled){\n // Move to the next element.\n nextFocus=traversalFunction(list,nextFocus,disableListWrap);\n}else{\n nextFocus.focus();\n return true;\n}\n}\n return false;\n}\n\n\nconst MenuList=external_React_.forwardRef(function MenuList(props,ref){\n const{\n // private\n // eslint-disable-next-line react/prop-types\n actions,\n autoFocus=false,\n autoFocusItem=false,\n children,\n className,\n disabledItemsFocusable=false,\n disableListWrap=false,\n onKeyDown,\n variant='selectedMenu'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,MenuList_excluded);\n const listRef=external_React_.useRef(null);\n const textCriteriaRef=external_React_.useRef({\n keys:[],\n repeating:true,\n previousKeyMatched:true,\n lastTime:null\n});\n (0,utils_useEnhancedEffect.A)(()=>{\n if (autoFocus){\n listRef.current.focus();\n}\n},[autoFocus]);\n external_React_.useImperativeHandle(actions,()=>({\n adjustStyleForScrollbar:(containerElement,{\n direction\n})=>{\n // Let's ignore that piece of logic if users are already overriding the width\n // of the menu.\n const noExplicitWidth=!listRef.current.style.width;\n if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth){\n const scrollbarSize=`${utils_getScrollbarSize((0,ownerDocument.A)(containerElement))}px`;\n listRef.current.style[direction==='rtl' ? 'paddingLeft':'paddingRight']=scrollbarSize;\n listRef.current.style.width=`calc(100% + ${scrollbarSiz)})`;\n}\n return listRef.current;\n}\n}),[]);\n const handleKeyDown=event=>{\n const list=listRef.current;\n const key=event.key;\n \n const currentFocus=(0,ownerDocument.A)(list).activeElement;\n if (key==='ArrowDown'){\n // Prevent scroll of the page\n event.preventDefault();\n moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,nextItem);\n}else if (key==='ArrowUp'){\n event.preventDefault();\n moveFocus(list,currentFocus,disableListWrap,disabledItemsFocusable,previousItem);\n}else if (key==='Home'){\n event.preventDefault();\n moveFocus(list,null,disableListWrap,disabledItemsFocusable,nextItem);\n}else if (key==='End'){\n event.preventDefault();\n moveFocus(list,null,disableListWrap,disabledItemsFocusable,previousItem);\n}else if (key.length===1){\n const criteria=textCriteriaRef.current;\n const lowerKey=key.toLowerCase();\n const currTime=performance.now();\n if (criteria.keys.length>0){\n // Reset\n if (currTime - criteria.lastTime>500){\n criteria.keys=[];\n criteria.repeating=true;\n criteria.previousKeyMatched=true;\n}else if (criteria.repeating && lowerKey !==criteria.keys[0]){\n criteria.repeating=false;\n}\n}\n criteria.lastTime=currTime;\n criteria.keys.push(lowerKey);\n const keepFocusOnCurrent=currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus,criteria);\n if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list,currentFocus,false,disabledItemsFocusable,nextItem,criteria))){\n event.preventDefault();\n}else{\n criteria.previousKeyMatched=false;\n}\n}\n if (onKeyDown){\n onKeyDown(event);\n}\n};\n const handleRef=(0,utils_useForkRef.A)(listRef,ref);\n\n \n let activeItemIndex=-1;\n // since we inject focus related props into children we have to do a lookahead\n // to check if there is a `selected` item. We're looking for the last `selected`\n // item and use the first valid item as a fallback\n external_React_.Children.forEach(children,(child,index)=>{\n if (! external_React_.isValidElement(child)){\n if (activeItemIndex===index){\n activeItemIndex+=1;\n if (activeItemIndex>=children.length){\n // there are no focusable items within the list.\n activeItemIndex=-1;\n}\n}\n return;\n}\n if (!child.props.disabled){\n if (variant==='selectedMenu' && child.props.selected){\n activeItemIndex=index;\n}else if (activeItemIndex===-1){\n activeItemIndex=index;\n}\n}\n if (activeItemIndex===index && (child.props.disabled || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight)){\n activeItemIndex+=1;\n if (activeItemIndex>=children.length){\n // there are no focusable items within the list.\n activeItemIndex=-1;\n}\n}\n});\n const items=external_React_.Children.map(children,(child,index)=>{\n if (index===activeItemIndex){\n const newChildProps={};\n if (autoFocusItem){\n newChildProps.autoFocus=true;\n}\n if (child.props.tabIndex===undefined && variant==='selectedMenu'){\n newChildProps.tabIndex=0;\n}\n return external_React_.cloneElement(child,newChildProps);\n}\n return child;\n});\n return (0,jsx_runtime.jsx)(List_List,(0,esm_extends.A)({\n role:\"menu\",\n ref:handleRef,\n className:className,\n onKeyDown:handleKeyDown,\n tabIndex:autoFocus ? 0:-1\n},other,{\n children:items\n}));\n});\n false ? 0 :void 0;\n const MenuList_MenuList=(MenuList);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/debounce.js\nvar utils_debounce=__webpack_require__(1935);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerWindow.js\nvar utils_ownerWindow=__webpack_require__(3749);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/useTimeout/useTimeout.js+2 modules\nvar useTimeout=__webpack_require__(3068);\n;// ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nfunction _setPrototypeOf(t,e){\n return _setPrototypeOf=Object.setPrototypeOf ? Object.setPrototypeOf.bind() :function (t,e){\n return t.__proto__=e,t;\n},_setPrototypeOf(t,e);\n}\n\n;// ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n\nfunction _inheritsLoose(t,o){\n t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o);\n}\n\n;// ./node_modules/react-transition-group/esm/config.js\n const config=({\n disabled:false\n});\n;// ./node_modules/react-transition-group/esm/TransitionGroupContext.js\n\n const TransitionGroupContext=(external_React_default().createContext(null));\n;// ./node_modules/react-transition-group/esm/utils/reflow.js\nvar forceReflow=function forceReflow(node){\n return node.scrollTop;\n};\n;// ./node_modules/react-transition-group/esm/Transition.js\n\n\n\n\n\n\n\n\n\nvar UNMOUNTED='unmounted';\nvar EXITED='exited';\nvar ENTERING='entering';\nvar ENTERED='entered';\nvar EXITING='exiting';\n\n\nvar Transition=function (_React$Component){\n _inheritsLoose(Transition,_React$Component);\n\n function Transition(props,context){\n var _this;\n\n _this=_React$Component.call(this,props,context) || this;\n var parentGroup=context;// In the context of a TransitionGroup all enters are really appears\n\n var appear=parentGroup && !parentGroup.isMounting ? props.enter :props.appear;\n var initialStatus;\n _this.appearStatus=null;\n\n if (props.in){\n if (appear){\n initialStatus=EXITED;\n _this.appearStatus=ENTERING;\n}else{\n initialStatus=ENTERED;\n}\n}else{\n if (props.unmountOnExit || props.mountOnEnter){\n initialStatus=UNMOUNTED;\n}else{\n initialStatus=EXITED;\n}\n}\n\n _this.state={\n status:initialStatus\n};\n _this.nextCallback=null;\n return _this;\n}\n\n Transition.getDerivedStateFromProps=function getDerivedStateFromProps(_ref,prevState){\n var nextIn=_ref.in;\n\n if (nextIn && prevState.status===UNMOUNTED){\n return{\n status:EXITED\n};\n}\n\n return null;\n}// getSnapshotBeforeUpdate(prevProps){\n // let nextStatus=null\n // if (prevProps !==this.props){\n // const{status}=this.state\n // if (this.props.in){\n // if (status !==ENTERING && status !==ENTERED){\n // nextStatus=ENTERING\n //}\n //}else{\n // if (status===ENTERING || status===ENTERED){\n // nextStatus=EXITING\n //}\n //}\n //}\n // return{nextStatus}\n //}\n;\n\n var _proto=Transition.prototype;\n\n _proto.componentDidMount=function componentDidMount(){\n this.updateStatus(true,this.appearStatus);\n};\n\n _proto.componentDidUpdate=function componentDidUpdate(prevProps){\n var nextStatus=null;\n\n if (prevProps !==this.props){\n var status=this.state.status;\n\n if (this.props.in){\n if (status !==ENTERING && status !==ENTERED){\n nextStatus=ENTERING;\n}\n}else{\n if (status===ENTERING || status===ENTERED){\n nextStatus=EXITING;\n}\n}\n}\n\n this.updateStatus(false,nextStatus);\n};\n\n _proto.componentWillUnmount=function componentWillUnmount(){\n this.cancelNextCallback();\n};\n\n _proto.getTimeouts=function getTimeouts(){\n var timeout=this.props.timeout;\n var exit,enter,appear;\n exit=enter=appear=timeout;\n\n if (timeout !=null && typeof timeout !=='number'){\n exit=timeout.exit;\n enter=timeout.enter;// TODO:remove fallback for next major\n\n appear=timeout.appear !==undefined ? timeout.appear:enter;\n}\n\n return{\n exit:exit,\n enter:enter,\n appear:appear\n};\n};\n\n _proto.updateStatus=function updateStatus(mounting,nextStatus){\n if (mounting===void 0){\n mounting=false;\n}\n\n if (nextStatus !==null){\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus===ENTERING){\n if (this.props.unmountOnExit || this.props.mountOnEnter){\n var node=this.props.nodeRef ? this.props.nodeRef.current:external_ReactDOM_default().findDOMNode(this);// https://github.com/reactjs/react-transition-group/pull/749\n // With unmountOnExit or mountOnEnter,the enter animation should happen at the transition between `exited` and `entering`.\n // To make the animation happen,we have to separate each rendering and avoid being processed as batched.\n\n if (node) forceReflow(node);\n}\n\n this.performEnter(mounting);\n}else{\n this.performExit();\n}\n}else if (this.props.unmountOnExit && this.state.status===EXITED){\n this.setState({\n status:UNMOUNTED\n});\n}\n};\n\n _proto.performEnter=function performEnter(mounting){\n var _this2=this;\n\n var enter=this.props.enter;\n var appearing=this.context ? this.context.isMounting :mounting;\n\n var _ref2=this.props.nodeRef ? [appearing] :[external_ReactDOM_default().findDOMNode(this),appearing],\n maybeNode=_ref2[0],\n maybeAppearing=_ref2[1];\n\n var timeouts=this.getTimeouts();\n var enterTimeout=appearing ? timeouts.appear :timeouts.enter;// no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled){\n this.safeSetState({\n status:ENTERED\n},function (){\n _this2.props.onEntered(maybeNode);\n});\n return;\n}\n\n this.props.onEnter(maybeNode,maybeAppearing);\n this.safeSetState({\n status:ENTERING\n},function (){\n _this2.props.onEntering(maybeNode,maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout,function (){\n _this2.safeSetState({\n status:ENTERED\n},function (){\n _this2.props.onEntered(maybeNode,maybeAppearing);\n});\n});\n});\n};\n\n _proto.performExit=function performExit(){\n var _this3=this;\n\n var exit=this.props.exit;\n var timeouts=this.getTimeouts();\n var maybeNode=this.props.nodeRef ? undefined :external_ReactDOM_default().findDOMNode(this);// no exit animation skip right to EXITED\n\n if (!exit || config.disabled){\n this.safeSetState({\n status:EXITED\n},function (){\n _this3.props.onExited(maybeNode);\n});\n return;\n}\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status:EXITING\n},function (){\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit,function (){\n _this3.safeSetState({\n status:EXITED\n},function (){\n _this3.props.onExited(maybeNode);\n});\n});\n});\n};\n\n _proto.cancelNextCallback=function cancelNextCallback(){\n if (this.nextCallback !==null){\n this.nextCallback.cancel();\n this.nextCallback=null;\n}\n};\n\n _proto.safeSetState=function safeSetState(nextState,callback){\n // This shouldn't be necessary,but there are weird race conditions with\n // setState callbacks and unmounting in testing,so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback=this.setNextCallback(callback);\n this.setState(nextState,callback);\n};\n\n _proto.setNextCallback=function setNextCallback(callback){\n var _this4=this;\n\n var active=true;\n\n this.nextCallback=function (event){\n if (active){\n active=false;\n _this4.nextCallback=null;\n callback(event);\n}\n};\n\n this.nextCallback.cancel=function (){\n active=false;\n};\n\n return this.nextCallback;\n};\n\n _proto.onTransitionEnd=function onTransitionEnd(timeout,handler){\n this.setNextCallback(handler);\n var node=this.props.nodeRef ? this.props.nodeRef.current :external_ReactDOM_default().findDOMNode(this);\n var doesNotHaveTimeoutOrListener=timeout==null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener){\n setTimeout(this.nextCallback,0);\n return;\n}\n\n if (this.props.addEndListener){\n var _ref3=this.props.nodeRef ? [this.nextCallback]:[node,this.nextCallback],\n maybeNode=_ref3[0],\n maybeNextCallback=_ref3[1];\n\n this.props.addEndListener(maybeNode,maybeNextCallback);\n}\n\n if (timeout !=null){\n setTimeout(this.nextCallback,timeout);\n}\n};\n\n _proto.render=function render(){\n var status=this.state.status;\n\n if (status===UNMOUNTED){\n return null;\n}\n\n var _this$props=this.props,\n children=_this$props.children,\n _in=_this$props.in,\n _mountOnEnter=_this$props.mountOnEnter,\n _unmountOnExit=_this$props.unmountOnExit,\n _appear=_this$props.appear,\n _enter=_this$props.enter,\n _exit=_this$props.exit,\n _timeout=_this$props.timeout,\n _addEndListener=_this$props.addEndListener,\n _onEnter=_this$props.onEnter,\n _onEntering=_this$props.onEntering,\n _onEntered=_this$props.onEntered,\n _onExit=_this$props.onExit,\n _onExiting=_this$props.onExiting,\n _onExited=_this$props.onExited,\n _nodeRef=_this$props.nodeRef,\n childProps=(0,objectWithoutPropertiesLoose.A)(_this$props,[\"children\",\"in\",\"mountOnEnter\",\"unmountOnExit\",\"appear\",\"enter\",\"exit\",\"timeout\",\"addEndListener\",\"onEnter\",\"onEntering\",\"onEntered\",\"onExit\",\"onExiting\",\"onExited\",\"nodeRef\"]);\n\n return (\n \n // allows for nested Transitions\n external_React_default().createElement(TransitionGroupContext.Provider,{\n value:null\n},typeof children==='function' ? children(status,childProps):external_React_default().cloneElement(external_React_default().Children.only(children),childProps))\n);\n};\n\n return Transition;\n}((external_React_default()).Component);\n\nTransition.contextType=TransitionGroupContext;;\n\nTransition.defaultProps={\n in:false,\n mountOnEnter:false,\n unmountOnExit:false,\n appear:false,\n enter:true,\n exit:true,\n onEnter:noop,\n onEntering:noop,\n onEntered:noop,\n onExit:noop,\n onExiting:noop,\n onExited:noop\n};\nTransition.UNMOUNTED=UNMOUNTED;\nTransition.EXITED=EXITED;\nTransition.ENTERING=ENTERING;\nTransition.ENTERED=ENTERED;\nTransition.EXITING=EXITING;\n const esm_Transition=(Transition);\n;// ./node_modules/@mui/material/styles/useTheme.js\n'use client';\n\n\n\n\n\nfunction styles_useTheme_useTheme(){\n const theme=esm_useTheme(styles_defaultTheme.A);\n return theme[identifier.A] || theme;\n}\n;// ./node_modules/@mui/material/transitions/utils.js\nconst reflow=node=>node.scrollTop;\nfunction getTransitionProps(props,options){\n var _style$transitionDura,_style$transitionTimi;\n const{\n timeout,\n easing,\n style={}\n}=props;\n return{\n duration:(_style$transitionDura=style.transitionDuration) !=null ? _style$transitionDura:typeof timeout==='number' ? timeout:timeout[options.mode] || 0,\n easing:(_style$transitionTimi=style.transitionTimingFunction) !=null ? _style$transitionTimi:typeof easing==='object' ? easing[options.mode]:easing,\n delay:style.transitionDelay\n};\n}\n;// ./node_modules/@mui/material/Grow/Grow.js\n'use client';\n\n\n\nconst Grow_excluded=[\"addEndListener\",\"appear\",\"children\",\"easing\",\"in\",\"onEnter\",\"onEntered\",\"onEntering\",\"onExit\",\"onExited\",\"onExiting\",\"style\",\"timeout\",\"TransitionComponent\"];\n\n\n\n\n\n\n\n\n\n\nfunction getScale(value){\n return `scale(${value},${value ** 2})`;\n}\nconst Grow_styles={\n entering:{\n opacity:1,\n transform:getScale(1)\n},\n entered:{\n opacity:1,\n transform:'none'\n}\n};\n\n\nconst isWebKit154=typeof navigator !=='undefined' && /^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent) && /(os |version\\/)15(.|_)4/i.test(navigator.userAgent);\n\n\nconst Grow=external_React_.forwardRef(function Grow(props,ref){\n const{\n addEndListener,\n appear=true,\n children,\n easing,\n in:inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout='auto',\n // eslint-disable-next-line react/prop-types\n TransitionComponent=esm_Transition\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Grow_excluded);\n const timer=(0,useTimeout.A)();\n const autoTimeout=external_React_.useRef();\n const theme=styles_useTheme_useTheme();\n const nodeRef=external_React_.useRef(null);\n const handleRef=(0,utils_useForkRef.A)(nodeRef,getReactElementRef(children),ref);\n const normalizedTransitionCallback=callback=>maybeIsAppearing=>{\n if (callback){\n const node=nodeRef.current;\n\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (maybeIsAppearing===undefined){\n callback(node);\n}else{\n callback(node,maybeIsAppearing);\n}\n}\n};\n const handleEntering=normalizedTransitionCallback(onEntering);\n const handleEnter=normalizedTransitionCallback((node,isAppearing)=>{\n reflow(node);// So the animation always start from the start.\n\n const{\n duration:transitionDuration,\n delay,\n easing:transitionTimingFunction\n}=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'enter'\n});\n let duration;\n if (timeout==='auto'){\n duration=theme.transitions.getAutoHeightDuration(node.clientHeight);\n autoTimeout.current=duration;\n}else{\n duration=transitionDuration;\n}\n node.style.transition=[theme.transitions.create('opacity',{\n duration,\n delay\n}),theme.transitions.create('transform',{\n duration:isWebKit154 ? duration:duration * .666,\n delay,\n easing:transitionTimingFunction\n})].join(',');\n if (onEnter){\n onEnter(node,isAppearing);\n}\n});\n const handleEntered=normalizedTransitionCallback(onEntered);\n const handleExiting=normalizedTransitionCallback(onExiting);\n const handleExit=normalizedTransitionCallback(node=>{\n const{\n duration:transitionDuration,\n delay,\n easing:transitionTimingFunction\n}=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'exit'\n});\n let duration;\n if (timeout==='auto'){\n duration=theme.transitions.getAutoHeightDuration(node.clientHeight);\n autoTimeout.current=duration;\n}else{\n duration=transitionDuration;\n}\n node.style.transition=[theme.transitions.create('opacity',{\n duration,\n delay\n}),theme.transitions.create('transform',{\n duration:isWebKit154 ? duration:duration * .666,\n delay:isWebKit154 ? delay:delay || duration * .333,\n easing:transitionTimingFunction\n})].join(',');\n node.style.opacity=0;\n node.style.transform=getScale(.75);\n if (onExit){\n onExit(node);\n}\n});\n const handleExited=normalizedTransitionCallback(onExited);\n const handleAddEndListener=next=>{\n if (timeout==='auto'){\n timer.start(autoTimeout.current || 0,next);\n}\n if (addEndListener){\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current,next);\n}\n};\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:appear,\n in:inProp,\n nodeRef:nodeRef,\n onEnter:handleEnter,\n onEntered:handleEntered,\n onEntering:handleEntering,\n onExit:handleExit,\n onExited:handleExited,\n onExiting:handleExiting,\n addEndListener:handleAddEndListener,\n timeout:timeout==='auto' ? null:timeout\n},other,{\n children:(state,childProps)=>{\n return external_React_.cloneElement(children,(0,esm_extends.A)({\n style:(0,esm_extends.A)({\n opacity:0,\n transform:getScale(.75),\n visibility:state==='exited' && !inProp ? 'hidden':undefined\n},Grow_styles[state],style,children.props.style),\n ref:handleRef\n},childProps));\n}\n}));\n});\n false ? 0 :void 0;\nGrow.muiSupportAuto=true;\n const Grow_Grow=(Grow);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js\nvar ownerDocument_ownerDocument=__webpack_require__(2325);\n;// ./node_modules/@mui/material/Unstable_TrapFocus/FocusTrap.js\n'use client';\n\n\n\n\n\n\n\n// Inspired by https://github.com/focus-trap/tabbable\nconst candidatesSelector=['input','select','textarea','a[href]','button','[tabindex]','audio[controls]','video[controls]','[contenteditable]:not([contenteditable=\"false\"])'].join(',');\nfunction getTabIndex(node){\n const tabindexAttr=parseInt(node.getAttribute('tabindex') || '',10);\n if (!Number.isNaN(tabindexAttr)){\n return tabindexAttr;\n}\n\n // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // https://bugs.chromium.org/p/chromium/issues/detail?id=661108&q=contenteditable%20tabindex&can=2\n // so if they don't have a tabindex attribute specifically set,assume it's 0.\n // in Chrome,<details/>,<audio controls/>and <video controls/>elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order;in FF,they get a default\n // `tabIndex` of 0;since Chrome still puts those elements in the regular tab\n // order,consider their tab index to be 0.\n if (node.contentEditable==='true' || (node.nodeName==='AUDIO' || node.nodeName==='VIDEO' || node.nodeName==='DETAILS') && node.getAttribute('tabindex')===null){\n return 0;\n}\n return node.tabIndex;\n}\nfunction isNonTabbableRadio(node){\n if (node.tagName !=='INPUT' || node.type !=='radio'){\n return false;\n}\n if (!node.name){\n return false;\n}\n const getRadio=selector=>node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n let roving=getRadio(`[name=\"${node.name}\"]:checked`);\n if (!roving){\n roving=getRadio(`[name=\"${node.name}\"]`);\n}\n return roving !==node;\n}\nfunction isNodeMatchingSelectorFocusable(node){\n if (node.disabled || node.tagName==='INPUT' && node.type==='hidden' || isNonTabbableRadio(node)){\n return false;\n}\n return true;\n}\nfunction defaultGetTabbable(root){\n const regularTabNodes=[];\n const orderedTabNodes=[];\n Array.from(root.querySelectorAll(candidatesSelector)).forEach((node,i)=>{\n const nodeTabIndex=getTabIndex(node);\n if (nodeTabIndex===-1 || !isNodeMatchingSelectorFocusable(node)){\n return;\n}\n if (nodeTabIndex===0){\n regularTabNodes.push(node);\n}else{\n orderedTabNodes.push({\n documentOrder:i,\n tabIndex:nodeTabIndex,\n node:node\n});\n}\n});\n return orderedTabNodes.sort((a,b)=>a.tabIndex===b.tabIndex ? a.documentOrder - b.documentOrder:a.tabIndex - b.tabIndex).map(a=>a.node).concat(regularTabNodes);\n}\nfunction defaultIsEnabled(){\n return true;\n}\n\n\nfunction FocusTrap(props){\n const{\n children,\n disableAutoFocus=false,\n disableEnforceFocus=false,\n disableRestoreFocus=false,\n getTabbable=defaultGetTabbable,\n isEnabled=defaultIsEnabled,\n open\n}=props;\n const ignoreNextEnforceFocus=external_React_.useRef(false);\n const sentinelStart=external_React_.useRef(null);\n const sentinelEnd=external_React_.useRef(null);\n const nodeToRestore=external_React_.useRef(null);\n const reactFocusEventTarget=external_React_.useRef(null);\n // This variable is useful when disableAutoFocus is true.\n // It waits for the active element to move into the component to activate.\n const activated=external_React_.useRef(false);\n const rootRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(getReactElementRef(children),rootRef);\n const lastKeydown=external_React_.useRef(null);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n activated.current=!disableAutoFocus;\n},[disableAutoFocus,open]);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n const doc=(0,ownerDocument_ownerDocument.A)(rootRef.current);\n if (!rootRef.current.contains(doc.activeElement)){\n if (!rootRef.current.hasAttribute('tabIndex')){\n if (false) // removed by dead control flow\n{}\n rootRef.current.setAttribute('tabIndex','-1');\n}\n if (activated.current){\n rootRef.current.focus();\n}\n}\n return ()=>{\n // restoreLastFocus()\n if (!disableRestoreFocus){\n // In IE11 it is possible for document.activeElement to be null resulting\n // in nodeToRestore.current being null.\n // Not all elements in IE11 have a focus method.\n // Once IE11 support is dropped the focus() call can be unconditional.\n if (nodeToRestore.current && nodeToRestore.current.focus){\n ignoreNextEnforceFocus.current=true;\n nodeToRestore.current.focus();\n}\n nodeToRestore.current=null;\n}\n};\n // Missing `disableRestoreFocus` which is fine.\n // We don't support changing that prop on an open FocusTrap\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[open]);\n external_React_.useEffect(()=>{\n // We might render an empty child.\n if (!open || !rootRef.current){\n return;\n}\n const doc=(0,ownerDocument_ownerDocument.A)(rootRef.current);\n const loopFocus=nativeEvent=>{\n lastKeydown.current=nativeEvent;\n if (disableEnforceFocus || !isEnabled() || nativeEvent.key !=='Tab'){\n return;\n}\n\n // Make sure the next tab starts from the right place.\n // doc.activeElement refers to the origin.\n if (doc.activeElement===rootRef.current && nativeEvent.shiftKey){\n // We need to ignore the next contain as\n // it will try to move the focus back to the rootRef element.\n ignoreNextEnforceFocus.current=true;\n if (sentinelEnd.current){\n sentinelEnd.current.focus();\n}\n}\n};\n const contain=()=>{\n const rootElement=rootRef.current;\n\n // Cleanup functions are executed lazily in React 17.\n // Contain can be called between the component being unmounted and its cleanup function being run.\n if (rootElement===null){\n return;\n}\n if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current){\n ignoreNextEnforceFocus.current=false;\n return;\n}\n\n // The focus is already inside\n if (rootElement.contains(doc.activeElement)){\n return;\n}\n\n // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)\n if (disableEnforceFocus && doc.activeElement !==sentinelStart.current && doc.activeElement !==sentinelEnd.current){\n return;\n}\n\n // if the focus event is not coming from inside the children's react tree,reset the refs\n if (doc.activeElement !==reactFocusEventTarget.current){\n reactFocusEventTarget.current=null;\n}else if (reactFocusEventTarget.current !==null){\n return;\n}\n if (!activated.current){\n return;\n}\n let tabbable=[];\n if (doc.activeElement===sentinelStart.current || doc.activeElement===sentinelEnd.current){\n tabbable=getTabbable(rootRef.current);\n}\n\n // one of the sentinel nodes was focused,so move the focus\n // to the first/last tabbable element inside the focus trap\n if (tabbable.length>0){\n var _lastKeydown$current,_lastKeydown$current2;\n const isShiftTab=Boolean(((_lastKeydown$current=lastKeydown.current)==null ? void 0 :_lastKeydown$current.shiftKey) && ((_lastKeydown$current2=lastKeydown.current)==null ? void 0 :_lastKeydown$current2.key)==='Tab');\n const focusNext=tabbable[0];\n const focusPrevious=tabbable[tabbable.length - 1];\n if (typeof focusNext !=='string' && typeof focusPrevious !=='string'){\n if (isShiftTab){\n focusPrevious.focus();\n}else{\n focusNext.focus();\n}\n}\n // no tabbable elements in the trap focus or the focus was outside of the focus trap\n}else{\n rootElement.focus();\n}\n};\n doc.addEventListener('focusin',contain);\n doc.addEventListener('keydown',loopFocus,true);\n\n // With Edge,Safari and Firefox,no focus related events are fired when the focused area stops being a focused area.\n // for example https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n // Instead,we can look if the active element was restored on the BODY element.\n //\n // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n const interval=setInterval(()=>{\n if (doc.activeElement && doc.activeElement.tagName==='BODY'){\n contain();\n}\n},50);\n return ()=>{\n clearInterval(interval);\n doc.removeEventListener('focusin',contain);\n doc.removeEventListener('keydown',loopFocus,true);\n};\n},[disableAutoFocus,disableEnforceFocus,disableRestoreFocus,isEnabled,open,getTabbable]);\n const onFocus=event=>{\n if (nodeToRestore.current===null){\n nodeToRestore.current=event.relatedTarget;\n}\n activated.current=true;\n reactFocusEventTarget.current=event.target;\n const childrenPropsHandler=children.props.onFocus;\n if (childrenPropsHandler){\n childrenPropsHandler(event);\n}\n};\n const handleFocusSentinel=event=>{\n if (nodeToRestore.current===null){\n nodeToRestore.current=event.relatedTarget;\n}\n activated.current=true;\n};\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(\"div\",{\n tabIndex:open ? 0:-1,\n onFocus:handleFocusSentinel,\n ref:sentinelStart,\n \"data-testid\":\"sentinelStart\"\n}),external_React_.cloneElement(children,{\n ref:handleRef,\n onFocus\n}),(0,jsx_runtime.jsx)(\"div\",{\n tabIndex:open ? 0:-1,\n onFocus:handleFocusSentinel,\n ref:sentinelEnd,\n \"data-testid\":\"sentinelEnd\"\n})]\n});\n}\n false ? 0 :void 0;\n const Unstable_TrapFocus_FocusTrap=(FocusTrap);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/setRef/setRef.js\nvar setRef=__webpack_require__(7365);\n;// ./node_modules/@mui/material/Portal/Portal.js\n'use client';\n\n\n\n\n\n\nfunction getContainer(container){\n return typeof container==='function' ? container():container;\n}\n\n\nconst Portal=external_React_.forwardRef(function Portal(props,forwardedRef){\n const{\n children,\n container,\n disablePortal=false\n}=props;\n const [mountNode,setMountNode]=external_React_.useState(null);\n const handleRef=(0,useForkRef.A)(external_React_.isValidElement(children) ? getReactElementRef(children) :null,forwardedRef);\n (0,useEnhancedEffect.A)(()=>{\n if (!disablePortal){\n setMountNode(getContainer(container) || document.body);\n}\n},[container,disablePortal]);\n (0,useEnhancedEffect.A)(()=>{\n if (mountNode && !disablePortal){\n (0,setRef.A)(forwardedRef,mountNode);\n return ()=>{\n (0,setRef.A)(forwardedRef,null);\n};\n}\n return undefined;\n},[forwardedRef,mountNode,disablePortal]);\n if (disablePortal){\n if (external_React_.isValidElement(children)){\n const newProps={\n ref:handleRef\n};\n return external_React_.cloneElement(children,newProps);\n}\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:children\n});\n}\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:mountNode ? external_ReactDOM_namespaceObject.createPortal(children,mountNode):mountNode\n});\n});\n false ? 0 :void 0;\n const Portal_Portal=(Portal);\n;// ./node_modules/@mui/material/Fade/Fade.js\n'use client';\n\n\n\nconst Fade_excluded=[\"addEndListener\",\"appear\",\"children\",\"easing\",\"in\",\"onEnter\",\"onEntered\",\"onEntering\",\"onExit\",\"onExited\",\"onExiting\",\"style\",\"timeout\",\"TransitionComponent\"];\n\n\n\n\n\n\n\n\n\nconst Fade_styles={\n entering:{\n opacity:1\n},\n entered:{\n opacity:1\n}\n};\n\n\nconst Fade=external_React_.forwardRef(function Fade(props,ref){\n const theme=styles_useTheme_useTheme();\n const defaultTimeout={\n enter:theme.transitions.duration.enteringScreen,\n exit:theme.transitions.duration.leavingScreen\n};\n const{\n addEndListener,\n appear=true,\n children,\n easing,\n in:inProp,\n onEnter,\n onEntered,\n onEntering,\n onExit,\n onExited,\n onExiting,\n style,\n timeout=defaultTimeout,\n // eslint-disable-next-line react/prop-types\n TransitionComponent=esm_Transition\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Fade_excluded);\n const enableStrictModeCompat=true;\n const nodeRef=external_React_.useRef(null);\n const handleRef=(0,utils_useForkRef.A)(nodeRef,getReactElementRef(children),ref);\n const normalizedTransitionCallback=callback=>maybeIsAppearing=>{\n if (callback){\n const node=nodeRef.current;\n\n // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n if (maybeIsAppearing===undefined){\n callback(node);\n}else{\n callback(node,maybeIsAppearing);\n}\n}\n};\n const handleEntering=normalizedTransitionCallback(onEntering);\n const handleEnter=normalizedTransitionCallback((node,isAppearing)=>{\n reflow(node);// So the animation always start from the start.\n\n const transitionProps=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'enter'\n});\n node.style.webkitTransition=theme.transitions.create('opacity',transitionProps);\n node.style.transition=theme.transitions.create('opacity',transitionProps);\n if (onEnter){\n onEnter(node,isAppearing);\n}\n});\n const handleEntered=normalizedTransitionCallback(onEntered);\n const handleExiting=normalizedTransitionCallback(onExiting);\n const handleExit=normalizedTransitionCallback(node=>{\n const transitionProps=getTransitionProps({\n style,\n timeout,\n easing\n},{\n mode:'exit'\n});\n node.style.webkitTransition=theme.transitions.create('opacity',transitionProps);\n node.style.transition=theme.transitions.create('opacity',transitionProps);\n if (onExit){\n onExit(node);\n}\n});\n const handleExited=normalizedTransitionCallback(onExited);\n const handleAddEndListener=next=>{\n if (addEndListener){\n // Old call signature before `react-transition-group` implemented `nodeRef`\n addEndListener(nodeRef.current,next);\n}\n};\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:appear,\n in:inProp,\n nodeRef:enableStrictModeCompat ? nodeRef:undefined,\n onEnter:handleEnter,\n onEntered:handleEntered,\n onEntering:handleEntering,\n onExit:handleExit,\n onExited:handleExited,\n onExiting:handleExiting,\n addEndListener:handleAddEndListener,\n timeout:timeout\n},other,{\n children:(state,childProps)=>{\n return external_React_.cloneElement(children,(0,esm_extends.A)({\n style:(0,esm_extends.A)({\n opacity:0,\n visibility:state==='exited' && !inProp ? 'hidden':undefined\n},Fade_styles[state],style,children.props.style),\n ref:handleRef\n},childProps));\n}\n}));\n});\n false ? 0 :void 0;\n const Fade_Fade=(Fade);\n;// ./node_modules/@mui/material/Backdrop/backdropClasses.js\n\n\nfunction getBackdropUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiBackdrop',slot);\n}\nconst backdropClasses=(0,generateUtilityClasses.A)('MuiBackdrop',['root','invisible']);\n const Backdrop_backdropClasses=((null && (backdropClasses)));\n;// ./node_modules/@mui/material/Backdrop/Backdrop.js\n'use client';\n\n\n\nconst Backdrop_excluded=[\"children\",\"className\",\"component\",\"components\",\"componentsProps\",\"invisible\",\"open\",\"slotProps\",\"slots\",\"TransitionComponent\",\"transitionDuration\"];\n\n\n\n\n\n\n\n\n\nconst Backdrop_useUtilityClasses=ownerState=>{\n const{\n classes,\n invisible\n}=ownerState;\n const slots={\n root:['root',invisible && 'invisible']\n};\n return (0,composeClasses.A)(slots,getBackdropUtilityClass,classes);\n};\nconst BackdropRoot=(0,styled.Ay)('div',{\n name:'MuiBackdrop',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.invisible && styles.invisible];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n position:'fixed',\n display:'flex',\n alignItems:'center',\n justifyContent:'center',\n right:0,\n bottom:0,\n top:0,\n left:0,\n backgroundColor:'rgba(0,0,0,.5)',\n WebkitTapHighlightColor:'transparent'\n},ownerState.invisible &&{\n backgroundColor:'transparent'\n}));\nconst Backdrop=external_React_.forwardRef(function Backdrop(inProps,ref){\n var _slotProps$root,_ref,_slots$root;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiBackdrop'\n});\n const{\n children,\n className,\n component='div',\n components={},\n TransitionComponent=Fade_Fade,\n transitionDuration\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Backdrop_excluded);,props,{\n component,\n invisible\n});\n const classes=Backdrop_useUtilityClasses(ownerState);\n const rootSlotProps=(_slotProps$root=slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n return (0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n in:open,\n timeout:transitionDuration\n},other,{\n children:(0,jsx_runtime.jsx)(BackdropRoot,(0,esm_extends.A)({\n \"aria-hidden\":true\n},rootSlotProps,{\n as:(_ref=(_slots$root=slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :component,\n className:(0,clsx.A)(classes.root,className,rootSlotProps==null ? void 0 :rootSlotProps.className),\n ownerState:(0,esm_extends.A)({},ownerState,rootSlotProps==null ? void 0:rootSlotProps.ownerState),\n classes:classes,\n ref:ref,\n children:children\n}))\n}));\n});\n false ? 0 :void 0;\n const Backdrop_Backdrop=(Backdrop);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js\nvar createChainedFunction=__webpack_require__(6673);\n;// ./node_modules/@mui/material/Modal/ModalManager.js\n\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container){\n const doc=(0,ownerDocument_ownerDocument.A)(container);\n if (doc.body===container){\n return (0,ownerWindow.A)(container).innerWidth>doc.documentElement.clientWidth;\n}\n return container.scrollHeight>container.clientHeight;\n}\nfunction ariaHidden(element,show){\n if (show){\n element.setAttribute('aria-hidden','true');\n}else{\n element.removeAttribute('aria-hidden');\n}\n}\nfunction getPaddingRight(element){\n return parseInt((0,ownerWindow.A)(element).getComputedStyle(element).paddingRight,10) || 0;\n}\nfunction isAriaHiddenForbiddenOnElement(element){\n // The forbidden HTML tags are the ones from ARIA specification that\n // can be children of body and can't have aria-hidden attribute.\n // cf. http://www.w3.org/TR/html-aria/#docconformance\n const forbiddenTagNames=['TEMPLATE','SCRIPT','STYLE','LINK','MAP','META','NOSCRIPT','PICTURE','COL','COLGROUP','PARAM','SLOT','SOURCE','TRACK'];\n const isForbiddenTagName=forbiddenTagNames.indexOf(element.tagName) !==-1;\n const isInputHidden=element.tagName==='INPUT' && element.getAttribute('type')==='hidden';\n return isForbiddenTagName || isInputHidden;\n}\nfunction ariaHiddenSiblings(container,mountElement,currentElement,elementsToExclude,show){\n const blacklist=[mountElement,currentElement,...elementsToExclude];\n [].forEach.call(container.children,element=>{\n const isNotExcludedElement=blacklist.indexOf(element)===-1;\n const isNotForbiddenElement=!isAriaHiddenForbiddenOnElement(element);\n if (isNotExcludedElement && isNotForbiddenElement){\n ariaHidden(element,show);\n}\n});\n}\nfunction findIndexOf(items,callback){\n let idx=-1;\n items.some((item,index)=>{\n if (callback(item)){\n idx=index;\n return true;\n}\n return false;\n});\n return idx;\n}\nfunction handleContainer(containerInfo,props){\n const restoreStyle=[];\n const container=containerInfo.container;\n if (!props.disableScrollLock){\n if (isOverflowing(container)){\n // Compute the size before applying overflow hidden to avoid any scroll jumps.\n const scrollbarSize=getScrollbarSize((0,ownerDocument_ownerDocument.A)(container));\n restoreStyle.push({\n value:container.style.paddingRight,\n property:'padding-right',\n el:container\n});\n // Use computed style,here to get the real padding to add our scrollbar width.\n container.style.paddingRight=`${getPaddingRight(container)+scrollbarSize}px`;\n\n // .mui-fixed is a global helper.\n const fixedElements=(0,ownerDocument_ownerDocument.A)(container).querySelectorAll('.mui-fixed');\n [].forEach.call(fixedElements,element=>{\n restoreStyle.push({\n value:element.style.paddingRight,\n property:'padding-right',\n el:element\n});\n element.style.paddingRight=`${getPaddingRight(element)+scrollbarSize}px`;\n});\n}\n let scrollContainer;\n if (container.parentNode instanceof DocumentFragment){\n scrollContainer=(0,ownerDocument_ownerDocument.A)(container).body;\n}else{\n // Support html overflow-y:auto for scroll stability between pages\n // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n const parent=container.parentElement;\n const containerWindow=(0,ownerWindow.A)(container);\n scrollContainer=(parent==null ? void 0:parent.nodeName)==='HTML' && containerWindow.getComputedStyle(parent).overflowY==='scroll' ? parent:container;\n}\n\n // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n // screensize shrink.\n restoreStyle.push({\n value:scrollContainer.style.overflow,\n property:'overflow',\n el:scrollContainer\n},{\n value:scrollContainer.style.overflowX,\n property:'overflow-x',\n el:scrollContainer\n},{\n value:scrollContainer.style.overflowY,\n property:'overflow-y',\n el:scrollContainer\n});\n scrollContainer.style.overflow='hidden';\n}\n const restore=()=>{\n restoreStyle.forEach(({\n value,\n el,\n property\n})=>{\n if (value){\n el.style.setProperty(property,value);\n}else{\n el.style.removeProperty(property);\n}\n});\n};\n return restore;\n}\nfunction getHiddenSiblings(container){\n const hiddenSiblings=[];\n [].forEach.call(container.children,element=>{\n if (element.getAttribute('aria-hidden')==='true'){\n hiddenSiblings.push(element);\n}\n});\n return hiddenSiblings;\n}\n\nclass ModalManager{\n constructor(){\n this.containers=void 0;\n this.modals=void 0;\n this.modals=[];\n this.containers=[];\n}\n add(modal,container){\n let modalIndex=this.modals.indexOf(modal);\n if (modalIndex !==-1){\n return modalIndex;\n}\n modalIndex=this.modals.length;\n this.modals.push(modal);\n\n // If the modal we are adding is already in the DOM.\n if (modal.modalRef){\n ariaHidden(modal.modalRef,false);\n}\n const hiddenSiblings=getHiddenSiblings(container);\n ariaHiddenSiblings(container,modal.mount,modal.modalRef,hiddenSiblings,true);\n const containerIndex=findIndexOf(this.containers,item=>item.container===container);\n if (containerIndex !==-1){\n this.containers[containerIndex].modals.push(modal);\n return modalIndex;\n}\n this.containers.push({\n modals:[modal],\n container,\n restore:null,\n hiddenSiblings\n});\n return modalIndex;\n}\n mount(modal,props){\n const containerIndex=findIndexOf(this.containers,item=>item.modals.indexOf(modal) !==-1);\n const containerInfo=this.containers[containerIndex];\n if (!containerInfo.restore){\n containerInfo.restore=handleContainer(containerInfo,props);\n}\n}\n remove(modal,ariaHiddenState=true){\n const modalIndex=this.modals.indexOf(modal);\n if (modalIndex===-1){\n return modalIndex;\n}\n const containerIndex=findIndexOf(this.containers,item=>item.modals.indexOf(modal) !==-1);\n const containerInfo=this.containers[containerIndex];\n containerInfo.modals.splice(containerInfo.modals.indexOf(modal),1);\n this.modals.splice(modalIndex,1);\n\n // If that was the last modal in a container,clean up the container.\n if (containerInfo.modals.length===0){\n // The modal might be closed before it had the chance to be mounted in the DOM.\n if (containerInfo.restore){\n containerInfo.restore();\n}\n if (modal.modalRef){\n // In case the modal wasn't in the DOM yet.\n ariaHidden(modal.modalRef,ariaHiddenState);\n}\n ariaHiddenSiblings(containerInfo.container,modal.mount,modal.modalRef,containerInfo.hiddenSiblings,false);\n this.containers.splice(containerIndex,1);\n}else{\n // Otherwise make sure the next top modal is visible to a screen reader.\n const nextTop=containerInfo.modals[containerInfo.modals.length - 1];\n // as soon as a modal is adding its modalRef is undefined. it can't set\n // aria-hidden because the dom element doesn't exist either\n // when modal was unmounted before modalRef gets null\n if (nextTop.modalRef){\n ariaHidden(nextTop.modalRef,false);\n}\n}\n return modalIndex;\n}\n isTopModal(modal){\n return this.modals.length>0 && this.modals[this.modals.length - 1]===modal;\n}\n}\n;// ./node_modules/@mui/material/Modal/useModal.js\n'use client';\n\n\n\n\n\n\nfunction useModal_getContainer(container){\n return typeof container==='function' ? container():container;\n}\nfunction getHasTransition(children){\n return children ? children.props.hasOwnProperty('in'):false;\n}\n\n// A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\nconst defaultManager=new ModalManager();\n\nfunction useModal(parameters){\n const{\n container,\n disableEscapeKeyDown=false,\n disableScrollLock=false,\n // @ts-ignore internal logic - Base UI supports the manager as a prop too\n manager=defaultManager,\n closeAfterTransition=false,\n onTransitionEnter,\n onTransitionExited,\n children,\n onClose,\n open,\n rootRef\n}=parameters;);\n const mountNodeRef=external_React_.useRef(null);\n const modalRef=external_React_.useRef(null);\n const handleRef=(0,useForkRef.A)(modalRef,rootRef);\n const [exited,setExited]=external_React_.useState(!open);\n const hasTransition=getHasTransition(children);\n let ariaHiddenProp=true;\n if (parameters['aria-hidden']==='false' || parameters['aria-hidden']===false){\n ariaHiddenProp=false;\n}\n const getDoc=()=>(0,ownerDocument_ownerDocument.A)(mountNodeRef.current);\n const getModal=()=>{\n modal.current.modalRef=modalRef.current;\n modal.current.mount=mountNodeRef.current;\n return modal.current;\n};\n const handleMounted=()=>{\n manager.mount(getModal(),{\n disableScrollLock\n});\n\n // Fix a bug on Chrome where the scroll isn't initially 0.\n if (modalRef.current){\n modalRef.current.scrollTop=0;\n}\n};\n const handleOpen=(0,useEventCallback.A)(()=>{\n const resolvedContainer=useModal_getContainer(container) || getDoc().body;\n manager.add(getModal(),resolvedContainer);\n\n // The element was already mounted.\n if (modalRef.current){\n handleMounted();\n}\n});\n const isTopModal=external_React_.useCallback(()=>manager.isTopModal(getModal()),[manager]);\n const handlePortalRef=(0,useEventCallback.A)(node=>{\n mountNodeRef.current=node;\n if (!node){\n return;\n}\n if (open && isTopModal()){\n handleMounted();\n}else if (modalRef.current){\n ariaHidden(modalRef.current,ariaHiddenProp);\n}\n});\n const handleClose=external_React_.useCallback(()=>{\n manager.remove(getModal(),ariaHiddenProp);\n},[ariaHiddenProp,manager]);\n external_React_.useEffect(()=>{\n return ()=>{\n handleClose();\n};\n},[handleClose]);\n external_React_.useEffect(()=>{\n if (open){\n handleOpen();\n}else if (!hasTransition || !closeAfterTransition){\n handleClose();\n}\n},[open,handleClose,hasTransition,closeAfterTransition,handleOpen]);\n const createHandleKeyDown=otherHandlers=>event=>{\n var _otherHandlers$onKeyD;\n (_otherHandlers$onKeyD=otherHandlers.onKeyDown)==null || _otherHandlers$onKeyD.call(otherHandlers,event);\n\n // The handler doesn't take event.defaultPrevented into account:\n //\n // event.preventDefault() is meant to stop default behaviors like\n // clicking a checkbox to check it,hitting a button to submit a form,\n // and hitting left arrow to move the cursor in a text input etc.\n // Only special HTML elements have these default behaviors.\n if (event.key !=='Escape' || event.which===229 ||\n // Wait until IME is settled.\n !isTopModal()){\n return;\n}\n if (!disableEscapeKeyDown){\n // Swallow the event,in case someone is listening for the escape key on the body.\n event.stopPropagation();\n if (onClose){\n onClose(event,'escapeKeyDown');\n}\n}\n};\n const createHandleBackdropClick=otherHandlers=>event=>{\n var _otherHandlers$onClic;\n (_otherHandlers$onClic=otherHandlers.onClick)==null || _otherHandlers$onClic.call(otherHandlers,event);\n if (event.target !==event.currentTarget){\n return;\n}\n if (onClose){\n onClose(event,'backdropClick');\n}\n};)=>{\n const propsEventHandlers=extractEventHandlers_extractEventHandlers(parameters);\n\n // The custom event handlers shouldn't be spread on the root element\n delete propsEventHandlers.onTransitionEnter;\n delete propsEventHandlers.onTransitionExited;,propsEventHandlers,otherHandlers);\n return (0,esm_extends.A)({\n role:'presentation'\n},externalEventHandlers,{\n onKeyDown:createHandleKeyDown(externalEventHandlers),\n ref:handleRef\n});\n};)=>{\n const externalEventHandlers=otherHandlers;\n return (0,esm_extends.A)({\n 'aria-hidden':true\n},externalEventHandlers,{\n onClick:createHandleBackdropClick(externalEventHandlers),\n open\n});\n};\n const getTransitionProps=()=>{\n const handleEnter=()=>{\n setExited(false);\n if (onTransitionEnter){\n onTransitionEnter();\n}\n};\n const handleExited=()=>{\n setExited(true);\n if (onTransitionExited){\n onTransitionExited();\n}\n if (closeAfterTransition){\n handleClose();\n}\n};\n return{\n onEnter:(0,createChainedFunction.A)(handleEnter,children==null ? void 0:children.props.onEnter),\n onExited:(0,createChainedFunction.A)(handleExited,children==null ? void 0:children.props.onExited)\n};\n};\n return{\n getRootProps,\n getBackdropProps,\n getTransitionProps,\n rootRef:handleRef,\n portalRef:handlePortalRef,\n isTopModal,\n exited,\n hasTransition\n};\n}\n const Modal_useModal=(useModal);\n;// ./node_modules/@mui/material/Modal/modalClasses.js\n\n\nfunction getModalUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiModal',slot);\n}\nconst modalClasses=(0,generateUtilityClasses.A)('MuiModal',['root','hidden','backdrop']);\n const Modal_modalClasses=((null && (modalClasses)));\n;// ./node_modules/@mui/material/Modal/Modal.js\n'use client';\n\n\n\nconst Modal_excluded=[\"BackdropComponent\",\"BackdropProps\",\"classes\",\"className\",\"closeAfterTransition\",\"children\",\"container\",\"component\",\"components\",\"componentsProps\",\"disableAutoFocus\",\"disableEnforceFocus\",\"disableEscapeKeyDown\",\"disablePortal\",\"disableRestoreFocus\",\"disableScrollLock\",\"hideBackdrop\",\"keepMounted\",\"onBackdropClick\",\"onClose\",\"onTransitionEnter\",\"onTransitionExited\",\"open\",\"slotProps\",\"slots\",\"theme\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Modal_useUtilityClasses=ownerState=>{\n const{\n open,\n exited,\n classes\n}=ownerState;\n const slots={\n root:['root',!open && exited && 'hidden'],\n backdrop:['backdrop']\n};\n return (0,composeClasses.A)(slots,getModalUtilityClass,classes);\n};\nconst ModalRoot=(0,styled.Ay)('div',{\n name:'MuiModal',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,!ownerState.open && ownerState.exited && styles.hidden];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n position:'fixed',\n zIndex:(theme.vars || theme).zIndex.modal,\n right:0,\n bottom:0,\n top:0,\n left:0\n},!ownerState.open && ownerState.exited &&{\n visibility:'hidden'\n}));\nconst ModalBackdrop=(0,styled.Ay)(Backdrop_Backdrop,{\n name:'MuiModal',\n slot:'Backdrop',\n overridesResolver:(props,styles)=>{\n return styles.backdrop;\n}\n})({\n zIndex:-1\n});\n\n\nconst Modal=external_React_.forwardRef(function Modal(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$backdrop,_slotProps$root,_slotProps$backdrop;\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiModal',\n props:inProps\n});\n const{\n BackdropComponent=ModalBackdrop,\n BackdropProps,\n className,\n closeAfterTransition=false,\n children,\n container,\n component,\n components={},\n disableAutoFocus=false,\n disableEnforceFocus=false,\n disableEscapeKeyDown=false,\n disablePortal=false,\n disableRestoreFocus=false,\n disableScrollLock=false,\n hideBackdrop=false,\n keepMounted=false,\n onBackdropClick,\n open,\n slotProps,\n slots\n // eslint-disable-next-line react/prop-types\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Modal_excluded);,props,{\n closeAfterTransition,\n disableAutoFocus,\n disableEnforceFocus,\n disableEscapeKeyDown,\n disablePortal,\n disableRestoreFocus,\n disableScrollLock,\n hideBackdrop,\n keepMounted\n});\n const{\n getRootProps,\n getBackdropProps,\n getTransitionProps,\n portalRef,\n isTopModal,\n exited,\n hasTransition\n},propsWithDefaults,{\n rootRef:ref\n}));,propsWithDefaults,{\n exited\n});\n const classes=Modal_useUtilityClasses(ownerState);;\n if (children.props.tabIndex===undefined){\n childProps.tabIndex='-1';\n}\n\n // It's a Transition like component\n if (hasTransition){\n const{\n onEnter,\n onExited\n}=getTransitionProps();\n childProps.onEnter=onEnter;\n childProps.onExited=onExited;\n}\n const RootSlot=(_ref=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :ModalRoot;\n const BackdropSlot=(_ref2=(_slots$backdrop=slots==null ? void 0 :slots.backdrop) !=null ? _slots$backdrop :components.Backdrop) !=null ? _ref2 :BackdropComponent;\n const rootSlotProps=(_slotProps$root=slotProps==null ? void 0 :slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n const backdropSlotProps=(_slotProps$backdrop=slotProps==null ? void 0 :slotProps.backdrop) !=null ? _slotProps$backdrop :componentsProps.backdrop;\n const rootProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:rootSlotProps,\n externalForwardedProps:other,\n getSlotProps:getRootProps,\n additionalProps:{\n ref,\n as:component\n},\n ownerState,\n className:(0,clsx.A)(className,rootSlotProps==null ? void 0:rootSlotProps.className,classes==null ? void 0:classes.root,!ownerState.open && ownerState.exited && (classes==null ? void 0:classes.hidden))\n});\n const backdropProps=useSlotProps_useSlotProps({\n elementType:BackdropSlot,\n externalSlotProps:backdropSlotProps,\n additionalProps:BackdropProps,\n getSlotProps:otherHandlers=>{\n return getBackdropProps((0,esm_extends.A)({},otherHandlers,{\n onClick:e=>{\n if (onBackdropClick){\n onBackdropClick(e);\n}\n if (otherHandlers !=null && otherHandlers.onClick){\n otherHandlers.onClick(e);\n}\n}\n}));\n},\n className:(0,clsx.A)(backdropSlotProps==null ? void 0:backdropSlotProps.className,BackdropProps==null ? void 0:BackdropProps.className,classes==null ? void 0:classes.backdrop),\n ownerState\n});\n if (!keepMounted && !open && (!hasTransition || exited)){\n return null;\n}\n return (0,jsx_runtime.jsx)(Portal_Portal,{\n ref:portalRef,\n container:container,\n disablePortal:disablePortal,\n children:(0,jsx_runtime.jsxs)(RootSlot,(0,esm_extends.A)({},rootProps,{\n children:[!hideBackdrop && BackdropComponent ? (0,jsx_runtime.jsx)(BackdropSlot,(0,esm_extends.A)({},backdropProps)) :null,(0,jsx_runtime.jsx)(Unstable_TrapFocus_FocusTrap,{\n disableEnforceFocus:disableEnforceFocus,\n disableAutoFocus:disableAutoFocus,\n disableRestoreFocus:disableRestoreFocus,\n isEnabled:isTopModal,\n open:open,\n children:external_React_.cloneElement(children,childProps)\n})]\n}))\n});\n});\n false ? 0 :void 0;\n const Modal_Modal=(Modal);\n;// ./node_modules/@mui/material/Popover/popoverClasses.js\n\n\nfunction getPopoverUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPopover',slot);\n}\nconst popoverClasses=(0,generateUtilityClasses.A)('MuiPopover',['root','paper']);\n const Popover_popoverClasses=((null && (popoverClasses)));\n;// ./node_modules/@mui/material/Popover/Popover.js\n'use client';\n\n\n\nconst Popover_excluded=[\"onEntering\"],\n _excluded2=[\"action\",\"anchorEl\",\"anchorOrigin\",\"anchorPosition\",\"anchorReference\",\"children\",\"className\",\"container\",\"elevation\",\"marginThreshold\",\"open\",\"PaperProps\",\"slots\",\"slotProps\",\"transformOrigin\",\"TransitionComponent\",\"transitionDuration\",\"TransitionProps\",\"disableScrollLock\"],\n _excluded3=[\"slotProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getOffsetTop(rect,vertical){\n let offset=0;\n if (typeof vertical==='number'){\n offset=vertical;\n}else if (vertical==='center'){\n offset=rect.height / 2;\n}else if (vertical==='bottom'){\n offset=rect.height;\n}\n return offset;\n}\nfunction getOffsetLeft(rect,horizontal){\n let offset=0;\n if (typeof horizontal==='number'){\n offset=horizontal;\n}else if (horizontal==='center'){\n offset=rect.width / 2;\n}else if (horizontal==='right'){\n offset=rect.width;\n}\n return offset;\n}\nfunction getTransformOriginValue(transformOrigin){\n return [transformOrigin.horizontal,transformOrigin.vertical].map(n=>typeof n==='number' ? `${n}px`:n).join(' ');\n}\nfunction resolveAnchorEl(anchorEl){\n return typeof anchorEl==='function' ? anchorEl():anchorEl;\n}\nconst Popover_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n paper:['paper']\n};\n return (0,composeClasses.A)(slots,getPopoverUtilityClass,classes);\n};\nconst PopoverRoot=(0,styled.Ay)(Modal_Modal,{\n name:'MuiPopover',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\nconst PopoverPaper=(0,styled.Ay)(Paper_Paper,{\n name:'MuiPopover',\n slot:'Paper',\n overridesResolver:(props,styles)=>styles.paper\n})({\n position:'absolute',\n overflowY:'auto',\n overflowX:'hidden',\n // So we see the popover when it's empty.\n // It's most likely on issue on userland.\n minWidth:16,\n minHeight:16,\n maxWidth:'calc(100% - 32px)',\n maxHeight:'',\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0\n});\nconst Popover=external_React_.forwardRef(function Popover(inProps,ref){\n var _slotProps$paper,_slots$root,_slots$paper;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPopover'\n});\n const{\n action,\n anchorEl,\n anchorOrigin={\n vertical:'top',\n horizontal:'left'\n},\n slots,\n slotProps,\n transformOrigin={\n vertical:'top',\n horizontal:'left'\n},\n TransitionComponent=Grow_Grow,\n transitionDuration:transitionDurationProp='auto',\n TransitionProps:{\n onEntering\n},\n disableScrollLock=false\n}=props,\n TransitionProps=(0,objectWithoutPropertiesLoose.A)(props.TransitionProps,Popover_excluded),\n other=(0,objectWithoutPropertiesLoose.A)(props,_excluded2);\n const externalPaperSlotProps=(_slotProps$paper=slotProps==null ? void 0 :slotProps.paper) !=null ? _slotProps$paper :PaperPropsProp;\n const paperRef=external_React_.useRef();\n const handlePaperRef=(0,utils_useForkRef.A)(paperRef,externalPaperSlotProps.ref);,props,{\n anchorOrigin,\n anchorReference,\n elevation,\n marginThreshold,\n externalPaperSlotProps,\n transformOrigin,\n TransitionComponent,\n transitionDuration:transitionDurationProp,\n TransitionProps\n});\n const classes=Popover_useUtilityClasses(ownerState);\n\n // Returns the top/left offset of the position\n // to attach to on the anchor element (or body if none is provided)\n const getAnchorOffset=external_React_.useCallback(()=>{\n if (anchorReference==='anchorPosition'){\n if (false) // removed by dead control flow\n{}\n return anchorPosition;\n}\n const resolvedAnchorEl=resolveAnchorEl(anchorEl);\n\n // If an anchor element wasn't provided,just use the parent body element of this Popover\n const anchorElement=resolvedAnchorEl && resolvedAnchorEl.nodeType===1 ? resolvedAnchorEl :(0,ownerDocument.A)(paperRef.current).body;\n const anchorRect=anchorElement.getBoundingClientRect();\n return{\n top:anchorRect.top+getOffsetTop(anchorRect,anchorOrigin.vertical),\n left:anchorRect.left+getOffsetLeft(anchorRect,anchorOrigin.horizontal)\n};\n},[anchorEl,anchorOrigin.horizontal,anchorOrigin.vertical,anchorPosition,anchorReference]);\n\n // Returns the base transform origin using the element\n const getTransformOrigin=external_React_.useCallback(elemRect=>{\n return{\n vertical:getOffsetTop(elemRect,transformOrigin.vertical),\n horizontal:getOffsetLeft(elemRect,transformOrigin.horizontal)\n};\n},[transformOrigin.horizontal,transformOrigin.vertical]);\n const getPositioningStyle=external_React_.useCallback(element=>{\n const elemRect={\n width:element.offsetWidth,\n height:element.offsetHeight\n};\n\n // Get the transform origin point on the element itself\n const elemTransformOrigin=getTransformOrigin(elemRect);\n if (anchorReference==='none'){\n return{\n top:null,\n left:null,\n transformOrigin:getTransformOriginValue(elemTransformOrigin)\n};\n}\n\n // Get the offset of the anchoring element\n const anchorOffset=getAnchorOffset();\n\n // Calculate element positioning\n let top=anchorOffset.top - elemTransformOrigin.vertical;\n let left=anchorOffset.left - elemTransformOrigin.horizontal;\n const bottom=top+elemRect.height;\n const right=left+elemRect.width;\n\n // Use the parent window of the anchorEl if provided\n const containerWindow=(0,utils_ownerWindow.A)(resolveAnchorEl(anchorEl));\n\n // Window thresholds taking required margin into account\n const heightThreshold=containerWindow.innerHeight - marginThreshold;\n const widthThreshold=containerWindow.innerWidth - marginThreshold;\n\n // Check if the vertical axis needs shifting\n if (marginThreshold !==null && top < marginThreshold){\n const diff=top - marginThreshold;\n top -=diff;\n elemTransformOrigin.vertical+=diff;\n}else if (marginThreshold !==null && bottom>heightThreshold){\n const diff=bottom - heightThreshold;\n top -=diff;\n elemTransformOrigin.vertical+=diff;\n}\n\n // Check if the horizontal axis needs shifting\n if (marginThreshold !==null && left < marginThreshold){\n const diff=left - marginThreshold;\n left -=diff;\n elemTransformOrigin.horizontal+=diff;\n}else if (right>widthThreshold){\n const diff=right - widthThreshold;\n left -=diff;\n elemTransformOrigin.horizontal+=diff;\n}\n return{\n top:`${Math.round(top)}px`,\n left:`${Math.round(left)}px`,\n transformOrigin:getTransformOriginValue(elemTransformOrigin)\n};\n},[anchorEl,anchorReference,getAnchorOffset,getTransformOrigin,marginThreshold]);\n const [isPositioned,setIsPositioned]=external_React_.useState(open);\n const setPositioningStyles=external_React_.useCallback(()=>{\n const element=paperRef.current;\n if (!element){\n return;\n}\n const positioning=getPositioningStyle(element);\n if (positioning.top !==null){\n element.style.top=positioning.top;\n}\n if (positioning.left !==null){\n element.style.left=positioning.left;\n}\n element.style.transformOrigin=positioning.transformOrigin;\n setIsPositioned(true);\n},[getPositioningStyle]);\n external_React_.useEffect(()=>{\n if (disableScrollLock){\n window.addEventListener('scroll',setPositioningStyles);\n}\n return ()=>window.removeEventListener('scroll',setPositioningStyles);\n},[anchorEl,disableScrollLock,setPositioningStyles]);\n const handleEntering=(element,isAppearing)=>{\n if (onEntering){\n onEntering(element,isAppearing);\n}\n setPositioningStyles();\n};\n const handleExited=()=>{\n setIsPositioned(false);\n};\n external_React_.useEffect(()=>{\n if (open){\n setPositioningStyles();\n}\n});\n external_React_.useImperativeHandle(action,()=>open ?{\n updatePosition:()=>{\n setPositioningStyles();\n}\n}:null,[open,setPositioningStyles]);\n external_React_.useEffect(()=>{\n if (!open){\n return undefined;\n}\n const handleResize=(0,utils_debounce.A)(()=>{\n setPositioningStyles();\n});\n const containerWindow=(0,utils_ownerWindow.A)(anchorEl);\n containerWindow.addEventListener('resize',handleResize);\n return ()=>{\n handleResize.clear();\n containerWindow.removeEventListener('resize',handleResize);\n};\n},[anchorEl,open,setPositioningStyles]);\n let transitionDuration=transitionDurationProp;\n if (transitionDurationProp==='auto' && !TransitionComponent.muiSupportAuto){\n transitionDuration=undefined;\n}\n\n // If the container prop is provided,use that\n // If the anchorEl prop is provided,use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n const container=containerProp || (anchorEl ? (0,ownerDocument.A)(resolveAnchorEl(anchorEl)).body :undefined);\n const RootSlot=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :PopoverRoot;\n const PaperSlot=(_slots$paper=slots==null ? void 0 :slots.paper) !=null ? _slots$paper :PopoverPaper;\n const paperProps=useSlotProps_useSlotProps({\n elementType:PaperSlot,\n externalSlotProps:(0,esm_extends.A)({},externalPaperSlotProps,{\n style:isPositioned ? externalPaperSlotProps.style :(0,esm_extends.A)({},externalPaperSlotProps.style,{\n opacity:0\n})\n}),\n additionalProps:{\n elevation,\n ref:handlePaperRef\n},\n ownerState,\n className:(0,clsx.A)(classes.paper,externalPaperSlotProps==null ? void 0:externalPaperSlotProps.className)\n});\n const _useSlotProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:(slotProps==null ? void 0 :slotProps.root) ||{},\n externalForwardedProps:other,\n additionalProps:{\n ref,\n slotProps:{\n backdrop:{\n invisible:true\n}\n},\n container,\n open\n},\n ownerState,\n className:(0,clsx.A)(classes.root,className)\n}),\n{\n slotProps:rootSlotPropsProp\n}=_useSlotProps,\n rootProps=(0,objectWithoutPropertiesLoose.A)(_useSlotProps,_excluded3);,rootProps,!isHostComponent_isHostComponent(RootSlot) &&{\n slotProps:rootSlotPropsProp,\n disableScrollLock\n},{\n children:(0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n appear:true,\n in:open,\n onEntering:handleEntering,\n onExited:handleExited,\n timeout:transitionDuration\n},TransitionProps,{\n children:(0,jsx_runtime.jsx)(PaperSlot,(0,esm_extends.A)({},paperProps,{\n children:children\n}))\n}))\n}));\n});\n false ? 0 :void 0;\n const Popover_Popover=(Popover);\n;// ./node_modules/@mui/material/Menu/menuClasses.js\n\n\nfunction getMenuUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiMenu',slot);\n}\nconst menuClasses=(0,generateUtilityClasses.A)('MuiMenu',['root','paper','list']);\n const Menu_menuClasses=((null && (menuClasses)));\n;// ./node_modules/@mui/material/Menu/Menu.js\n'use client';\n\n\n\nconst Menu_excluded=[\"onEntering\"],\n Menu_excluded2=[\"autoFocus\",\"children\",\"className\",\"disableAutoFocusItem\",\"MenuListProps\",\"onClose\",\"open\",\"PaperProps\",\"PopoverClasses\",\"transitionDuration\",\"TransitionProps\",\"variant\",\"slots\",\"slotProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RTL_ORIGIN={\n vertical:'top',\n horizontal:'right'\n};\nconst LTR_ORIGIN={\n vertical:'top',\n horizontal:'left'\n};\nconst Menu_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root'],\n paper:['paper'],\n list:['list']\n};\n return (0,composeClasses.A)(slots,getMenuUtilityClass,classes);\n};\nconst MenuRoot=(0,styled.Ay)(Popover_Popover,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiMenu',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\nconst MenuPaper=(0,styled.Ay)(PopoverPaper,{\n name:'MuiMenu',\n slot:'Paper',\n overridesResolver:(props,styles)=>styles.paper\n})({\n // specZ:The maximum height of a simple menu should be one or more rows less than the view\n // height. This ensures a tappable area outside of the simple menu with which to dismiss\n // the menu.\n maxHeight:'calc(100% - 96px)',\n // Add iOS momentum scrolling for iOS < 13.0\n WebkitOverflowScrolling:'touch'\n});\nconst MenuMenuList=(0,styled.Ay)(MenuList_MenuList,{\n name:'MuiMenu',\n slot:'List',\n overridesResolver:(props,styles)=>styles.list\n})({\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0\n});\nconst Menu=external_React_.forwardRef(function Menu(inProps,ref){\n var _slots$paper,_slotProps$paper;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiMenu'\n});\n const{\n autoFocus=true,\n children,\n className,\n disableAutoFocusItem=false,\n MenuListProps={},\n PopoverClasses,\n transitionDuration='auto',\n TransitionProps:{\n onEntering\n}\n}=props,\n TransitionProps=(0,objectWithoutPropertiesLoose.A)(props.TransitionProps,Menu_excluded),\n other=(0,objectWithoutPropertiesLoose.A)(props,Menu_excluded2);\n const isRtl=useRtl();,props,{\n autoFocus,\n disableAutoFocusItem,\n MenuListProps,\n onEntering,\n PaperProps,\n transitionDuration,\n TransitionProps,\n variant\n});\n const classes=Menu_useUtilityClasses(ownerState);\n const autoFocusItem=autoFocus && !disableAutoFocusItem && open;\n const menuListActionsRef=external_React_.useRef(null);\n const handleEntering=(element,isAppearing)=>{\n if (menuListActionsRef.current){\n menuListActionsRef.current.adjustStyleForScrollbar(element,{\n direction:isRtl ? 'rtl':'ltr'\n});\n}\n if (onEntering){\n onEntering(element,isAppearing);\n}\n};\n const handleListKeyDown=event=>{\n if (event.key==='Tab'){\n event.preventDefault();\n if (onClose){\n onClose(event,'tabKeyDown');\n}\n}\n};\n\n \n let activeItemIndex=-1;\n // since we inject focus related props into children we have to do a lookahead\n // to check if there is a `selected` item. We're looking for the last `selected`\n // item and use the first valid item as a fallback\n external_React_.Children.map(children,(child,index)=>{\n if (! external_React_.isValidElement(child)){\n return;\n}\n if (!child.props.disabled){\n if (variant==='selectedMenu' && child.props.selected){\n activeItemIndex=index;\n}else if (activeItemIndex===-1){\n activeItemIndex=index;\n}\n}\n});\n const PaperSlot=(_slots$paper=slots.paper) !=null ? _slots$paper :MenuPaper;\n const paperExternalSlotProps=(_slotProps$paper=slotProps.paper) !=null ? _slotProps$paper :PaperProps;\n const rootSlotProps=useSlotProps_useSlotProps({\n elementType:slots.root,\n externalSlotProps:slotProps.root,\n ownerState,\n className:[classes.root,className]\n});\n const paperSlotProps=useSlotProps_useSlotProps({\n elementType:PaperSlot,\n externalSlotProps:paperExternalSlotProps,\n ownerState,\n className:classes.paper\n});\n return (0,jsx_runtime.jsx)(MenuRoot,(0,esm_extends.A)({\n onClose:onClose,\n anchorOrigin:{\n vertical:'bottom',\n horizontal:isRtl ? 'right':'left'\n},\n transformOrigin:isRtl ? RTL_ORIGIN :LTR_ORIGIN,\n slots:{\n paper:PaperSlot,\n root:slots.root\n},\n slotProps:{\n root:rootSlotProps,\n paper:paperSlotProps\n},\n open:open,\n ref:ref,\n transitionDuration:transitionDuration,\n TransitionProps:(0,esm_extends.A)({\n onEntering:handleEntering\n},TransitionProps),\n ownerState:ownerState\n},other,{\n classes:PopoverClasses,\n children:(0,jsx_runtime.jsx)(MenuMenuList,(0,esm_extends.A)({\n onKeyDown:handleListKeyDown,\n actions:menuListActionsRef,\n autoFocus:autoFocus && (activeItemIndex===-1 || disableAutoFocusItem),\n autoFocusItem:autoFocusItem,\n variant:variant\n},MenuListProps,{\n className:(0,clsx.A)(classes.list,MenuListProps.className),\n children:children\n}))\n}));\n});\n false ? 0 :void 0;\n const Menu_Menu=(Menu);\n;// ./node_modules/@mui/material/NativeSelect/nativeSelectClasses.js\n\n\nfunction getNativeSelectUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiNativeSelect',slot);\n}\nconst nativeSelectClasses=(0,generateUtilityClasses.A)('MuiNativeSelect',['root','select','multiple','filled','outlined','standard','disabled','icon','iconOpen','iconFilled','iconOutlined','iconStandard','nativeInput','error']);\n const NativeSelect_nativeSelectClasses=(nativeSelectClasses);\n;// ./node_modules/@mui/material/NativeSelect/NativeSelectInput.js\n'use client';\n\n\n\nconst NativeSelectInput_excluded=[\"className\",\"disabled\",\"error\",\"IconComponent\",\"inputRef\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\nconst NativeSelectInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n disabled,\n multiple,\n open,\n error\n}=ownerState;\n const slots={\n select:['select',variant,disabled && 'disabled',multiple && 'multiple',error && 'error'],\n icon:['icon',`icon${(0,capitalize.A)(variant)}`,open && 'iconOpen',disabled && 'disabled']\n};\n return (0,composeClasses.A)(slots,getNativeSelectUtilityClasses,classes);\n};\nconst nativeSelectSelectStyles=({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n MozAppearance:'none',\n // Reset\n WebkitAppearance:'none',\n // Reset\n // When interacting quickly,the text can end up selected.\n // Native select can't be selected either.\n userSelect:'none',\n borderRadius:0,\n // Reset\n cursor:'pointer',\n '&:focus':(0,esm_extends.A)({},theme.vars ?{\n backgroundColor:`rgba(${theme.vars.palette.common.onBackgroundChannel}/ .05)`\n}:{\n backgroundColor:theme.palette.mode==='light' ? 'rgba(0,0,0,.05)':'rgba(255,255,255,.05)'\n},{\n borderRadius:0 // Reset Chrome style\n}),\n // Remove IE11 arrow\n '&::-ms-expand':{\n display:'none'\n},\n [`&.${NativeSelect_nativeSelectClasses.disabled}`]:{\n cursor:'default'\n},\n '&[multiple]':{\n height:'auto'\n},\n '&:not([multiple]) option,&:not([multiple]) optgroup':{\n backgroundColor:(theme.vars || theme).palette.background.paper\n},\n // Bump specificity to allow extending custom inputs\n '&&&':{\n paddingRight:24,\n minWidth:16 // So it doesn't collapse.\n}\n},ownerState.variant==='filled' &&{\n '&&&':{\n paddingRight:32\n}\n},ownerState.variant==='outlined' &&{\n borderRadius:(theme.vars || theme).shape.borderRadius,\n '&:focus':{\n borderRadius:(theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style\n},\n '&&&':{\n paddingRight:32\n}\n});\nconst NativeSelectSelect=(0,styled.Ay)('select',{\n name:'MuiNativeSelect',\n slot:'Select',\n shouldForwardProp:rootShouldForwardProp.A,\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.select,styles[ownerState.variant],ownerState.error && styles.error,{\n [`&.${NativeSelect_nativeSelectClasses.multiple}`]:styles.multiple\n}];\n}\n})(nativeSelectSelectStyles);\nconst nativeSelectIconStyles=({\n ownerState,\n theme\n})=>(0,esm_extends.A)({\n // We use a position absolute over a flexbox in order to forward the pointer events\n // to the input and to support wrapping tags..\n position:'absolute',\n right:0,\n top:'calc(50% - .5em)',\n // Center vertically,height is 1em\n pointerEvents:'none',\n // Don't block pointer events on the select under the icon.\n color:(theme.vars || theme).palette.action.active,\n [`&.${NativeSelect_nativeSelectClasses.disabled}`]:{\n color:(theme.vars || theme).palette.action.disabled\n}\n},ownerState.open &&{\n transform:'rotate(180deg)'\n},ownerState.variant==='filled' &&{\n right:7\n},ownerState.variant==='outlined' &&{\n right:7\n});\nconst NativeSelectIcon=(0,styled.Ay)('svg',{\n name:'MuiNativeSelect',\n slot:'Icon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.icon,ownerState.variant && styles[`icon${(0,capitalize.A)(ownerState.variant)}`],ownerState.open && styles.iconOpen];\n}\n})(nativeSelectIconStyles);\n\n\nconst NativeSelectInput=external_React_.forwardRef(function NativeSelectInput(props,ref){\n const{\n className,\n disabled,\n error,\n IconComponent,\n inputRef,\n variant='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,NativeSelectInput_excluded);,props,{\n disabled,\n variant,\n error\n});\n const classes=NativeSelectInput_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(NativeSelectSelect,(0,esm_extends.A)({\n ownerState:ownerState,\n className:(0,clsx.A)(classes.select,className),\n disabled:disabled,\n ref:inputRef || ref\n},other)),props.multiple ? null :(0,jsx_runtime.jsx)(NativeSelectIcon,{\n as:IconComponent,\n ownerState:ownerState,\n className:classes.icon\n})]\n});\n});\n false ? 0 :void 0;\n const NativeSelect_NativeSelectInput=(NativeSelectInput);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/slotShouldForwardProp.js\nvar slotShouldForwardProp=__webpack_require__(4438);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useControlled.js\nvar useControlled=__webpack_require__(1159);\n;// ./node_modules/@mui/material/Select/selectClasses.js\n\n\nfunction getSelectUtilityClasses(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiSelect',slot);\n}\nconst selectClasses=(0,generateUtilityClasses.A)('MuiSelect',['root','select','multiple','filled','outlined','standard','disabled','focused','icon','iconOpen','iconFilled','iconOutlined','iconStandard','nativeInput','error']);\n const Select_selectClasses=(selectClasses);\n;// ./node_modules/@mui/material/Select/SelectInput.js\n'use client';\n\n\n\n\nvar SelectInput_span;\nconst SelectInput_excluded=[\"aria-describedby\",\"aria-label\",\"autoFocus\",\"autoWidth\",\"children\",\"className\",\"defaultOpen\",\"defaultValue\",\"disabled\",\"displayEmpty\",\"error\",\"IconComponent\",\"inputRef\",\"labelId\",\"MenuProps\",\"multiple\",\"name\",\"onBlur\",\"onChange\",\"onClose\",\"onFocus\",\"onOpen\",\"open\",\"readOnly\",\"renderValue\",\"SelectDisplayProps\",\"tabIndex\",\"type\",\"value\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SelectSelect=(0,styled.Ay)('div',{\n name:'MuiSelect',\n slot:'Select',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [\n // Win specificity over the input base\n{\n [`&.${Select_selectClasses.select}`]:styles.select\n},{\n [`&.${Select_selectClasses.select}`]:styles[ownerState.variant]\n},{\n [`&.${Select_selectClasses.error}`]:styles.error\n},{\n [`&.${Select_selectClasses.multiple}`]:styles.multiple\n}];\n}\n})(nativeSelectSelectStyles,{\n // Win specificity over the input base\n [`&.${Select_selectClasses.select}`]:{\n height:'auto',\n // Resets for multiple select with chips\n minHeight:'1.4375em',\n // Required for select\\text-field height consistency\n textOverflow:'ellipsis',\n whiteSpace:'nowrap',\n overflow:'hidden'\n}\n});\nconst SelectIcon=(0,styled.Ay)('svg',{\n name:'MuiSelect',\n slot:'Icon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.icon,ownerState.variant && styles[`icon${(0,capitalize.A)(ownerState.variant)}`],ownerState.open && styles.iconOpen];\n}\n})(nativeSelectIconStyles);\nconst SelectNativeInput=(0,styled.Ay)('input',{\n shouldForwardProp:prop=>(0,slotShouldForwardProp.A)(prop) && prop !=='classes',\n name:'MuiSelect',\n slot:'NativeInput',\n overridesResolver:(props,styles)=>styles.nativeInput\n})({\n bottom:0,\n left:0,\n position:'absolute',\n opacity:0,\n pointerEvents:'none',\n width:'100%',\n boxSizing:'border-box'\n});\nfunction areEqualValues(a,b){\n if (typeof b==='object' && b !==null){\n return a===b;\n}\n\n // The value could be a number,the DOM will stringify it anyway.\n return String(a)===String(b);\n}\nfunction SelectInput_isEmpty(display){\n return display==null || typeof display==='string' && !display.trim();\n}\nconst SelectInput_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n disabled,\n multiple,\n open,\n error\n}=ownerState;\n const slots={\n select:['select',variant,disabled && 'disabled',multiple && 'multiple',error && 'error'],\n icon:['icon',`icon${(0,capitalize.A)(variant)}`,open && 'iconOpen',disabled && 'disabled'],\n nativeInput:['nativeInput']\n};\n return (0,composeClasses.A)(slots,getSelectUtilityClasses,classes);\n};\n\n\nconst SelectInput=external_React_.forwardRef(function SelectInput(props,ref){\n var _MenuProps$slotProps;\n const{\n 'aria-describedby':ariaDescribedby,\n 'aria-label':ariaLabel,\n autoFocus,\n autoWidth,\n children,\n className,\n defaultOpen,\n defaultValue,\n disabled,\n displayEmpty,\n error=false,\n IconComponent,\n inputRef:inputRefProp,\n labelId,\n MenuProps={},\n tabIndex:tabIndexProp\n // catching `type` from Input which makes no sense for SelectInput\n,\n\n value:valueProp,\n variant='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,SelectInput_excluded);\n const [value,setValueState]=(0,useControlled.A)({\n controlled:valueProp,\n default:defaultValue,\n name:'Select'\n});\n const [openState,setOpenState]=(0,useControlled.A)({\n controlled:openProp,\n default:defaultOpen,\n name:'Select'\n});\n const inputRef=external_React_.useRef(null);\n const displayRef=external_React_.useRef(null);\n const [displayNode,setDisplayNode]=external_React_.useState(null);\n const{\n current:isOpenControlled\n}=external_React_.useRef(openProp !=null);\n const [menuMinWidthState,setMenuMinWidthState]=external_React_.useState();\n const handleRef=(0,utils_useForkRef.A)(ref,inputRefProp);\n const handleDisplayRef=external_React_.useCallback(node=>{\n displayRef.current=node;\n if (node){\n setDisplayNode(node);\n}\n},[]);\n const anchorElement=displayNode==null ? void 0 :displayNode.parentNode;\n external_React_.useImperativeHandle(handleRef,()=>({\n focus:()=>{\n displayRef.current.focus();\n},\n node:inputRef.current,\n value\n}),[value]);\n\n // Resize menu on `defaultOpen` automatic toggle.\n external_React_.useEffect(()=>{\n if (defaultOpen && openState && displayNode && !isOpenControlled){\n setMenuMinWidthState(autoWidth ? null:anchorElement.clientWidth);\n displayRef.current.focus();\n}\n // eslint-disable-next-line react-hooks/exhaustive-deps\n},[displayNode,autoWidth]);\n // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.\n // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.\n external_React_.useEffect(()=>{\n if (autoFocus){\n displayRef.current.focus();\n}\n},[autoFocus]);\n external_React_.useEffect(()=>{\n if (!labelId){\n return undefined;\n}\n const label=(0,ownerDocument.A)(displayRef.current).getElementById(labelId);\n if (label){\n const handler=()=>{\n if (getSelection().isCollapsed){\n displayRef.current.focus();\n}\n};\n label.addEventListener('click',handler);\n return ()=>{\n label.removeEventListener('click',handler);\n};\n}\n return undefined;\n},[labelId]);\n const update=(open,event)=>{\n if (open){\n if (onOpen){\n onOpen(event);\n}\n}else if (onClose){\n onClose(event);\n}\n if (!isOpenControlled){\n setMenuMinWidthState(autoWidth ? null:anchorElement.clientWidth);\n setOpenState(open);\n}\n};\n const handleMouseDown=event=>{\n // Ignore everything but left-click\n if (event.button !==0){\n return;\n}\n // Hijack the default focus behavior.\n event.preventDefault();\n displayRef.current.focus();\n update(true,event);\n};\n const handleClose=event=>{\n update(false,event);\n};\n const childrenArray=external_React_.Children.toArray(children);\n\n // Support autofill.\n const handleChange=event=>{\n const child=childrenArray.find(childItem=>childItem.props.value===event.target.value);\n if (child===undefined){\n return;\n}\n setValueState(child.props.value);\n if (onChange){\n onChange(event,child);\n}\n};\n const handleItemClick=child=>event=>{\n let newValue;\n\n // We use the tabindex attribute to signal the available options.\n if (!event.currentTarget.hasAttribute('tabindex')){\n return;\n}\n if (multiple){\n newValue=Array.isArray(value) ? value.slice() :[];\n const itemIndex=value.indexOf(child.props.value);\n if (itemIndex===-1){\n newValue.push(child.props.value);\n}else{\n newValue.splice(itemIndex,1);\n}\n}else{\n newValue=child.props.value;\n}\n if (child.props.onClick){\n child.props.onClick(event);\n}\n if (value !==newValue){\n setValueState(newValue);\n if (onChange){\n // Redefine target to allow name and value to be read.\n // This allows seamless integration with the most popular form libraries.\n // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n // Clone the event to not override `target` of the original event.\n const nativeEvent=event.nativeEvent || event;\n const clonedEvent=new nativeEvent.constructor(nativeEvent.type,nativeEvent);\n Object.defineProperty(clonedEvent,'target',{\n writable:true,\n value:{\n value:newValue,\n name\n}\n});\n onChange(clonedEvent,child);\n}\n}\n if (!multiple){\n update(false,event);\n}\n};\n const handleKeyDown=event=>{\n if (!readOnly){\n const validKeys=[' ','ArrowUp','ArrowDown',\n // The native select doesn't respond to enter on macOS,but it's recommended by\n // http://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n 'Enter'];\n if (validKeys.indexOf(event.key) !==-1){\n event.preventDefault();\n update(true,event);\n}\n}\n};\n const open=displayNode !==null && openState;\n const handleBlur=event=>{\n // if open event.stopImmediatePropagation\n if (!open && onBlur){\n // Preact support,target is read only property on a native event.\n Object.defineProperty(event,'target',{\n writable:true,\n value:{\n value,\n name\n}\n});\n onBlur(event);\n}\n};\n delete other['aria-invalid'];\n let display;\n let displaySingle;\n const displayMultiple=[];\n let computeDisplay=false;\n let foundMatch=false;\n\n // No need to display any value if the field is empty.\n if (isFilled({\n value\n}) || displayEmpty){\n if (renderValue){\n display=renderValue(value);\n}else{\n computeDisplay=true;\n}\n}\n const items=childrenArray.map(child=>{\n if (! external_React_.isValidElement(child)){\n return null;\n}\n let selected;\n if (multiple){\n if (!Array.isArray(value)){\n throw new Error(false ? 0:(0,formatMuiErrorMessage.A)(2));\n}\n selected=value.some(v=>areEqualValues(v,child.props.value));\n if (selected && computeDisplay){\n displayMultiple.push(child.props.children);\n}\n}else{\n selected=areEqualValues(value,child.props.value);\n if (selected && computeDisplay){\n displaySingle=child.props.children;\n}\n}\n if (selected){\n foundMatch=true;\n}\n return external_React_.cloneElement(child,{\n 'aria-selected':selected ? 'true' :'false',\n onClick:handleItemClick(child),\n onKeyUp:event=>{\n if (event.key===' '){\n // otherwise our MenuItems dispatches a click event\n // it's not behavior of the native <option>and causes\n // the select to close immediately since we open on space keydown\n event.preventDefault();\n}\n if (child.props.onKeyUp){\n child.props.onKeyUp(event);\n}\n},\n role:'option',\n selected,\n value:undefined,\n // The value is most likely not a valid HTML attribute.\n 'data-value':child.props.value // Instead,we provide it as a data attribute.\n});\n});\n if (computeDisplay){\n if (multiple){\n if (displayMultiple.length===0){\n display=null;\n}else{\n display=displayMultiple.reduce((output,child,index)=>{\n output.push(child);\n if (index < displayMultiple.length - 1){\n output.push(',');\n}\n return output;\n},[]);\n}\n}else{\n display=displaySingle;\n}\n}\n\n // Avoid performing a layout computation in the render method.\n let menuMinWidth=menuMinWidthState;\n if (!autoWidth && isOpenControlled && displayNode){\n menuMinWidth=anchorElement.clientWidth;\n}\n let tabIndex;\n if (typeof tabIndexProp !=='undefined'){\n tabIndex=tabIndexProp;\n}else{\n tabIndex=disabled ? null:0;\n}\n const buttonId=SelectDisplayProps.id || (name ? `mui-component-select-${name}` :undefined);,props,{\n variant,\n value,\n open,\n error\n});\n const classes=SelectInput_useUtilityClasses(ownerState);,MenuProps.PaperProps,(_MenuProps$slotProps=MenuProps.slotProps)==null ? void 0 :_MenuProps$slotProps.paper);\n const listboxId=(0,useId.A)();\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[(0,jsx_runtime.jsx)(SelectSelect,(0,esm_extends.A)({\n ref:handleDisplayRef,\n tabIndex:tabIndex,\n role:\"combobox\",\n \"aria-controls\":listboxId,\n \"aria-disabled\":disabled ? 'true':undefined,\n \"aria-expanded\":open ? 'true':'false',\n \"aria-haspopup\":\"listbox\",\n \"aria-label\":ariaLabel,\n \"aria-labelledby\":[labelId,buttonId].filter(Boolean).join(' ') || undefined,\n \"aria-describedby\":ariaDescribedby,\n onKeyDown:handleKeyDown,\n onMouseDown:disabled || readOnly ? null:handleMouseDown,\n onBlur:handleBlur,\n onFocus:onFocus\n},SelectDisplayProps,{\n ownerState:ownerState,\n className:(0,clsx.A)(SelectDisplayProps.className,classes.select,className)\n // The id is required for proper a11y\n,\n id:buttonId,\n children:SelectInput_isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue\n SelectInput_span || (SelectInput_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n})):display\n})),(0,jsx_runtime.jsx)(SelectNativeInput,(0,esm_extends.A)({\n \"aria-invalid\":error,\n value:Array.isArray(value) ? value.join(','):value,\n name:name,\n ref:inputRef,\n \"aria-hidden\":true,\n onChange:handleChange,\n tabIndex:-1,\n disabled:disabled,\n className:classes.nativeInput,\n autoFocus:autoFocus,\n ownerState:ownerState\n},other)),(0,jsx_runtime.jsx)(SelectIcon,{\n as:IconComponent,\n className:classes.icon,\n ownerState:ownerState\n}),(0,jsx_runtime.jsx)(Menu_Menu,(0,esm_extends.A)({\n id:`menu-${name || ''}`,\n anchorEl:anchorElement,\n open:open,\n onClose:handleClose,\n anchorOrigin:{\n vertical:'bottom',\n horizontal:'center'\n},\n transformOrigin:{\n vertical:'top',\n horizontal:'center'\n}\n},MenuProps,{\n MenuListProps:(0,esm_extends.A)({\n 'aria-labelledby':labelId,\n role:'listbox',\n 'aria-multiselectable':multiple ? 'true':undefined,\n disableListWrap:true,\n id:listboxId\n},MenuProps.slotProps,{\n paper:(0,esm_extends.A)({},paperProps,{\n style:(0,esm_extends.A)({\n minWidth:menuMinWidth\n},paperProps !=null ? paperProps.style:null)\n})\n}),\n children:items\n}))]\n});\n});\n false ? 0 :void 0;\n const Select_SelectInput=(SelectInput);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/createSvgIcon.js\nvar createSvgIcon=__webpack_require__(561);\n;// ./node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js\n'use client';\n\n\n\n\n\n\n const ArrowDropDown=((0,createSvgIcon.A)((0,jsx_runtime.jsx)(\"path\",{\n d:\"M7 10l5 5 5-5z\"\n}),'ArrowDropDown'));\n;// ./node_modules/@mui/material/Select/Select.js\n'use client';\n\n\n\nconst Select_excluded=[\"autoWidth\",\"children\",\"classes\",\"className\",\"defaultOpen\",\"displayEmpty\",\"IconComponent\",\"id\",\"input\",\"inputProps\",\"label\",\"labelId\",\"MenuProps\",\"multiple\",\"native\",\"onClose\",\"onOpen\",\"open\",\"renderValue\",\"SelectDisplayProps\",\"variant\"],\n Select_excluded2=[\"root\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Select_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n return classes;\n};\nconst styledRootConfig={\n name:'MuiSelect',\n overridesResolver:(props,styles)=>styles.root,\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) && prop !=='variant',\n slot:'Root'\n};\nconst StyledInput=(0,styled.Ay)(Input_Input,styledRootConfig)('');\nconst StyledOutlinedInput=(0,styled.Ay)(OutlinedInput_OutlinedInput,styledRootConfig)('');\nconst StyledFilledInput=(0,styled.Ay)(FilledInput_FilledInput,styledRootConfig)('');\nconst Select=external_React_.forwardRef(function Select(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n name:'MuiSelect',\n props:inProps\n});\n const{\n autoWidth=false,\n children,\n classes:classesProp={},\n className,\n defaultOpen=false,\n displayEmpty=false,\n IconComponent=ArrowDropDown,\n id,\n input,\n inputProps,\n label,\n labelId,\n MenuProps,\n multiple=false,\n native=false,\n onClose,\n onOpen,\n open,\n renderValue,\n SelectDisplayProps,\n variant:variantProp='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Select_excluded);\n const inputComponent=native ? NativeSelect_NativeSelectInput :Select_SelectInput;\n const muiFormControl=useFormControl();\n const fcs=formControlState({\n props,\n muiFormControl,\n states:['variant','error']\n});\n const variant=fcs.variant || variantProp;,props,{\n variant,\n classes:classesProp\n});\n const classes=Select_useUtilityClasses(ownerState);\n const restOfClasses=(0,objectWithoutPropertiesLoose.A)(classes,Select_excluded2);\n const InputComponent=input ||{\n standard:(0,jsx_runtime.jsx)(StyledInput,{\n ownerState:ownerState\n}),\n outlined:(0,jsx_runtime.jsx)(StyledOutlinedInput,{\n label:label,\n ownerState:ownerState\n}),\n filled:(0,jsx_runtime.jsx)(StyledFilledInput,{\n ownerState:ownerState\n})\n}[variant];\n const inputComponentRef=(0,utils_useForkRef.A)(ref,getReactElementRef(InputComponent));\n return (0,jsx_runtime.jsx)(external_React_.Fragment,{\n children:external_React_.cloneElement(InputComponent,(0,esm_extends.A)({\n // Most of the logic is implemented in `SelectInput`.\n // The `Select` component is a simple API wrapper to expose something better to play with.\n inputComponent,\n inputProps:(0,esm_extends.A)({\n children,\n error:fcs.error,\n IconComponent,\n variant,\n type:undefined,\n // We render a select. We can ignore the type provided by the `Input`.\n multiple\n},native ?{\n id\n}:{\n autoWidth,\n defaultOpen,\n displayEmpty,\n labelId,\n MenuProps,\n onClose,\n onOpen,\n open,\n renderValue,\n SelectDisplayProps:(0,esm_extends.A)({\n id\n},SelectDisplayProps)\n},inputProps,{\n classes:inputProps ? (0,deepmerge.A)(restOfClasses,inputProps.classes):restOfClasses\n})\n},(multiple && native || displayEmpty) && variant==='outlined' ?{\n notched:true\n},{\n ref:inputComponentRef,\n className:(0,clsx.A)(InputComponent.props.className,className,classes.root)\n},!input &&{\n variant\n},other))\n});\n});\n false ? 0 :void 0;\nSelect.muiName='Select';\n const Select_Select=(Select);\n;// ./node_modules/@mui/material/TextField/textFieldClasses.js\n\n\nfunction getTextFieldUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTextField',slot);\n}\nconst textFieldClasses=(0,generateUtilityClasses.A)('MuiTextField',['root']);\n const TextField_textFieldClasses=((null && (textFieldClasses)));\n;// ./node_modules/@mui/material/TextField/TextField.js\n'use client';\n\n\n\nconst TextField_excluded=[\"autoComplete\",\"autoFocus\",\"children\",\"className\",\"color\",\"defaultValue\",\"disabled\",\"error\",\"FormHelperTextProps\",\"fullWidth\",\"helperText\",\"id\",\"InputLabelProps\",\"inputProps\",\"InputProps\",\"inputRef\",\"label\",\"maxRows\",\"minRows\",\"multiline\",\"name\",\"onBlur\",\"onChange\",\"onFocus\",\"placeholder\",\"required\",\"rows\",\"select\",\"SelectProps\",\"type\",\"value\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst variantComponent={\n standard:Input_Input,\n filled:FilledInput_FilledInput,\n outlined:OutlinedInput_OutlinedInput\n};\nconst TextField_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root']\n};\n return (0,composeClasses.A)(slots,getTextFieldUtilityClass,classes);\n};\nconst TextFieldRoot=(0,styled.Ay)(FormControl_FormControl,{\n name:'MuiTextField',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\n\n\nconst TextField=external_React_.forwardRef(function TextField(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTextField'\n});\n const{\n autoComplete,\n autoFocus=false,\n children,\n className,\n color='primary',\n defaultValue,\n disabled=false,\n error=false,\n FormHelperTextProps,\n fullWidth=false,\n helperText,\n id:idOverride,\n InputLabelProps,\n inputProps,\n InputProps,\n inputRef,\n label,\n maxRows,\n minRows,\n multiline=false,\n name,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n required=false,\n rows,\n select=false,\n SelectProps,\n type,\n value,\n variant='outlined'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TextField_excluded);,props,{\n autoFocus,\n color,\n disabled,\n error,\n fullWidth,\n multiline,\n required,\n select,\n variant\n});\n const classes=TextField_useUtilityClasses(ownerState);;\n if (variant==='outlined'){\n if (InputLabelProps && typeof InputLabelProps.shrink !=='undefined'){\n InputMore.notched=InputLabelProps.shrink;\n}\n InputMore.label=label;\n}\n if (select){\n // unset defaults from textbox inputs\n if (!SelectProps || !SelectProps.native){\n InputMore.id=undefined;\n}\n InputMore['aria-describedby']=undefined;\n}\n const id=(0,useId.A)(idOverride);\n const helperTextId=helperText && id ? `${id}-helper-text` :undefined;\n const inputLabelId=label && id ? `${id}-label` :undefined;\n const InputComponent=variantComponent[variant];\n const InputElement=(0,jsx_runtime.jsx)(InputComponent,(0,esm_extends.A)({\n \"aria-describedby\":helperTextId,\n autoComplete:autoComplete,\n autoFocus:autoFocus,\n defaultValue:defaultValue,\n fullWidth:fullWidth,\n multiline:multiline,\n name:name,\n rows:rows,\n maxRows:maxRows,\n minRows:minRows,\n type:type,\n value:value,\n id:id,\n inputRef:inputRef,\n onBlur:onBlur,\n onChange:onChange,\n onFocus:onFocus,\n placeholder:placeholder,\n inputProps:inputProps\n},InputMore,InputProps));\n return (0,jsx_runtime.jsxs)(TextFieldRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(classes.root,className),\n disabled:disabled,\n error:error,\n fullWidth:fullWidth,\n ref:ref,\n required:required,\n color:color,\n variant:variant,\n ownerState:ownerState\n},other,{\n children:[label !=null && label !=='' && (0,jsx_runtime.jsx)(InputLabel_InputLabel,(0,esm_extends.A)({\n htmlFor:id,\n id:inputLabelId\n},InputLabelProps,{\n children:label\n})),select ? (0,jsx_runtime.jsx)(Select_Select,(0,esm_extends.A)({\n \"aria-describedby\":helperTextId,\n id:id,\n labelId:inputLabelId,\n value:value,\n input:InputElement\n},SelectProps,{\n children:children\n})) :InputElement,helperText && (0,jsx_runtime.jsx)(FormHelperText_FormHelperText,(0,esm_extends.A)({\n id:helperTextId\n},FormHelperTextProps,{\n children:helperText\n}))]\n}));\n});\n false ? 0 :void 0;\n const TextField_TextField=(TextField);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEventCallback.js\nvar utils_useEventCallback=__webpack_require__(3034);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useIsFocusVisible.js\nvar useIsFocusVisible=__webpack_require__(8851);\n;// ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\nfunction _assertThisInitialized(e){\n if (void 0===e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\n\n;// ./node_modules/react-transition-group/esm/utils/ChildMapping.js\n\n\n\nfunction getChildMapping(children,mapFn){\n var mapper=function mapper(child){\n return mapFn && (0,external_React_.isValidElement)(child) ? mapFn(child):child;\n};\n\n var result=Object.create(null);\n if (children) external_React_.Children.map(children,function (c){\n return c;\n}).forEach(function (child){\n // run the map function here instead so that the key is the computed one\n result[child.key]=mapper(child);\n});\n return result;\n}\n\n\nfunction mergeChildMappings(prev,next){\n prev=prev ||{};;\n\n function getValueForKey(key){\n return key in next ? next[key]:prev[key];\n}// For each key of `next`,the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending=Object.create(null);\n var pendingKeys=[];\n\n for (var prevKey in prev){\n if (prevKey in next){\n if (pendingKeys.length){\n nextKeysPending[prevKey]=pendingKeys;\n pendingKeys=[];\n}\n}else{\n pendingKeys.push(prevKey);\n}\n}\n\n var i;;\n\n for (var nextKey in next){\n if (nextKeysPending[nextKey]){\n for (i=0;i < nextKeysPending[nextKey].length;i++){\n var pendingNextKey=nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]]=getValueForKey(pendingNextKey);\n}\n}\n\n childMapping[nextKey]=getValueForKey(nextKey);\n}// Finally,add the keys which didn't appear before any key in `next`\n\n\n for (i=0;i < pendingKeys.length;i++){\n childMapping[pendingKeys[i]]=getValueForKey(pendingKeys[i]);\n}\n\n return childMapping;\n}\n\nfunction getProp(child,prop,props){\n return props[prop] !=null ? props[prop]:child.props[prop];\n}\n\nfunction getInitialChildMapping(props,onExited){\n return getChildMapping(props.children,function (child){\n return (0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:true,\n appear:getProp(child,'appear',props),\n enter:getProp(child,'enter',props),\n exit:getProp(child,'exit',props)\n});\n});\n}\nfunction getNextChildMapping(nextProps,prevChildMapping,onExited){\n var nextChildMapping=getChildMapping(nextProps.children);\n var children=mergeChildMappings(prevChildMapping,nextChildMapping);\n Object.keys(children).forEach(function (key){\n var child=children[key];\n if (!(0,external_React_.isValidElement)(child)) return;\n var hasPrev=(key in prevChildMapping);\n var hasNext=(key in nextChildMapping);\n var prevChild=prevChildMapping[key];\n var isLeaving=(0,external_React_.isValidElement)(prevChild) && !prevChild.props.in;// item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)){\n // console.log('entering',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:true,\n exit:getProp(child,'exit',nextProps),\n enter:getProp(child,'enter',nextProps)\n});\n}else if (!hasNext && hasPrev && !isLeaving){\n // item is old (exiting)\n // console.log('leaving',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n in:false\n});\n}else if (hasNext && hasPrev && (0,external_React_.isValidElement)(prevChild)){\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged',key)\n children[key]=(0,external_React_.cloneElement)(child,{\n onExited:onExited.bind(null,child),\n in:prevChild.props.in,\n exit:getProp(child,'exit',nextProps),\n enter:getProp(child,'enter',nextProps)\n});\n}\n});\n return children;\n}\n;// ./node_modules/react-transition-group/esm/TransitionGroup.js\n\n\n\n\n\n\n\n\n\nvar values=Object.values || function (obj){\n return Object.keys(obj).map(function (k){\n return obj[k];\n});\n};\n\nvar defaultProps={\n component:'div',\n childFactory:function childFactory(child){\n return child;\n}\n};\n\n\nvar TransitionGroup=function (_React$Component){\n _inheritsLoose(TransitionGroup,_React$Component);\n\n function TransitionGroup(props,context){\n var _this;\n\n _this=_React$Component.call(this,props,context) || this;\n\n var handleExited=_this.handleExited.bind(_assertThisInitialized(_this));// Initial children should all be entering,dependent on appear\n\n\n _this.state={\n contextValue:{\n isMounting:true\n},\n handleExited:handleExited,\n firstRender:true\n};\n return _this;\n}\n\n var _proto=TransitionGroup.prototype;\n\n _proto.componentDidMount=function componentDidMount(){\n this.mounted=true;\n this.setState({\n contextValue:{\n isMounting:false\n}\n});\n};\n\n _proto.componentWillUnmount=function componentWillUnmount(){\n this.mounted=false;\n};\n\n TransitionGroup.getDerivedStateFromProps=function getDerivedStateFromProps(nextProps,_ref){\n var prevChildMapping=_ref.children,\n handleExited=_ref.handleExited,\n firstRender=_ref.firstRender;\n return{\n children:firstRender ? getInitialChildMapping(nextProps,handleExited):getNextChildMapping(nextProps,prevChildMapping,handleExited),\n firstRender:false\n};\n}// node is `undefined` when user provided `nodeRef` prop\n;\n\n _proto.handleExited=function handleExited(child,node){\n var currentChildMapping=getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited){\n child.props.onExited(node);\n}\n\n if (this.mounted){\n this.setState(function (state){\n var children=(0,esm_extends.A)({},state.children);\n\n delete children[child.key];\n return{\n children:children\n};\n});\n}\n};\n\n _proto.render=function render(){\n var _this$props=this.props,\n Component=_this$props.component,\n childFactory=_this$props.childFactory,\n props=(0,objectWithoutPropertiesLoose.A)(_this$props,[\"component\",\"childFactory\"]);\n\n var contextValue=this.state.contextValue;\n var children=values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component===null){\n return external_React_default().createElement(TransitionGroupContext.Provider,{\n value:contextValue\n},children);\n}\n\n return external_React_default().createElement(TransitionGroupContext.Provider,{\n value:contextValue\n},external_React_default().createElement(Component,props,children));\n};\n\n return TransitionGroup;\n}((external_React_default()).Component);;\nTransitionGroup.defaultProps=defaultProps;\n const esm_TransitionGroup=(TransitionGroup);\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-react.browser.esm.js\nvar emotion_react_browser_esm=__webpack_require__(7437);\n;// ./node_modules/@mui/material/ButtonBase/Ripple.js\n'use client';\n\n\n\n\n\n\n\nfunction Ripple(props){\n const{\n className,\n classes,\n pulsate=false,\n rippleX,\n rippleY,\n rippleSize,\n in:inProp,\n onExited,\n timeout\n}=props;\n const [leaving,setLeaving]=external_React_.useState(false);\n const rippleClassName=(0,clsx.A)(className,classes.ripple,classes.rippleVisible,pulsate && classes.ripplePulsate);\n const rippleStyles={\n width:rippleSize,\n height:rippleSize,\n top:-(rippleSize / 2)+rippleY,\n left:-(rippleSize / 2)+rippleX\n};\n const childClassName=(0,clsx.A)(classes.child,leaving && classes.childLeaving,pulsate && classes.childPulsate);\n if (!inProp && !leaving){\n setLeaving(true);\n}\n external_React_.useEffect(()=>{\n if (!inProp && onExited !=null){\n // react-transition-group#onExited\n const timeoutId=setTimeout(onExited,timeout);\n return ()=>{\n clearTimeout(timeoutId);\n};\n}\n return undefined;\n},[onExited,inProp,timeout]);\n return (0,jsx_runtime.jsx)(\"span\",{\n className:rippleClassName,\n style:rippleStyles,\n children:(0,jsx_runtime.jsx)(\"span\",{\n className:childClassName\n})\n});\n}\n false ? 0 :void 0;\n const ButtonBase_Ripple=(Ripple);\n;// ./node_modules/@mui/material/ButtonBase/touchRippleClasses.js\n\n\nfunction getTouchRippleUtilityClass(slot){\n return generateUtilityClass('MuiTouchRipple',slot);\n}\nconst touchRippleClasses=(0,generateUtilityClasses.A)('MuiTouchRipple',['root','ripple','rippleVisible','ripplePulsate','child','childLeaving','childPulsate']);\n const ButtonBase_touchRippleClasses=(touchRippleClasses);\n;// ./node_modules/@mui/material/ButtonBase/TouchRipple.js\n'use client';\n\n\n\nconst TouchRipple_excluded=[\"center\",\"classes\",\"className\"];\nlet _=t=>t,\n _t,\n _t2,\n _t3,\n _t4;\n\n\n\n\n\n\n\n\n\n\n\nconst DURATION=550;\nconst DELAY_RIPPLE=80;\nconst enterKeyframe=(0,emotion_react_browser_esm.i7)(_t || (_t=_`\n 0%{\n transform:scale(0);\n opacity:.1;\n}\n\n 100%{\n transform:scale(1);\n opacity:.3;\n}\n`));\nconst exitKeyframe=(0,emotion_react_browser_esm.i7)(_t2 || (_t2=_`\n 0%{\n opacity:1;\n}\n\n 100%{\n opacity:0;\n}\n`));\nconst pulsateKeyframe=(0,emotion_react_browser_esm.i7)(_t3 || (_t3=_`\n 0%{\n transform:scale(1);\n}\n\n 50%{\n transform:scale(.92);\n}\n\n 100%{\n transform:scale(1);\n}\n`));\nconst TouchRippleRoot=(0,styled.Ay)('span',{\n name:'MuiTouchRipple',\n slot:'Root'\n})({\n overflow:'hidden',\n pointerEvents:'none',\n position:'absolute',\n zIndex:0,\n top:0,\n right:0,\n bottom:0,\n left:0,\n borderRadius:'inherit'\n});\n\n// This `styled()` function invokes keyframes. `styled-components` only supports keyframes\n// in string templates. Do not convert these styles in JS object as it will break.\nconst TouchRippleRipple=(0,styled.Ay)(ButtonBase_Ripple,{\n name:'MuiTouchRipple',\n slot:'Ripple'\n})(_t4 || (_t4=_`\n opacity:0;\n position:absolute;\n\n &.${0}{\n opacity:.3;\n transform:scale(1);\n animation-name:${0};\n animation-duration:${0}ms;\n animation-timing-function:${0};\n}\n\n &.${0}{\n animation-duration:${0}ms;\n}\n\n & .${0}{\n opacity:1;\n display:block;\n width:100%;\n height:100%;\n border-radius:50%;\n background-color:currentColor;\n}\n\n & .${0}{\n opacity:0;\n animation-name:${0};\n animation-duration:${0}ms;\n animation-timing-function:${0};\n}\n\n & .${0}{\n position:absolute;\n \n left:0;\n top:0;\n animation-name:${0};\n animation-duration:2500ms;\n animation-timing-function:${0};\n animation-iteration-count:infinite;\n animation-delay:200ms;\n}\n`),ButtonBase_touchRippleClasses.rippleVisible,enterKeyframe,DURATION,({\n theme\n})=>theme.transitions.easing.easeInOut,ButtonBase_touchRippleClasses.ripplePulsate,({\n theme\n})=>theme.transitions.duration.shorter,ButtonBase_touchRippleClasses.child,ButtonBase_touchRippleClasses.childLeaving,exitKeyframe,DURATION,({\n theme\n})=>theme.transitions.easing.easeInOut,ButtonBase_touchRippleClasses.childPulsate,pulsateKeyframe,({\n theme\n})=>theme.transitions.easing.easeInOut);\n\n\nconst TouchRipple=external_React_.forwardRef(function TouchRipple(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTouchRipple'\n});\n const{\n center:centerProp=false,\n classes={},\n className\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,TouchRipple_excluded);\n const [ripples,setRipples]=external_React_.useState([]);\n const nextKey=external_React_.useRef(0);\n const rippleCallback=external_React_.useRef(null);\n external_React_.useEffect(()=>{\n if (rippleCallback.current){\n rippleCallback.current();\n rippleCallback.current=null;\n}\n},[ripples]);\n\n // Used to filter out mouse emulated events on mobile.\n const ignoringMouseDown=external_React_.useRef(false);\n // We use a timer in order to only show the ripples for touch \"click\" like events.\n // We don't want to display the ripple for touch scroll events.\n const startTimer=(0,useTimeout.A)();\n\n // This is the hook called once the previous timeout is ready.\n const startTimerCommit=external_React_.useRef(null);\n const container=external_React_.useRef(null);\n const startCommit=external_React_.useCallback(params=>{\n const{\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n}=params;\n setRipples(oldRipples=>[...oldRipples,(0,jsx_runtime.jsx)(TouchRippleRipple,{\n classes:{\n ripple:(0,clsx.A)(classes.ripple,ButtonBase_touchRippleClasses.ripple),\n rippleVisible:(0,clsx.A)(classes.rippleVisible,ButtonBase_touchRippleClasses.rippleVisible),\n ripplePulsate:(0,clsx.A)(classes.ripplePulsate,ButtonBase_touchRippleClasses.ripplePulsate),\n child:(0,clsx.A)(classes.child,ButtonBase_touchRippleClasses.child),\n childLeaving:(0,clsx.A)(classes.childLeaving,ButtonBase_touchRippleClasses.childLeaving),\n childPulsate:(0,clsx.A)(classes.childPulsate,ButtonBase_touchRippleClasses.childPulsate)\n},\n timeout:DURATION,\n pulsate:pulsate,\n rippleX:rippleX,\n rippleY:rippleY,\n rippleSize:rippleSize\n},nextKey.current)]);\n nextKey.current+=1;\n rippleCallback.current=cb;\n},[classes]);)=>{\n const{\n pulsate=false,\n center=centerProp || options.pulsate,\n fakeElement=false // For test purposes\n}=options;\n if ((event==null ? void 0 :event.type)==='mousedown' && ignoringMouseDown.current){\n ignoringMouseDown.current=false;\n return;\n}\n if ((event==null ? void 0 :event.type)==='touchstart'){\n ignoringMouseDown.current=true;\n}\n const element=fakeElement ? null :container.current;\n const rect=element ? element.getBoundingClientRect() :{\n width:0,\n height:0,\n left:0,\n top:0\n};\n\n // Get the size of the ripple\n let rippleX;\n let rippleY;\n let rippleSize;\n if (center || event===undefined || event.clientX===0 && event.clientY===0 || !event.clientX && !event.touches){\n rippleX=Math.round(rect.width / 2);\n rippleY=Math.round(rect.height / 2);\n}else{\n const{\n clientX,\n clientY\n}=event.touches && event.touches.length>0 ? event.touches[0]:event;\n rippleX=Math.round(clientX - rect.left);\n rippleY=Math.round(clientY - rect.top);\n}\n if (center){\n rippleSize=Math.sqrt((2 * rect.width ** 2+rect.height ** 2) / 3);\n\n // For some reason the animation is broken on Mobile Chrome if the size is even.\n if (rippleSize % 2===0){\n rippleSize+=1;\n}\n}else{\n const sizeX=Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2+2;\n const sizeY=Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2+2;\n rippleSize=Math.sqrt(sizeX ** 2+sizeY ** 2);\n}\n\n // Touche devices\n if (event !=null && event.touches){\n // check that this isn't another touchstart due to multitouch\n // otherwise we will only clear a single timer when unmounting while two\n // are running\n if (startTimerCommit.current===null){\n // Prepare the ripple effect.\n startTimerCommit.current=()=>{\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n});\n};\n // Delay the execution of the ripple effect.\n // We have to make a tradeoff with this delay value.\n startTimer.start(DELAY_RIPPLE,()=>{\n if (startTimerCommit.current){\n startTimerCommit.current();\n startTimerCommit.current=null;\n}\n});\n}\n}else{\n startCommit({\n pulsate,\n rippleX,\n rippleY,\n rippleSize,\n cb\n});\n}\n},[centerProp,startCommit,startTimer]);\n const pulsate=external_React_.useCallback(()=>{\n start({},{\n pulsate:true\n});\n},[start]);\n const stop=external_React_.useCallback((event,cb)=>{\n startTimer.clear();\n\n // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n if ((event==null ? void 0 :event.type)==='touchend' && startTimerCommit.current){\n startTimerCommit.current();\n startTimerCommit.current=null;\n startTimer.start(0,()=>{\n stop(event,cb);\n});\n return;\n}\n startTimerCommit.current=null;\n setRipples(oldRipples=>{\n if (oldRipples.length>0){\n return oldRipples.slice(1);\n}\n return oldRipples;\n});\n rippleCallback.current=cb;\n},[startTimer]);\n external_React_.useImperativeHandle(ref,()=>({\n pulsate,\n start,\n stop\n}),[pulsate,start,stop]);\n return (0,jsx_runtime.jsx)(TouchRippleRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(ButtonBase_touchRippleClasses.root,classes.root,className),\n ref:container\n},other,{\n children:(0,jsx_runtime.jsx)(esm_TransitionGroup,{\n component:null,\n exit:true,\n children:ripples\n})\n}));\n});\n false ? 0 :void 0;\n const ButtonBase_TouchRipple=(TouchRipple);\n;// ./node_modules/@mui/material/ButtonBase/buttonBaseClasses.js\n\n\nfunction getButtonBaseUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiButtonBase',slot);\n}\nconst buttonBaseClasses=(0,generateUtilityClasses.A)('MuiButtonBase',['root','disabled','focusVisible']);\n const ButtonBase_buttonBaseClasses=(buttonBaseClasses);\n;// ./node_modules/@mui/material/ButtonBase/ButtonBase.js\n'use client';\n\n\n\nconst ButtonBase_excluded=[\"action\",\"centerRipple\",\"children\",\"className\",\"component\",\"disabled\",\"disableRipple\",\"disableTouchRipple\",\"focusRipple\",\"focusVisibleClassName\",\"LinkComponent\",\"onBlur\",\"onClick\",\"onContextMenu\",\"onDragLeave\",\"onFocus\",\"onFocusVisible\",\"onKeyDown\",\"onKeyUp\",\"onMouseDown\",\"onMouseLeave\",\"onMouseUp\",\"onTouchEnd\",\"onTouchMove\",\"onTouchStart\",\"tabIndex\",\"TouchRippleProps\",\"touchRippleRef\",\"type\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst ButtonBase_useUtilityClasses=ownerState=>{\n const{\n disabled,\n focusVisible,\n focusVisibleClassName,\n classes\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',focusVisible && 'focusVisible']\n};\n const composedClasses=(0,composeClasses.A)(slots,getButtonBaseUtilityClass,classes);\n if (focusVisible && focusVisibleClassName){\n composedClasses.root+=` ${focusVisibleClassName}`;\n}\n return composedClasses;\n};\nconst ButtonBaseRoot=(0,styled.Ay)('button',{\n name:'MuiButtonBase',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n})({\n display:'inline-flex',\n alignItems:'center',\n justifyContent:'center',\n position:'relative',\n boxSizing:'border-box',\n WebkitTapHighlightColor:'transparent',\n backgroundColor:'transparent',\n // Reset default value\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0,\n border:0,\n margin:0,\n // Remove the margin in Safari\n borderRadius:0,\n padding:0,\n // Remove the padding in Firefox\n cursor:'pointer',\n userSelect:'none',\n verticalAlign:'middle',\n MozAppearance:'none',\n // Reset\n WebkitAppearance:'none',\n // Reset\n textDecoration:'none',\n // So we take precedent over the style of a native <a />element.\n color:'inherit',\n '&::-moz-focus-inner':{\n borderStyle:'none' // Remove Firefox dotted outline.\n},\n [`&.${ButtonBase_buttonBaseClasses.disabled}`]:{\n pointerEvents:'none',\n // Disable link interactions\n cursor:'default'\n},\n '@media print':{\n colorAdjust:'exact'\n}\n});\n\n\nconst ButtonBase=external_React_.forwardRef(function ButtonBase(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiButtonBase'\n});\n const{\n action,\n centerRipple=false,\n children,\n className,\n component='button',\n disabled=false,\n disableRipple=false,\n disableTouchRipple=false,\n focusRipple=false,\n LinkComponent='a',\n onBlur,\n onClick,\n onContextMenu,\n onDragLeave,\n onFocus,\n onFocusVisible,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseUp,\n onTouchEnd,\n onTouchMove,\n onTouchStart,\n tabIndex=0,\n TouchRippleProps,\n touchRippleRef,\n type\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,ButtonBase_excluded);\n const buttonRef=external_React_.useRef(null);\n const rippleRef=external_React_.useRef(null);\n const handleRippleRef=(0,utils_useForkRef.A)(rippleRef,touchRippleRef);\n const{\n isFocusVisibleRef,\n onFocus:handleFocusVisible,\n onBlur:handleBlurVisible,\n ref:focusVisibleRef\n}=(0,useIsFocusVisible.A)();\n const [focusVisible,setFocusVisible]=external_React_.useState(false);\n if (disabled && focusVisible){\n setFocusVisible(false);\n}\n external_React_.useImperativeHandle(action,()=>({\n focusVisible:()=>{\n setFocusVisible(true);\n buttonRef.current.focus();\n}\n}),[]);\n const [mountedState,setMountedState]=external_React_.useState(false);\n external_React_.useEffect(()=>{\n setMountedState(true);\n},[]);\n const enableTouchRipple=mountedState && !disableRipple && !disabled;\n external_React_.useEffect(()=>{\n if (focusVisible && focusRipple && !disableRipple && mountedState){\n rippleRef.current.pulsate();\n}\n},[disableRipple,focusRipple,focusVisible,mountedState]);\n function useRippleHandler(rippleAction,eventCallback,skipRippleAction=disableTouchRipple){\n return (0,utils_useEventCallback.A)(event=>{\n if (eventCallback){\n eventCallback(event);\n}\n const ignore=skipRippleAction;\n if (!ignore && rippleRef.current){\n rippleRef.current[rippleAction](event);\n}\n return true;\n});\n}\n const handleMouseDown=useRippleHandler('start',onMouseDown);\n const handleContextMenu=useRippleHandler('stop',onContextMenu);\n const handleDragLeave=useRippleHandler('stop',onDragLeave);\n const handleMouseUp=useRippleHandler('stop',onMouseUp);\n const handleMouseLeave=useRippleHandler('stop',event=>{\n if (focusVisible){\n event.preventDefault();\n}\n if (onMouseLeave){\n onMouseLeave(event);\n}\n});\n const handleTouchStart=useRippleHandler('start',onTouchStart);\n const handleTouchEnd=useRippleHandler('stop',onTouchEnd);\n const handleTouchMove=useRippleHandler('stop',onTouchMove);\n const handleBlur=useRippleHandler('stop',event=>{\n handleBlurVisible(event);\n if (isFocusVisibleRef.current===false){\n setFocusVisible(false);\n}\n if (onBlur){\n onBlur(event);\n}\n},false);\n const handleFocus=(0,utils_useEventCallback.A)(event=>{\n // Fix for https://github.com/facebook/react/issues/7769\n if (!buttonRef.current){\n buttonRef.current=event.currentTarget;\n}\n handleFocusVisible(event);\n if (isFocusVisibleRef.current===true){\n setFocusVisible(true);\n if (onFocusVisible){\n onFocusVisible(event);\n}\n}\n if (onFocus){\n onFocus(event);\n}\n});\n const isNonNativeButton=()=>{\n const button=buttonRef.current;\n return component && component !=='button' && !(button.tagName==='A' && button.href);\n};\n\n \n const keydownRef=external_React_.useRef(false);\n const handleKeyDown=(0,utils_useEventCallback.A)(event=>{\n // Check if key is already down to avoid repeats being counted as multiple activations\n if (focusRipple && !keydownRef.current && focusVisible && rippleRef.current && event.key===' '){\n keydownRef.current=true;\n rippleRef.current.stop(event,()=>{\n rippleRef.current.start(event);\n});\n}\n if (event.target===event.currentTarget && isNonNativeButton() && event.key===' '){\n event.preventDefault();\n}\n if (onKeyDown){\n onKeyDown(event);\n}\n\n // Keyboard accessibility for non interactive elements\n if (event.target===event.currentTarget && isNonNativeButton() && event.key==='Enter' && !disabled){\n event.preventDefault();\n if (onClick){\n onClick(event);\n}\n}\n});\n const handleKeyUp=(0,utils_useEventCallback.A)(event=>{\n // calling preventDefault in keyUp on a <button>will not dispatch a click event if Space is pressed\n // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0\n if (focusRipple && event.key===' ' && rippleRef.current && focusVisible && !event.defaultPrevented){\n keydownRef.current=false;\n rippleRef.current.stop(event,()=>{\n rippleRef.current.pulsate(event);\n});\n}\n if (onKeyUp){\n onKeyUp(event);\n}\n\n // Keyboard accessibility for non interactive elements\n if (onClick && event.target===event.currentTarget && isNonNativeButton() && event.key===' ' && !event.defaultPrevented){\n onClick(event);\n}\n});\n let ComponentProp=component;\n if (ComponentProp==='button' && (other.href || other.to)){\n ComponentProp=LinkComponent;\n};\n if (ComponentProp==='button'){\n buttonProps.type=type===undefined ? 'button':type;\n buttonProps.disabled=disabled;\n}else{\n if (!other.href && !other.to){\n buttonProps.role='button';\n}\n if (disabled){\n buttonProps['aria-disabled']=disabled;\n}\n}\n const handleRef=(0,utils_useForkRef.A)(ref,focusVisibleRef,buttonRef);,props,{\n centerRipple,\n component,\n disabled,\n disableRipple,\n disableTouchRipple,\n focusRipple,\n tabIndex,\n focusVisible\n});\n const classes=ButtonBase_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(ButtonBaseRoot,(0,esm_extends.A)({\n as:ComponentProp,\n className:(0,clsx.A)(classes.root,className),\n ownerState:ownerState,\n onBlur:handleBlur,\n onClick:onClick,\n onContextMenu:handleContextMenu,\n onFocus:handleFocus,\n onKeyDown:handleKeyDown,\n onKeyUp:handleKeyUp,\n onMouseDown:handleMouseDown,\n onMouseLeave:handleMouseLeave,\n onMouseUp:handleMouseUp,\n onDragLeave:handleDragLeave,\n onTouchEnd:handleTouchEnd,\n onTouchMove:handleTouchMove,\n onTouchStart:handleTouchStart,\n ref:handleRef,\n tabIndex:disabled ? -1:tabIndex,\n type:type\n},buttonProps,other,{\n children:[children,enableTouchRipple ?\n \n \n (0,jsx_runtime.jsx)(ButtonBase_TouchRipple,(0,esm_extends.A)({\n ref:handleRippleRef,\n center:centerRipple\n},TouchRippleProps)):null]\n}));\n});\n false ? 0 :void 0;\n const ButtonBase_ButtonBase=(ButtonBase);\n;// ./node_modules/@mui/material/IconButton/iconButtonClasses.js\n\n\nfunction getIconButtonUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiIconButton',slot);\n}\nconst iconButtonClasses=(0,generateUtilityClasses.A)('MuiIconButton',['root','disabled','colorInherit','colorPrimary','colorSecondary','colorError','colorInfo','colorSuccess','colorWarning','edgeStart','edgeEnd','sizeSmall','sizeMedium','sizeLarge']);\n const IconButton_iconButtonClasses=(iconButtonClasses);\n;// ./node_modules/@mui/material/IconButton/IconButton.js\n'use client';\n\n\n\nconst IconButton_excluded=[\"edge\",\"children\",\"className\",\"color\",\"disabled\",\"disableFocusRipple\",\"size\"];\n\n\n\n\n\n\n\n\n\n\n\n\nconst IconButton_useUtilityClasses=ownerState=>{\n const{\n classes,\n disabled,\n color,\n edge,\n size\n}=ownerState;\n const slots={\n root:['root',disabled && 'disabled',color !=='default' && `color${(0,capitalize.A)(color)}`,edge && `edge${(0,capitalize.A)(edge)}`,`size${(0,capitalize.A)(size)}`]\n};\n return (0,composeClasses.A)(slots,getIconButtonUtilityClass,classes);\n};\nconst IconButtonRoot=(0,styled.Ay)(ButtonBase_ButtonBase,{\n name:'MuiIconButton',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.color !=='default' && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.edge && styles[`edge${(0,capitalize.A)(ownerState.edge)}`],styles[`size${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n textAlign:'center',\n flex:'0 0 auto',\n fontSize:theme.typography.pxToRem(24),\n padding:8,\n borderRadius:'50%',\n overflow:'visible',\n // Explicitly set the default value to solve a bug on IE11.\n color:(theme.vars || theme).palette.action.active,\n transition:theme.transitions.create('background-color',{\n duration:theme.transitions.duration.shortest\n})\n},!ownerState.disableRipple &&{\n '&:hover':{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.action.activeChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette.action.active,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n}\n},ownerState.edge==='start' &&{\n marginLeft:ownerState.size==='small' ? -3:-12\n},ownerState.edge==='end' &&{\n marginRight:ownerState.size==='small' ? -3:-12\n}),({\n theme,\n ownerState\n})=>{\n var _palette;\n const palette=(_palette=(theme.vars || theme).palette)==null ? void 0 :_palette[ownerState.color];,ownerState.color==='inherit' &&{\n color:'inherit'\n},ownerState.color !=='inherit' && ownerState.color !=='default' && (0,esm_extends.A)({\n color:palette==null ? void 0:palette.main\n},!ownerState.disableRipple &&{\n '&:hover':(0,esm_extends.A)({},palette &&{\n backgroundColor:theme.vars ? `rgba(${palette.mainChannel}/ ${theme.vars.palette.action.hoverOpacity})`:(0,colorManipulator.X4)(palette.main,theme.palette.action.hoverOpacity)\n},{\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n})\n}),ownerState.size==='small' &&{\n padding:5,\n fontSize:theme.typography.pxToRem(18)\n},ownerState.size==='large' &&{\n padding:12,\n fontSize:theme.typography.pxToRem(28)\n},{\n [`&.${IconButton_iconButtonClasses.disabled}`]:{\n backgroundColor:'transparent',\n color:(theme.vars || theme).palette.action.disabled\n}\n});\n});\n\n\nconst IconButton=external_React_.forwardRef(function IconButton(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiIconButton'\n});\n const{\n edge=false,\n children,\n className,\n color='default',\n disabled=false,\n disableFocusRipple=false,\n size='medium'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,IconButton_excluded);,props,{\n edge,\n color,\n disabled,\n disableFocusRipple,\n size\n});\n const classes=IconButton_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(IconButtonRoot,(0,esm_extends.A)({\n className:(0,clsx.A)(classes.root,className),\n centerRipple:true,\n focusRipple:!disableFocusRipple,\n disabled:disabled,\n ref:ref\n},other,{\n ownerState:ownerState,\n children:children\n}));\n});\n false ? 0 :void 0;\n const IconButton_IconButton=(IconButton);\n;// ./node_modules/@mui/utils/esm/usePreviousProps/usePreviousProps.js\n'use client';\n\n\nconst usePreviousProps=value=>{\n const ref=external_React_.useRef({});\n external_React_.useEffect(()=>{\n ref.current=value;\n});\n return ref.current;\n};\n const usePreviousProps_usePreviousProps=(usePreviousProps);\n;// ./node_modules/@mui/material/Badge/useBadge.js\n'use client';\n\n\n\nfunction useBadge(parameters){\n const{\n badgeContent:badgeContentProp,\n invisible:invisibleProp=false,\n max:maxProp=99,\n showZero=false\n}=parameters;\n const prevProps=usePreviousProps_usePreviousProps({\n badgeContent:badgeContentProp,\n max:maxProp\n});\n let invisible=invisibleProp;\n if (invisibleProp===false && badgeContentProp===0 && !showZero){\n invisible=true;\n}\n const{\n badgeContent,\n max=maxProp\n}=invisible ? prevProps :parameters;\n const displayValue=badgeContent && Number(badgeContent)>max ? `${max}+` :badgeContent;\n return{\n badgeContent,\n invisible,\n max,\n displayValue\n};\n}\n const Badge_useBadge=(useBadge);\n;// ./node_modules/@mui/material/Badge/badgeClasses.js\n\n\nfunction getBadgeUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiBadge',slot);\n}\nconst badgeClasses=(0,generateUtilityClasses.A)('MuiBadge',['root','badge','dot','standard','anchorOriginTopRight','anchorOriginBottomRight','anchorOriginTopLeft','anchorOriginBottomLeft','invisible','colorError','colorInfo','colorPrimary','colorSecondary','colorSuccess','colorWarning','overlapRectangular','overlapCircular',\n// TODO:v6 remove the overlap value from these class keys\n'anchorOriginTopLeftCircular','anchorOriginTopLeftRectangular','anchorOriginTopRightCircular','anchorOriginTopRightRectangular','anchorOriginBottomLeftCircular','anchorOriginBottomLeftRectangular','anchorOriginBottomRightCircular','anchorOriginBottomRightRectangular']);\n const Badge_badgeClasses=(badgeClasses);\n;// ./node_modules/@mui/material/Badge/Badge.js\n'use client';\n\n\n\nconst Badge_excluded=[\"anchorOrigin\",\"className\",\"classes\",\"component\",\"components\",\"componentsProps\",\"children\",\"overlap\",\"color\",\"invisible\",\"max\",\"badgeContent\",\"slots\",\"slotProps\",\"showZero\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst RADIUS_STANDARD=10;\nconst RADIUS_DOT=4;\nconst Badge_useUtilityClasses=ownerState=>{\n const{\n color,\n anchorOrigin,\n invisible,\n overlap,\n variant,\n classes={}\n}=ownerState;\n const slots={\n root:['root'],\n badge:['badge',variant,invisible && 'invisible',`anchorOrigin${(0,capitalize.A)(anchorOrigin.vertical)}${(0,capitalize.A)(anchorOrigin.horizontal)}`,`anchorOrigin${(0,capitalize.A)(anchorOrigin.vertical)}${(0,capitalize.A)(anchorOrigin.horizontal)}${(0,capitalize.A)(overlap)}`,`overlap${(0,capitalize.A)(overlap)}`,color !=='default' && `color${(0,capitalize.A)(color)}`]\n};\n return (0,composeClasses.A)(slots,getBadgeUtilityClass,classes);\n};\nconst BadgeRoot=(0,styled.Ay)('span',{\n name:'MuiBadge',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n})({\n position:'relative',\n display:'inline-flex',\n // For correct alignment with the text.\n verticalAlign:'middle',\n flexShrink:0\n});\nconst BadgeBadge=(0,styled.Ay)('span',{\n name:'MuiBadge',\n slot:'Badge',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.badge,styles[ownerState.variant],styles[`anchorOrigin${(0,capitalize.A)(ownerState.anchorOrigin.vertical)}${(0,capitalize.A)(ownerState.anchorOrigin.horizontal)}${(0,capitalize.A)(ownerState.overlap)}`],ownerState.color !=='default' && styles[`color${(0,capitalize.A)(ownerState.color)}`],ownerState.invisible && styles.invisible];\n}\n})(({\n theme\n})=>{\n var _theme$vars;\n return{\n display:'flex',\n flexDirection:'row',\n flexWrap:'wrap',\n justifyContent:'center',\n alignContent:'center',\n alignItems:'center',\n position:'absolute',\n boxSizing:'border-box',\n fontFamily:theme.typography.fontFamily,\n fontWeight:theme.typography.fontWeightMedium,\n fontSize:theme.typography.pxToRem(12),\n minWidth:RADIUS_STANDARD * 2,\n lineHeight:1,\n padding:'0 6px',\n height:RADIUS_STANDARD * 2,\n borderRadius:RADIUS_STANDARD,\n zIndex:1,\n // Render the badge on top of potential ripples.\n transition:theme.transitions.create('transform',{\n easing:theme.transitions.easing.easeInOut,\n duration:theme.transitions.duration.enteringScreen\n}),\n variants:[...Object.keys(((_theme$vars=theme.vars) !=null ? _theme$vars :theme).palette).filter(key=>{\n var _theme$vars2,_theme$vars3;\n return ((_theme$vars2=theme.vars) !=null ? _theme$vars2:theme).palette[key].main && ((_theme$vars3=theme.vars) !=null ? _theme$vars3:theme).palette[key].contrastText;\n}).map(color=>({\n props:{\n color\n},\n style:{\n backgroundColor:(theme.vars || theme).palette[color].main,\n color:(theme.vars || theme).palette[color].contrastText\n}\n})),{\n props:{\n variant:'dot'\n},\n style:{\n borderRadius:RADIUS_DOT,\n height:RADIUS_DOT * 2,\n minWidth:RADIUS_DOT * 2,\n padding:0\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='rectangular',\n style:{\n top:0,\n right:0,\n transform:'scale(1) translate(50%,-50%)',\n transformOrigin:'100% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='rectangular',\n style:{\n bottom:0,\n right:0,\n transform:'scale(1) translate(50%,50%)',\n transformOrigin:'100% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='rectangular',\n style:{\n top:0,\n left:0,\n transform:'scale(1) translate(-50%,-50%)',\n transformOrigin:'0% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='rectangular',\n style:{\n bottom:0,\n left:0,\n transform:'scale(1) translate(-50%,50%)',\n transformOrigin:'0% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='circular',\n style:{\n top:'14%',\n right:'14%',\n transform:'scale(1) translate(50%,-50%)',\n transformOrigin:'100% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='right' && ownerState.overlap==='circular',\n style:{\n bottom:'14%',\n right:'14%',\n transform:'scale(1) translate(50%,50%)',\n transformOrigin:'100% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(50%,50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='top' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='circular',\n style:{\n top:'14%',\n left:'14%',\n transform:'scale(1) translate(-50%,-50%)',\n transformOrigin:'0% 0%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,-50%)'\n}\n}\n},{\n props:({\n ownerState\n})=>ownerState.anchorOrigin.vertical==='bottom' && ownerState.anchorOrigin.horizontal==='left' && ownerState.overlap==='circular',\n style:{\n bottom:'14%',\n left:'14%',\n transform:'scale(1) translate(-50%,50%)',\n transformOrigin:'0% 100%',\n [`&.${Badge_badgeClasses.invisible}`]:{\n transform:'scale(0) translate(-50%,50%)'\n}\n}\n},{\n props:{\n invisible:true\n},\n style:{\n transition:theme.transitions.create('transform',{\n easing:theme.transitions.easing.easeInOut,\n duration:theme.transitions.duration.leavingScreen\n})\n}\n}]\n};\n});\nconst Badge=external_React_.forwardRef(function Badge(inProps,ref){\n var _ref,_slots$root,_ref2,_slots$badge,_slotProps$root,_slotProps$badge;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiBadge'\n});\n const{\n anchorOrigin:anchorOriginProp={\n vertical:'top',\n horizontal:'right'\n},\n children,\n overlap:overlapProp='rectangular',\n color:colorProp='default',\n invisible:invisibleProp=false,\n max:maxProp=99,\n badgeContent:badgeContentProp,\n slots,\n slotProps,\n showZero=false,\n variant:variantProp='standard'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Badge_excluded);\n const{\n badgeContent,\n invisible:invisibleFromHook,\n max,\n displayValue:displayValueFromHook\n}=Badge_useBadge({\n max:maxProp,\n invisible:invisibleProp,\n badgeContent:badgeContentProp,\n showZero\n});\n const prevProps=usePreviousProps_usePreviousProps({\n anchorOrigin:anchorOriginProp,\n color:colorProp,\n overlap:overlapProp,\n variant:variantProp,\n badgeContent:badgeContentProp\n});\n const invisible=invisibleFromHook || badgeContent==null && variantProp !=='dot';\n const{\n color=colorProp,\n overlap=overlapProp,\n anchorOrigin=anchorOriginProp,\n variant=variantProp\n}=invisible ? prevProps :props;\n const displayValue=variant !=='dot' ? displayValueFromHook :undefined;,props,{\n badgeContent,\n invisible,\n max,\n displayValue,\n showZero,\n anchorOrigin,\n color,\n overlap,\n variant\n});\n const classes=Badge_useUtilityClasses(ownerState);\n\n // support both `slots` and `components` for backward compatibility\n const RootSlot=(_ref=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components.Root) !=null ? _ref :BadgeRoot;\n const BadgeSlot=(_ref2=(_slots$badge=slots==null ? void 0 :slots.badge) !=null ? _slots$badge :components.Badge) !=null ? _ref2 :BadgeBadge;\n const rootSlotProps=(_slotProps$root=slotProps==null ? void 0 :slotProps.root) !=null ? _slotProps$root :componentsProps.root;\n const badgeSlotProps=(_slotProps$badge=slotProps==null ? void 0 :slotProps.badge) !=null ? _slotProps$badge :componentsProps.badge;\n const rootProps=useSlotProps_useSlotProps({\n elementType:RootSlot,\n externalSlotProps:rootSlotProps,\n externalForwardedProps:other,\n additionalProps:{\n ref,\n as:component\n},\n ownerState,\n className:(0,clsx.A)(rootSlotProps==null ? void 0:rootSlotProps.className,classes.root,className)\n});\n const badgeProps=useSlotProps_useSlotProps({\n elementType:BadgeSlot,\n externalSlotProps:badgeSlotProps,\n ownerState,\n className:(0,clsx.A)(classes.badge,badgeSlotProps==null ? void 0:badgeSlotProps.className)\n});,rootProps,{\n children:[children,(0,jsx_runtime.jsx)(BadgeSlot,(0,esm_extends.A)({},badgeProps,{\n children:displayValue\n}))]\n}));\n});\n false ? 0 :void 0;\n const Badge_Badge=(Badge);\n;// ./node_modules/@mui/material/internal/svg-icons/Person.js\n'use client';\n\n\n\n\n\n\n const Person=((0,createSvgIcon.A)((0,jsx_runtime.jsx)(\"path\",{\n d:\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"\n}),'Person'));\n;// ./node_modules/@mui/material/Avatar/avatarClasses.js\n\n\nfunction getAvatarUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiAvatar',slot);\n}\nconst avatarClasses=(0,generateUtilityClasses.A)('MuiAvatar',['root','colorDefault','circular','rounded','square','img','fallback']);\n const Avatar_avatarClasses=((null && (avatarClasses)));\n;// ./node_modules/@mui/material/utils/useSlot.js\n'use client';\n\n\n\nconst useSlot_excluded=[\"className\",\"elementType\",\"ownerState\",\"externalForwardedProps\",\"getSlotOwnerState\",\"internalForwardedProps\"],\n useSlot_excluded2=[\"component\",\"slots\",\"slotProps\"],\n useSlot_excluded3=[\"component\"];\n\n\n\n\n\nfunction useSlot(\n\nname,parameters){\n const{\n className,\n elementType:initialElementType,\n ownerState,\n externalForwardedProps,\n getSlotOwnerState,\n internalForwardedProps\n}=parameters,\n useSlotPropsParams=(0,objectWithoutPropertiesLoose.A)(parameters,useSlot_excluded);\n const{\n component:rootComponent,\n slots={\n [name]:undefined\n},\n slotProps={\n [name]:undefined\n}\n}=externalForwardedProps,\n other=(0,objectWithoutPropertiesLoose.A)(externalForwardedProps,useSlot_excluded2);\n const elementType=slots[name] || initialElementType;\n\n // `slotProps[name]` can be a callback that receives the component's ownerState.\n // `resolvedComponentsProps` is always a plain object.\n const resolvedComponentsProps=resolveComponentProps_resolveComponentProps(slotProps[name],ownerState);\n const _mergeSlotProps=mergeSlotProps_mergeSlotProps((0,esm_extends.A)({\n className\n},useSlotPropsParams,{\n externalForwardedProps:name==='root' ? other:undefined,\n externalSlotProps:resolvedComponentsProps\n})),\n{\n props:{\n component:slotComponent\n},\n internalRef\n}=_mergeSlotProps,\n mergedProps=(0,objectWithoutPropertiesLoose.A)(_mergeSlotProps.props,useSlot_excluded3);\n const ref=(0,useForkRef.A)(internalRef,resolvedComponentsProps==null ? void 0 :resolvedComponentsProps.ref,parameters.ref);;,ownerState,slotOwnerState);\n const LeafComponent=name==='root' ? slotComponent || rootComponent :slotComponent;,name==='root' && !rootComponent && !slots[name] && internalForwardedProps,name !=='root' && !slots[name] && internalForwardedProps,mergedProps,LeafComponent &&{\n as:LeafComponent\n},{\n ref\n}),finalOwnerState);\n Object.keys(slotOwnerState).forEach(propName=>{\n delete props[propName];\n});\n return [elementType,props];\n}\n;// ./node_modules/@mui/material/Avatar/Avatar.js\n'use client';\n\n\n\nconst Avatar_excluded=[\"alt\",\"children\",\"className\",\"component\",\"slots\",\"slotProps\",\"imgProps\",\"sizes\",\"src\",\"srcSet\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\nconst Avatar_useUtilityClasses=ownerState=>{\n const{\n classes,\n variant,\n colorDefault\n}=ownerState;\n const slots={\n root:['root',variant,colorDefault && 'colorDefault'],\n img:['img'],\n fallback:['fallback']\n};\n return (0,composeClasses.A)(slots,getAvatarUtilityClass,classes);\n};\nconst AvatarRoot=(0,styled.Ay)('div',{\n name:'MuiAvatar',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],ownerState.colorDefault && styles.colorDefault];\n}\n})(({\n theme\n})=>({\n position:'relative',\n display:'flex',\n alignItems:'center',\n justifyContent:'center',\n flexShrink:0,\n width:40,\n height:40,\n fontFamily:theme.typography.fontFamily,\n fontSize:theme.typography.pxToRem(20),\n lineHeight:1,\n borderRadius:'50%',\n overflow:'hidden',\n userSelect:'none',\n variants:[{\n props:{\n variant:'rounded'\n},\n style:{\n borderRadius:(theme.vars || theme).shape.borderRadius\n}\n},{\n props:{\n variant:'square'\n},\n style:{\n borderRadius:0\n}\n},{\n props:{\n colorDefault:true\n},\n style:(0,esm_extends.A)({\n color:(theme.vars || theme).palette.background.default\n},theme.vars ?{\n backgroundColor:theme.vars.palette.Avatar.defaultBg\n}:(0,esm_extends.A)({\n backgroundColor:theme.palette.grey[400]\n},theme.applyStyles('dark',{\n backgroundColor:theme.palette.grey[600]\n})))\n}]\n}));\nconst AvatarImg=(0,styled.Ay)('img',{\n name:'MuiAvatar',\n slot:'Img',\n overridesResolver:(props,styles)=>styles.img\n})({\n width:'100%',\n height:'100%',\n textAlign:'center',\n // Handle non-square image. The property isn't supported by IE11.\n objectFit:'cover',\n // Hide alt text.\n color:'transparent',\n // Hide the image broken icon,only works on Chrome.\n textIndent:10000\n});\nconst AvatarFallback=(0,styled.Ay)(Person,{\n name:'MuiAvatar',\n slot:'Fallback',\n overridesResolver:(props,styles)=>styles.fallback\n})({\n width:'75%',\n height:'75%'\n});\nfunction useLoaded({\n crossOrigin,\n referrerPolicy,\n src,\n srcSet\n}){\n const [loaded,setLoaded]=external_React_.useState(false);\n external_React_.useEffect(()=>{\n if (!src && !srcSet){\n return undefined;\n}\n setLoaded(false);\n let active=true;\n const image=new Image();\n image.onload=()=>{\n if (!active){\n return;\n}\n setLoaded('loaded');\n};\n image.onerror=()=>{\n if (!active){\n return;\n}\n setLoaded('error');\n};\n image.crossOrigin=crossOrigin;\n image.referrerPolicy=referrerPolicy;\n image.src=src;\n if (srcSet){\n image.srcset=srcSet;\n}\n return ()=>{\n active=false;\n};\n},[crossOrigin,referrerPolicy,src,srcSet]);\n return loaded;\n}\nconst Avatar=external_React_.forwardRef(function Avatar(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiAvatar'\n});\n const{\n alt,\n children:childrenProp,\n className,\n component='div',\n slots={},\n imgProps,\n sizes,\n src,\n srcSet,\n variant='circular'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Avatar_excluded);\n let children=null;,imgProps,{\n src,\n srcSet\n}));\n const hasImg=src || srcSet;\n const hasImgNotFailing=hasImg && loaded !=='error';,props,{\n colorDefault:!hasImgNotFailing,\n component,\n variant\n});\n const classes=Avatar_useUtilityClasses(ownerState);\n const [ImgSlot,imgSlotProps]=useSlot('img',{\n className:classes.img,\n elementType:AvatarImg,\n externalForwardedProps:{\n slots,\n slotProps:{\n img:(0,esm_extends.A)({},imgProps,slotProps.img)\n}\n},\n additionalProps:{\n alt,\n src,\n srcSet,\n sizes\n},\n ownerState\n});\n if (hasImgNotFailing){\n children=(0,jsx_runtime.jsx)(ImgSlot,(0,esm_extends.A)({},imgSlotProps));\n // We only render valid children,non valid children are rendered with a fallback\n // We consider that invalid children are all falsy values,except 0,which is valid.\n}else if (!!childrenProp || childrenProp===0){\n children=childrenProp;\n}else if (hasImg && alt){\n children=alt[0];\n}else{\n children=(0,jsx_runtime.jsx)(AvatarFallback,{\n ownerState:ownerState,\n className:classes.fallback\n});\n}\n return (0,jsx_runtime.jsx)(AvatarRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:children\n}));\n});\n false ? 0 :void 0;\n const Avatar_Avatar=(Avatar);\n;// ./node_modules/@mui/material/Typography/typographyClasses.js\n\n\nfunction getTypographyUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTypography',slot);\n}\nconst typographyClasses=(0,generateUtilityClasses.A)('MuiTypography',['root','h1','h2','h3','h4','h5','h6','subtitle1','subtitle2','body1','body2','inherit','button','caption','overline','alignLeft','alignRight','alignCenter','alignJustify','noWrap','gutterBottom','paragraph']);\n const Typography_typographyClasses=((null && (typographyClasses)));\n;// ./node_modules/@mui/material/Typography/Typography.js\n'use client';\n\n\n\nconst Typography_excluded=[\"align\",\"className\",\"component\",\"gutterBottom\",\"noWrap\",\"paragraph\",\"variant\",\"variantMapping\"];\n\n\n\n\n\n\n\n\n\n\nconst Typography_useUtilityClasses=ownerState=>{\n const{\n align,\n gutterBottom,\n noWrap,\n paragraph,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,ownerState.align !=='inherit' && `align${(0,capitalize.A)(align)}`,gutterBottom && 'gutterBottom',noWrap && 'noWrap',paragraph && 'paragraph']\n};\n return (0,composeClasses.A)(slots,getTypographyUtilityClass,classes);\n};\nconst TypographyRoot=(0,styled.Ay)('span',{\n name:'MuiTypography',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.variant && styles[ownerState.variant],ownerState.align !=='inherit' && styles[`align${(0,capitalize.A)(ownerState.align)}`],ownerState.noWrap && styles.noWrap,ownerState.gutterBottom && styles.gutterBottom,ownerState.paragraph && styles.paragraph];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n margin:0\n},ownerState.variant==='inherit' &&{\n // Some elements,like <button>on Chrome have default font that doesn't inherit,reset this.\n font:'inherit'\n},ownerState.variant !=='inherit' && theme.typography[ownerState.variant],ownerState.align !=='inherit' &&{\n textAlign:ownerState.align\n},ownerState.noWrap &&{\n overflow:'hidden',\n textOverflow:'ellipsis',\n whiteSpace:'nowrap'\n},ownerState.gutterBottom &&{\n marginBottom:'0.35em'\n},ownerState.paragraph &&{\n marginBottom:16\n}));\nconst defaultVariantMapping={\n h1:'h1',\n h2:'h2',\n h3:'h3',\n h4:'h4',\n h5:'h5',\n h6:'h6',\n subtitle1:'h6',\n subtitle2:'h6',\n body1:'p',\n body2:'p',\n inherit:'p'\n};\n\n// TODO v6:deprecate these color values in v5.x and remove the transformation in v6\nconst colorTransformations={\n primary:'primary.main',\n textPrimary:'text.primary',\n secondary:'secondary.main',\n textSecondary:'text.secondary',\n error:'error.main'\n};\nconst transformDeprecatedColors=color=>{\n return colorTransformations[color] || color;\n};\nconst Typography=external_React_.forwardRef(function Typography(inProps,ref){\n const themeProps=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTypography'\n});\n const color=transformDeprecatedColors(themeProps.color);,themeProps,{\n color\n}));\n const{\n align='inherit',\n className,\n component,\n gutterBottom=false,\n noWrap=false,\n paragraph=false,\n variant='body1',\n variantMapping=defaultVariantMapping\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Typography_excluded);,props,{\n align,\n color,\n className,\n component,\n gutterBottom,\n noWrap,\n paragraph,\n variant,\n variantMapping\n});\n const Component=component || (paragraph ? 'p' :variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n const classes=Typography_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(TypographyRoot,(0,esm_extends.A)({\n as:Component,\n ref:ref,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className)\n},other));\n});\n false ? 0 :void 0;\n const Typography_Typography=(Typography);\n;// ./node_modules/@mui/system/esm/createStyled.js\n\n\nconst createStyled_excluded=[\"ownerState\"],\n createStyled_excluded2=[\"variants\"],\n createStyled_excluded3=[\"name\",\"slot\",\"skipVariantsResolver\",\"skipSx\",\"overridesResolver\"];\n\n\n\n\n\n\n\nfunction createStyled_isEmpty(obj){\n return Object.keys(obj).length===0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag){\n return typeof tag==='string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0)>96;\n}\n\n// Update /system/styled/#api in case if this changes\nfunction shouldForwardProp(prop){\n return prop !=='ownerState' && prop !=='theme' && prop !=='sx' && prop !=='as';\n}\nconst createStyled_systemDefaultTheme=(0,createTheme.A)();\nconst lowercaseFirstLetter=string=>{\n if (!string){\n return string;\n}\n return string.charAt(0).toLowerCase()+string.slice(1);\n};\nfunction resolveTheme({\n defaultTheme,\n theme,\n themeId\n}){\n return createStyled_isEmpty(theme) ? defaultTheme:theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot){\n if (!slot){\n return null;\n}\n return (props,styles)=>styles[slot];\n}\nfunction processStyleArg(callableStyle,_ref){\n let{\n ownerState\n}=_ref,\n props=(0,objectWithoutPropertiesLoose.A)(_ref,createStyled_excluded);\n const resolvedStylesArg=typeof callableStyle==='function' ? callableStyle((0,esm_extends.A)({\n ownerState\n},props)) :callableStyle;\n if (Array.isArray(resolvedStylesArg)){\n return resolvedStylesArg.flatMap(resolvedStyle=>processStyleArg(resolvedStyle,(0,esm_extends.A)({\n ownerState\n},props)));\n}\n if (!!resolvedStylesArg && typeof resolvedStylesArg==='object' && Array.isArray(resolvedStylesArg.variants)){\n const{\n variants=[]\n}=resolvedStylesArg,\n otherStyles=(0,objectWithoutPropertiesLoose.A)(resolvedStylesArg,createStyled_excluded2);\n let result=otherStyles;\n variants.forEach(variant=>{\n let isMatch=true;\n if (typeof variant.props==='function'){\n isMatch=variant.props((0,esm_extends.A)({\n ownerState\n},props,ownerState));\n}else{\n Object.keys(variant.props).forEach(key=>{\n if ((ownerState==null ? void 0 :ownerState[key]) !==variant.props[key] && props[key] !==variant.props[key]){\n isMatch=false;\n}\n});\n}\n if (isMatch){\n if (!Array.isArray(result)){\n result=[result];\n}\n result.push(typeof variant.style==='function' ? variant.style((0,esm_extends.A)({\n ownerState\n},props,ownerState)):variant.style);\n}\n});\n return result;\n}\n return resolvedStylesArg;\n}){\n const{\n themeId,\n defaultTheme=createStyled_systemDefaultTheme,\n rootShouldForwardProp=shouldForwardProp,\n slotShouldForwardProp=shouldForwardProp\n}=input;\n const systemSx=props=>{\n return (0,styleFunctionSx.A)((0,esm_extends.A)({},props,{\n theme:resolveTheme((0,esm_extends.A)({},props,{\n defaultTheme,\n themeId\n}))\n}));\n};\n systemSx.__mui_systemSx=true;)=>{\n // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n (0,styled_engine.internal_processStyles)(tag,styles=>styles.filter(style=>!(style !=null && style.__mui_systemSx)));\n const{\n name:componentName,\n slot:componentSlot,\n skipVariantsResolver:inputSkipVariantsResolver,\n skipSx:inputSkipSx,\n // TODO v6:remove `lowercaseFirstLetter()` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n overridesResolver=defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n}=inputOptions,\n options=(0,objectWithoutPropertiesLoose.A)(inputOptions,createStyled_excluded3);\n\n // if skipVariantsResolver option is defined,take the value,otherwise,true for root and false for other slots.\n const skipVariantsResolver=inputSkipVariantsResolver !==undefined ? inputSkipVariantsResolver :\n // TODO v6:remove `Root` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !=='Root' && componentSlot !=='root' || false;\n const skipSx=inputSkipSx || false;\n let label;\n let shouldForwardPropOption=shouldForwardProp;\n\n // TODO v6:remove `Root` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n if (componentSlot==='Root' || componentSlot==='root'){\n shouldForwardPropOption=rootShouldForwardProp;\n}else if (componentSlot){\n // any other slot specified\n shouldForwardPropOption=slotShouldForwardProp;\n}else if (isStringTag(tag)){\n // for string (html) tag,preserve the behavior in emotion & styled-components.\n shouldForwardPropOption=undefined;\n}\n const defaultStyledResolver=(0,styled_engine[\"default\"])(tag,(0,esm_extends.A)({\n shouldForwardProp:shouldForwardPropOption,\n label\n},options));\n const transformStyleArg=stylesArg=>{\n // On the server Emotion doesn't use React.forwardRef for creating components,so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n if (typeof stylesArg==='function' && stylesArg.__emotion_real !==stylesArg || (0,deepmerge.Q)(stylesArg)){\n return props=>processStyleArg(stylesArg,(0,esm_extends.A)({},props,{\n theme:resolveTheme({\n theme:props.theme,\n defaultTheme,\n themeId\n})\n}));\n}\n return stylesArg;\n};\n const muiStyledResolver=(styleArg,...expressions)=>{\n let transformedStyleArg=transformStyleArg(styleArg);\n const expressionsWithDefaultTheme=expressions ? expressions.map(transformStyleArg) :[];\n if (componentName && overridesResolver){\n expressionsWithDefaultTheme.push(props=>{\n const theme=resolveTheme((0,esm_extends.A)({},props,{\n defaultTheme,\n themeId\n}));\n if (!theme.components || !theme.components[componentName] || !theme.components[componentName].styleOverrides){\n return null;\n}\n const styleOverrides=theme.components[componentName].styleOverrides;;\n // TODO:v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n Object.entries(styleOverrides).forEach(([slotKey,slotStyle])=>{\n resolvedStyleOverrides[slotKey]=processStyleArg(slotStyle,(0,esm_extends.A)({},props,{\n theme\n}));\n});\n return overridesResolver(props,resolvedStyleOverrides);\n});\n}\n if (componentName && !skipVariantsResolver){\n expressionsWithDefaultTheme.push(props=>{\n var _theme$components;,props,{\n defaultTheme,\n themeId\n}));\n const themeVariants=theme==null || (_theme$components=theme.components)==null || (_theme$components=_theme$components[componentName])==null ? void 0 :_theme$components.variants;\n return processStyleArg({\n variants:themeVariants\n},props,{\n theme\n}));\n});\n}\n if (!skipSx){\n expressionsWithDefaultTheme.push(systemSx);\n}\n const numOfCustomFnsApplied=expressionsWithDefaultTheme.length - expressions.length;\n if (Array.isArray(styleArg) && numOfCustomFnsApplied>0){\n const placeholders=new Array(numOfCustomFnsApplied).fill('');\n // If the type is array,than we need to add placeholders in the template for the overrides,variants and the sx styles.\n transformedStyleArg=[...styleArg,...placeholders];\n transformedStyleArg.raw=[...styleArg.raw,...placeholders];\n}\n const Component=defaultStyledResolver(transformedStyleArg,...expressionsWithDefaultTheme);\n if (tag.muiName){\n Component.muiName=tag.muiName;\n}\n return Component;\n};\n if (defaultStyledResolver.withConfig){\n muiStyledResolver.withConfig=defaultStyledResolver.withConfig;\n}\n return muiStyledResolver;\n};\n}\n;// ./node_modules/@mui/system/esm/styled.js\n\nconst styled_styled=createStyled();\n const esm_styled=(styled_styled);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/resolveProps/resolveProps.js\nvar resolveProps=__webpack_require__(7379);\n;// ./node_modules/@mui/system/esm/useThemeProps/getThemeProps.js\n\nfunction getThemeProps(params){\n const{\n theme,\n name,\n props\n}=params;\n if (!theme || !theme.components || !theme.components[name] || !theme.components[name].defaultProps){\n return props;\n}\n return (0,resolveProps.A)(theme.components[name].defaultProps,props);\n}\n;// ./node_modules/@mui/system/esm/useThemeProps/useThemeProps.js\n'use client';\n\n\n\nfunction useThemeProps({\n props,\n name,\n defaultTheme,\n themeId\n}){\n let theme=esm_useTheme(defaultTheme);\n if (themeId){\n theme=theme[themeId] || theme;\n}\n const mergedProps=getThemeProps({\n theme,\n name,\n props\n});\n return mergedProps;\n}\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/breakpoints.js\nvar breakpoints=__webpack_require__(9452);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/spacing.js+1 modules\nvar spacing=__webpack_require__(8248);\n;// ./node_modules/@mui/system/esm/Stack/createStack.js\n\n\nconst createStack_excluded=[\"component\",\"direction\",\"spacing\",\"divider\",\"children\",\"className\",\"useFlexGap\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst createStack_defaultTheme=(0,createTheme.A)();\n// widening Theme to any so that the consumer can own the theme structure.\nconst defaultCreateStyledComponent=esm_styled('div',{\n name:'MuiStack',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\nfunction useThemePropsDefault(props){\n return useThemeProps({\n props,\n name:'MuiStack',\n defaultTheme:createStack_defaultTheme\n});\n}\n\n\nfunction joinChildren(children,separator){\n const childrenArray=external_React_.Children.toArray(children).filter(Boolean);\n return childrenArray.reduce((output,child,index)=>{\n output.push(child);\n if (index < childrenArray.length - 1){\n output.push(external_React_.cloneElement(separator,{\n key:`separator-${index}`\n}));\n}\n return output;\n},[]);\n}\nconst getSideFromDirection=direction=>{\n return{\n row:'Left',\n 'row-reverse':'Right',\n column:'Top',\n 'column-reverse':'Bottom'\n}[direction];\n};\nconst style=({\n ownerState,\n theme\n})=>{\n let styles=(0,esm_extends.A)({\n display:'flex',\n flexDirection:'column'\n},(0,breakpoints.NI)({\n theme\n},(0,breakpoints.kW)({\n values:ownerState.direction,\n breakpoints:theme.breakpoints.values\n}),propValue=>({\n flexDirection:propValue\n})));\n if (ownerState.spacing){\n const transformer=(0,spacing.LX)(theme);\n const base=Object.keys(theme.breakpoints.values).reduce((acc,breakpoint)=>{\n if (typeof ownerState.spacing==='object' && ownerState.spacing[breakpoint] !=null || typeof ownerState.direction==='object' && ownerState.direction[breakpoint] !=null){\n acc[breakpoint]=true;\n}\n return acc;\n});\n const directionValues=(0,breakpoints.kW)({\n values:ownerState.direction,\n base\n});\n const spacingValues=(0,breakpoints.kW)({\n values:ownerState.spacing,\n base\n});\n if (typeof directionValues==='object'){\n Object.keys(directionValues).forEach((breakpoint,index,breakpoints)=>{\n const directionValue=directionValues[breakpoint];\n if (!directionValue){\n const previousDirectionValue=index>0 ? directionValues[breakpoints[index - 1]]:'column';\n directionValues[breakpoint]=previousDirectionValue;\n}\n});\n}\n const styleFromPropValue=(propValue,breakpoint)=>{\n if (ownerState.useFlexGap){\n return{\n gap:(0,spacing._W)(transformer,propValue)\n};\n}\n return{\n // The useFlexGap={false}implement relies on each child to give up control of the margin.\n // We need to reset the margin to avoid double spacing.\n '&>:not(style):not(style)':{\n margin:0\n},\n '&>:not(style)~:not(style)':{\n [`margin${getSideFromDirection(breakpoint ? directionValues[breakpoint]:ownerState.direction)}`]:(0,spacing._W)(transformer,propValue)\n}\n};\n};\n styles=(0,deepmerge.A)(styles,(0,breakpoints.NI)({\n theme\n},spacingValues,styleFromPropValue));\n}\n styles=(0,breakpoints.iZ)(theme.breakpoints,styles);\n return styles;\n};){\n const{\n // This will allow adding custom styled fn (for example for custom sx style function)\n createStyledComponent=defaultCreateStyledComponent,\n useThemeProps=useThemePropsDefault,\n componentName='MuiStack'\n}=options;\n const useUtilityClasses=()=>{\n const slots={\n root:['root']\n};);\n};\n const StackRoot=createStyledComponent(style);\n const Stack=external_React_.forwardRef(function Grid(inProps,ref){\n const themeProps=useThemeProps(inProps);\n const props=(0,extendSxProp.A)(themeProps);// `color` type conflicts with html color attribute.\n const{\n component='div',\n direction='column',\n spacing=0,\n divider,\n children,\n className,\n useFlexGap=false\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,createStack_excluded);\n const ownerState={\n direction,\n spacing,\n useFlexGap\n};\n const classes=useUtilityClasses();\n return (0,jsx_runtime.jsx)(StackRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n ref:ref,\n className:(0,clsx.A)(classes.root,className)\n},other,{\n children:divider ? joinChildren(children,divider):children\n}));\n});\n false ? 0:void 0;\n return Stack;\n}\n;// ./node_modules/@mui/material/Stack/Stack.js\n'use client';\n\n\n\n\n\nconst Stack=createStack({\n createStyledComponent:(0,styled.Ay)('div',{\n name:'MuiStack',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n}),\n useThemeProps:inProps=>(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiStack'\n})\n});\n false ? 0 :void 0;\n const Stack_Stack=(Stack);\n;// ./node_modules/@mui/material/internal/svg-icons/Cancel.js\n'use client';\n\n\n\n\n\n\n const Cancel=((0,createSvgIcon.A)((0,jsx_runtime.jsx)(\"path\",{\n d:\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}),'Cancel'));\n;// ./node_modules/@mui/material/Chip/chipClasses.js\n\n\nfunction getChipUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiChip',slot);\n}\nconst chipClasses=(0,generateUtilityClasses.A)('MuiChip',['root','sizeSmall','sizeMedium','colorError','colorInfo','colorPrimary','colorSecondary','colorSuccess','colorWarning','disabled','clickable','clickableColorPrimary','clickableColorSecondary','deletable','deletableColorPrimary','deletableColorSecondary','outlined','filled','outlinedPrimary','outlinedSecondary','filledPrimary','filledSecondary','avatar','avatarSmall','avatarMedium','avatarColorPrimary','avatarColorSecondary','icon','iconSmall','iconMedium','iconColorPrimary','iconColorSecondary','label','labelSmall','labelMedium','deleteIcon','deleteIconSmall','deleteIconMedium','deleteIconColorPrimary','deleteIconColorSecondary','deleteIconOutlinedColorPrimary','deleteIconOutlinedColorSecondary','deleteIconFilledColorPrimary','deleteIconFilledColorSecondary','focusVisible']);\n const Chip_chipClasses=(chipClasses);\n;// ./node_modules/@mui/material/Chip/Chip.js\n'use client';\n\n\n\nconst Chip_excluded=[\"avatar\",\"className\",\"clickable\",\"color\",\"component\",\"deleteIcon\",\"disabled\",\"icon\",\"label\",\"onClick\",\"onDelete\",\"onKeyDown\",\"onKeyUp\",\"size\",\"variant\",\"tabIndex\",\"skipFocusWhenDisabled\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Chip_useUtilityClasses=ownerState=>{\n const{\n classes,\n disabled,\n size,\n color,\n iconColor,\n onDelete,\n clickable,\n variant\n}=ownerState;\n const slots={\n root:['root',variant,disabled && 'disabled',`size${(0,capitalize.A)(size)}`,`color${(0,capitalize.A)(color)}`,clickable && 'clickable',clickable && `clickableColor${(0,capitalize.A)(color)}`,onDelete && 'deletable',onDelete && `deletableColor${(0,capitalize.A)(color)}`,`${variant}${(0,capitalize.A)(color)}`],\n label:['label',`label${(0,capitalize.A)(size)}`],\n avatar:['avatar',`avatar${(0,capitalize.A)(size)}`,`avatarColor${(0,capitalize.A)(color)}`],\n icon:['icon',`icon${(0,capitalize.A)(size)}`,`iconColor${(0,capitalize.A)(iconColor)}`],\n deleteIcon:['deleteIcon',`deleteIcon${(0,capitalize.A)(size)}`,`deleteIconColor${(0,capitalize.A)(color)}`,`deleteIcon${(0,capitalize.A)(variant)}Color${(0,capitalize.A)(color)}`]\n};\n return (0,composeClasses.A)(slots,getChipUtilityClass,classes);\n};\nconst ChipRoot=(0,styled.Ay)('div',{\n name:'MuiChip',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n const{\n color,\n iconColor,\n clickable,\n onDelete,\n size,\n variant\n}=ownerState;\n return [{\n [`& .${Chip_chipClasses.avatar}`]:styles.avatar\n},{\n [`& .${Chip_chipClasses.avatar}`]:styles[`avatar${(0,capitalize.A)(size)}`]\n},{\n [`& .${Chip_chipClasses.avatar}`]:styles[`avatarColor${(0,capitalize.A)(color)}`]\n},{\n [`& .${Chip_chipClasses.icon}`]:styles.icon\n},{\n [`& .${Chip_chipClasses.icon}`]:styles[`icon${(0,capitalize.A)(size)}`]\n},{\n [`& .${Chip_chipClasses.icon}`]:styles[`iconColor${(0,capitalize.A)(iconColor)}`]\n},{\n [`& .${Chip_chipClasses.deleteIcon}`]:styles.deleteIcon\n},{\n [`& .${Chip_chipClasses.deleteIcon}`]:styles[`deleteIcon${(0,capitalize.A)(size)}`]\n},{\n [`& .${Chip_chipClasses.deleteIcon}`]:styles[`deleteIconColor${(0,capitalize.A)(color)}`]\n},{\n [`& .${Chip_chipClasses.deleteIcon}`]:styles[`deleteIcon${(0,capitalize.A)(variant)}Color${(0,capitalize.A)(color)}`]\n},styles.root,styles[`size${(0,capitalize.A)(size)}`],styles[`color${(0,capitalize.A)(color)}`],clickable && styles.clickable,clickable && color !=='default' && styles[`clickableColor${(0,capitalize.A)(color)})`],onDelete && styles.deletable,onDelete && color !=='default' && styles[`deletableColor${(0,capitalize.A)(color)}`],styles[variant],styles[`${variant}${(0,capitalize.A)(color)}`]];\n}\n})(({\n theme,\n ownerState\n})=>{\n const textColor=theme.palette.mode==='light' ? theme.palette.grey[700] :theme.palette.grey[300];\n return (0,esm_extends.A)({\n maxWidth:'100%',\n fontFamily:theme.typography.fontFamily,\n fontSize:theme.typography.pxToRem(13),\n display:'inline-flex',\n alignItems:'center',\n justifyContent:'center',\n height:32,\n color:(theme.vars || theme).palette.text.primary,\n backgroundColor:(theme.vars || theme).palette.action.selected,\n borderRadius:32 / 2,\n whiteSpace:'nowrap',\n transition:theme.transitions.create(['background-color','box-shadow']),\n // reset cursor explicitly in case ButtonBase is used\n cursor:'unset',\n // We disable the focus ring for mouse,touch and keyboard users.\n outline:0,\n textDecoration:'none',\n border:0,\n // Remove `button` border\n padding:0,\n // Remove `button` padding\n verticalAlign:'middle',\n boxSizing:'border-box',\n [`&.${Chip_chipClasses.disabled}`]:{\n opacity:(theme.vars || theme).palette.action.disabledOpacity,\n pointerEvents:'none'\n},\n [`& .${Chip_chipClasses.avatar}`]:{\n marginLeft:5,\n marginRight:-6,\n width:24,\n height:24,\n color:theme.vars ? theme.vars.palette.Chip.defaultAvatarColor:textColor,\n fontSize:theme.typography.pxToRem(12)\n},\n [`& .${Chip_chipClasses.avatarColorPrimary}`]:{\n color:(theme.vars || theme).palette.primary.contrastText,\n backgroundColor:(theme.vars || theme).palette.primary.dark\n},\n [`& .${Chip_chipClasses.avatarColorSecondary}`]:{\n color:(theme.vars || theme).palette.secondary.contrastText,\n backgroundColor:(theme.vars || theme).palette.secondary.dark\n},\n [`& .${Chip_chipClasses.avatarSmall}`]:{\n marginLeft:4,\n marginRight:-4,\n width:18,\n height:18,\n fontSize:theme.typography.pxToRem(10)\n},\n [`& .${Chip_chipClasses.icon}`]:(0,esm_extends.A)({\n marginLeft:5,\n marginRight:-6\n},ownerState.size==='small' &&{\n fontSize:18,\n marginLeft:4,\n marginRight:-4\n},ownerState.iconColor===ownerState.color && (0,esm_extends.A)({\n color:theme.vars ? theme.vars.palette.Chip.defaultIconColor:textColor\n},ownerState.color !=='default' &&{\n color:'inherit'\n})),\n [`& .${Chip_chipClasses.deleteIcon}`]:(0,esm_extends.A)({\n WebkitTapHighlightColor:'transparent',\n color:theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel}/ .26)` :(0,colorManipulator.X4)(theme.palette.text.primary,.26),\n fontSize:22,\n cursor:'pointer',\n margin:'0 5px 0 -6px',\n '&:hover':{\n color:theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel}/ .4)`:(0,colorManipulator.X4)(theme.palette.text.primary,.4)\n}\n},ownerState.size==='small' &&{\n fontSize:16,\n marginRight:4,\n marginLeft:-4\n},ownerState.color !=='default' &&{\n color:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].contrastTextChannel}/ .7)` :(0,colorManipulator.X4)(theme.palette[ownerState.color].contrastText,.7),\n '&:hover,&:active':{\n color:(theme.vars || theme).palette[ownerState.color].contrastText\n}\n})\n},ownerState.size==='small' &&{\n height:24\n},ownerState.color !=='default' &&{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].main,\n color:(theme.vars || theme).palette[ownerState.color].contrastText\n},ownerState.onDelete &&{\n [`&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel}/ calc(${theme.vars.palette.action.selectedOpacit)}+${theme.vars.palette.action.focusOpacity}))`:(0,colorManipulator.X4)(theme.palette.action.selected,theme.palette.action.selectedOpacity+theme.palette.action.focusOpacity)\n}\n},ownerState.onDelete && ownerState.color !=='default' &&{\n [`&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].dark\n}\n});\n},({\n theme,\n ownerState\n},ownerState.clickable &&{\n userSelect:'none',\n WebkitTapHighlightColor:'transparent',\n cursor:'pointer',\n '&:hover':{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel}/ calc(${theme.vars.palette.action.selectedOpacit)}+${theme.vars.palette.action.hoverOpacity}))`:(0,colorManipulator.X4)(theme.palette.action.selected,theme.palette.action.selectedOpacity+theme.palette.action.hoverOpacity)\n},\n [`&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel}/ calc(${theme.vars.palette.action.selectedOpacit)}+${theme.vars.palette.action.focusOpacity}))`:(0,colorManipulator.X4)(theme.palette.action.selected,theme.palette.action.selectedOpacity+theme.palette.action.focusOpacity)\n},\n '&:active':{\n boxShadow:(theme.vars || theme).shadows[1]\n}\n},ownerState.clickable && ownerState.color !=='default' &&{\n [`&:hover,&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].dark\n}\n}),({\n theme,\n ownerState\n},ownerState.variant==='outlined' &&{\n backgroundColor:'transparent',\n border:theme.vars ? `1px solid ${theme.vars.palette.Chip.defaultBorder}` :`1px solid ${theme.palette.mode==='light' ? theme.palette.grey[400]:theme.palette.grey[700]}`,\n [`&.${Chip_chipClasses.clickable}:hover`]:{\n backgroundColor:(theme.vars || theme).palette.action.hover\n},\n [`&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:(theme.vars || theme).palette.action.focus\n},\n [`& .${Chip_chipClasses.avatar}`]:{\n marginLeft:4\n},\n [`& .${Chip_chipClasses.avatarSmall}`]:{\n marginLeft:2\n},\n [`& .${Chip_chipClasses.icon}`]:{\n marginLeft:4\n},\n [`& .${Chip_chipClasses.iconSmall}`]:{\n marginLeft:2\n},\n [`& .${Chip_chipClasses.deleteIcon}`]:{\n marginRight:5\n},\n [`& .${Chip_chipClasses.deleteIconSmall}`]:{\n marginRight:3\n}\n},ownerState.variant==='outlined' && ownerState.color !=='default' &&{\n color:(theme.vars || theme).palette[ownerState.color].main,\n border:`1px solid ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ .7)`:(0,colorManipulator.X4)(theme.palette[ownerState.color].main,.7)}`,\n [`&.${Chip_chipClasses.clickable}:hover`]:{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.hoverOpacity})`:(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.hoverOpacity)\n},\n [`&.${Chip_chipClasses.focusVisible}`]:{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.focusOpacity})`:(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.focusOpacity)\n},\n [`& .${Chip_chipClasses.deleteIcon}`]:{\n color:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ .7)` :(0,colorManipulator.X4)(theme.palette[ownerState.color].main,.7),\n '&:hover,&:active':{\n color:(theme.vars || theme).palette[ownerState.color].main\n}\n}\n}));\nconst ChipLabel=(0,styled.Ay)('span',{\n name:'MuiChip',\n slot:'Label',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n const{\n size\n}=ownerState;\n return [styles.label,styles[`label${(0,capitalize.A)(size)}`]];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n overflow:'hidden',\n textOverflow:'ellipsis',\n paddingLeft:12,\n paddingRight:12,\n whiteSpace:'nowrap'\n},ownerState.variant==='outlined' &&{\n paddingLeft:11,\n paddingRight:11\n},ownerState.size==='small' &&{\n paddingLeft:8,\n paddingRight:8\n},ownerState.size==='small' && ownerState.variant==='outlined' &&{\n paddingLeft:7,\n paddingRight:7\n}));\nfunction isDeleteKeyboardEvent(keyboardEvent){\n return keyboardEvent.key==='Backspace' || keyboardEvent.key==='Delete';\n}\n\n\nconst Chip=external_React_.forwardRef(function Chip(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiChip'\n});\n const{\n avatar:avatarProp,\n className,\n clickable:clickableProp,\n color='default',\n component:ComponentProp,\n deleteIcon:deleteIconProp,\n disabled=false,\n icon:iconProp,\n label,\n onClick,\n onDelete,\n onKeyDown,\n onKeyUp,\n size='medium',\n variant='filled',\n tabIndex,\n skipFocusWhenDisabled=false // TODO v6:Rename to `focusableWhenDisabled`.\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Chip_excluded);\n const chipRef=external_React_.useRef(null);\n const handleRef=(0,utils_useForkRef.A)(chipRef,ref);\n const handleDeleteIconClick=event=>{\n // Stop the event from bubbling up to the `Chip`\n event.stopPropagation();\n if (onDelete){\n onDelete(event);\n}\n};\n const handleKeyDown=event=>{\n // Ignore events from children of `Chip`.\n if (event.currentTarget===event.target && isDeleteKeyboardEvent(event)){\n // Will be handled in keyUp,otherwise some browsers\n // might init navigation\n event.preventDefault();\n}\n if (onKeyDown){\n onKeyDown(event);\n}\n};\n const handleKeyUp=event=>{\n // Ignore events from children of `Chip`.\n if (event.currentTarget===event.target){\n if (onDelete && isDeleteKeyboardEvent(event)){\n onDelete(event);\n}else if (event.key==='Escape' && chipRef.current){\n chipRef.current.blur();\n}\n}\n if (onKeyUp){\n onKeyUp(event);\n}\n};\n const clickable=clickableProp !==false && onClick ? true :clickableProp;\n const component=clickable || onDelete ? ButtonBase_ButtonBase :ComponentProp || 'div';,props,{\n component,\n disabled,\n size,\n color,\n iconColor:external_React_.isValidElement(iconProp) ? iconProp.props.color || color:color,\n onDelete:!!onDelete,\n clickable,\n variant\n});\n const classes=Chip_useUtilityClasses(ownerState);\n const moreProps=component===ButtonBase_ButtonBase ? (0,esm_extends.A)({\n component:ComponentProp || 'div',\n focusVisibleClassName:classes.focusVisible\n},onDelete &&{\n disableRipple:true\n};\n let deleteIcon=null;\n if (onDelete){\n deleteIcon=deleteIconProp && external_React_.isValidElement(deleteIconProp) ? (external_React_.cloneElement(deleteIconProp,{\n className:(0,clsx.A)(deleteIconProp.props.className,classes.deleteIcon),\n onClick:handleDeleteIconClick\n})) :(0,jsx_runtime.jsx)(Cancel,{\n className:(0,clsx.A)(classes.deleteIcon),\n onClick:handleDeleteIconClick\n});\n}\n let avatar=null;\n if (avatarProp && external_React_.isValidElement(avatarProp)){\n avatar=external_React_.cloneElement(avatarProp,{\n className:(0,clsx.A)(classes.avatar,avatarProp.props.className)\n});\n}\n let icon=null;\n if (iconProp && external_React_.isValidElement(iconProp)){\n icon=external_React_.cloneElement(iconProp,{\n className:(0,clsx.A)(classes.icon,iconProp.props.className)\n});\n}\n return (0,jsx_runtime.jsxs)(ChipRoot,(0,esm_extends.A)({\n as:component,\n className:(0,clsx.A)(classes.root,className),\n disabled:clickable && disabled ? true:undefined,\n onClick:onClick,\n onKeyDown:handleKeyDown,\n onKeyUp:handleKeyUp,\n ref:handleRef,\n tabIndex:skipFocusWhenDisabled && disabled ? -1:tabIndex,\n ownerState:ownerState\n},moreProps,other,{\n children:[avatar || icon,(0,jsx_runtime.jsx)(ChipLabel,{\n className:(0,clsx.A)(classes.label),\n ownerState:ownerState,\n children:label\n}),deleteIcon]\n}));\n});\n false ? 0 :void 0;\n const Chip_Chip=(Chip);\n;// ./node_modules/@mui/material/Button/buttonClasses.js\n\n\nfunction getButtonUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiButton',slot);\n}\nconst buttonClasses=(0,generateUtilityClasses.A)('MuiButton',['root','text','textInherit','textPrimary','textSecondary','textSuccess','textError','textInfo','textWarning','outlined','outlinedInherit','outlinedPrimary','outlinedSecondary','outlinedSuccess','outlinedError','outlinedInfo','outlinedWarning','contained','containedInherit','containedPrimary','containedSecondary','containedSuccess','containedError','containedInfo','containedWarning','disableElevation','focusVisible','disabled','colorInherit','colorPrimary','colorSecondary','colorSuccess','colorError','colorInfo','colorWarning','textSizeSmall','textSizeMedium','textSizeLarge','outlinedSizeSmall','outlinedSizeMedium','outlinedSizeLarge','containedSizeSmall','containedSizeMedium','containedSizeLarge','sizeMedium','sizeSmall','sizeLarge','fullWidth','startIcon','endIcon','icon','iconSizeSmall','iconSizeMedium','iconSizeLarge']);\n const Button_buttonClasses=(buttonClasses);\n;);\n const ButtonGroup_ButtonGroupContext=(ButtonGroupContext);\n;// ./node_modules/@mui/material/ButtonGroup/ButtonGroupButtonContext.js\n\n\nconst ButtonGroupButtonContext=external_React_.createContext(undefined);\n const ButtonGroup_ButtonGroupButtonContext=(ButtonGroupButtonContext);\n;// ./node_modules/@mui/material/Button/Button.js\n'use client';\n\n\n\nconst Button_excluded=[\"children\",\"color\",\"component\",\"className\",\"disabled\",\"disableElevation\",\"disableFocusRipple\",\"endIcon\",\"focusVisibleClassName\",\"fullWidth\",\"size\",\"startIcon\",\"type\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Button_useUtilityClasses=ownerState=>{\n const{\n color,\n disableElevation,\n fullWidth,\n size,\n variant,\n classes\n}=ownerState;\n const slots={\n root:['root',variant,`${variant}${(0,capitalize.A)(color)}`,`size${(0,capitalize.A)(size)}`,`${variant}Size${(0,capitalize.A)(size)}`,`color${(0,capitalize.A)(color)}`,disableElevation && 'disableElevation',fullWidth && 'fullWidth'],\n label:['label'],\n startIcon:['icon','startIcon',`iconSize${(0,capitalize.A)(size)}`],\n endIcon:['icon','endIcon',`iconSize${(0,capitalize.A)(size)}`]\n};\n const composedClasses=(0,composeClasses.A)(slots,getButtonUtilityClass,classes);,classes,composedClasses);\n};,ownerState.size==='small' &&{\n '&>*:nth-of-type(1)':{\n fontSize:18\n}\n},ownerState.size==='medium' &&{\n '&>*:nth-of-type(1)':{\n fontSize:20\n}\n},ownerState.size==='large' &&{\n '&>*:nth-of-type(1)':{\n fontSize:22\n}\n});\nconst ButtonRoot=(0,styled.Ay)(ButtonBase_ButtonBase,{\n shouldForwardProp:prop=>(0,rootShouldForwardProp.A)(prop) || prop==='classes',\n name:'MuiButton',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[ownerState.variant],styles[`${ownerState.variant}${(0,capitalize.A)(ownerState.color)}`],styles[`size${(0,capitalize.A)(ownerState.size)}`],styles[`${ownerState.variant}Size${(0,capitalize.A)(ownerState.size)}`],ownerState.color==='inherit' && styles.colorInherit,ownerState.disableElevation && styles.disableElevation,ownerState.fullWidth && styles.fullWidth];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _theme$palette$getCon,_theme$palette;\n const inheritContainedBackgroundColor=theme.palette.mode==='light' ? theme.palette.grey[300] :theme.palette.grey[800];\n const inheritContainedHoverBackgroundColor=theme.palette.mode==='light' ? theme.palette.grey.A100 :theme.palette.grey[700];,theme.typography.button,{\n minWidth:64,\n padding:'6px 16px',\n borderRadius:(theme.vars || theme).shape.borderRadius,\n transition:theme.transitions.create(['background-color','box-shadow','border-color','color'],{\n duration:theme.transitions.duration.short\n}),\n '&:hover':(0,esm_extends.A)({\n textDecoration:'none',\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette.text.primary,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='text' && ownerState.color !=='inherit' &&{\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='outlined' && ownerState.color !=='inherit' &&{\n border:`1px solid ${(theme.vars || theme).palette[ownerState.color].main}`,\n backgroundColor:theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel}/ ${theme.vars.palette.action.hoverOpacity})` :(0,colorManipulator.X4)(theme.palette[ownerState.color].main,theme.palette.action.hoverOpacity),\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:'transparent'\n}\n},ownerState.variant==='contained' &&{\n backgroundColor:theme.vars ? theme.vars.palette.Button.inheritContainedHoverBg :inheritContainedHoverBackgroundColor,\n boxShadow:(theme.vars || theme).shadows[4],\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n boxShadow:(theme.vars || theme).shadows[2],\n backgroundColor:(theme.vars || theme).palette.grey[300]\n}\n},ownerState.variant==='contained' && ownerState.color !=='inherit' &&{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].dark,\n // Reset on touch devices,it doesn't add specificity\n '@media (hover:none)':{\n backgroundColor:(theme.vars || theme).palette[ownerState.color].main\n}\n},ownerState.variant==='contained' &&{\n boxShadow:(theme.vars || theme).shadows[8]\n}),\n [`&.${Button_buttonClasses.focusVisible},ownerState.variant==='contained' &&{\n boxShadow:(theme.vars || theme).shadows[6]\n}),\n [`&.${Button_buttonClasses.disabled}`]:(0,esm_extends.A)({\n color:(theme.vars || theme).palette.action.disabled\n},ownerState.variant==='outlined' &&{\n border:`1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n},ownerState.variant==='contained' &&{\n color:(theme.vars || theme).palette.action.disabled,\n boxShadow:(theme.vars || theme).shadows[0],\n backgroundColor:(theme.vars || theme).palette.action.disabledBackground\n})\n},ownerState.variant==='text' &&{\n padding:'6px 8px'\n},ownerState.variant==='text' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].main\n},ownerState.variant==='outlined' &&{\n padding:'5px 15px',\n border:'1px solid currentColor'\n},ownerState.variant==='outlined' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].main,\n border:theme.vars ? `1px solid rgba(${theme.vars.palette[ownerState.color].mainChannel}/ .5)` :`1px solid ${(0,colorManipulator.X4)(theme.palette[ownerState.color].main,.5)}`\n},ownerState.variant==='contained' &&{\n color:theme.vars ?\n // this is safe because grey does not change between default light/dark mode\n theme.vars.palette.text.primary:(_theme$palette$getCon=(_theme$palette=theme.palette).getContrastText)==null ? void 0:_theme$palette$getCon.call(_theme$palette,theme.palette.grey[300]),\n backgroundColor:theme.vars ? theme.vars.palette.Button.inheritContainedBg:inheritContainedBackgroundColor,\n boxShadow:(theme.vars || theme).shadows[2]\n},ownerState.variant==='contained' && ownerState.color !=='inherit' &&{\n color:(theme.vars || theme).palette[ownerState.color].contrastText,\n backgroundColor:(theme.vars || theme).palette[ownerState.color].main\n},ownerState.color==='inherit' &&{\n color:'inherit',\n borderColor:'currentColor'\n},ownerState.size==='small' && ownerState.variant==='text' &&{\n padding:'4px 5px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='text' &&{\n padding:'8px 11px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.size==='small' && ownerState.variant==='outlined' &&{\n padding:'3px 9px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='outlined' &&{\n padding:'7px 21px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.size==='small' && ownerState.variant==='contained' &&{\n padding:'4px 10px',\n fontSize:theme.typography.pxToRem(13)\n},ownerState.size==='large' && ownerState.variant==='contained' &&{\n padding:'8px 22px',\n fontSize:theme.typography.pxToRem(15)\n},ownerState.fullWidth &&{\n width:'100%'\n});\n},({\n ownerState\n})=>ownerState.disableElevation &&{\n boxShadow:'none',\n '&:hover':{\n boxShadow:'none'\n},\n [`&.${Button_buttonClasses.focusVisible}`]:{\n boxShadow:'none'\n},\n '&:active':{\n boxShadow:'none'\n},\n [`&.${Button_buttonClasses.disabled}`]:{\n boxShadow:'none'\n}\n});\nconst ButtonStartIcon=(0,styled.Ay)('span',{\n name:'MuiButton',\n slot:'StartIcon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.startIcon,styles[`iconSize${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inherit',\n marginRight:8,\n marginLeft:-4\n},ownerState.size==='small' &&{\n marginLeft:-2\n},commonIconStyles(ownerState)));\nconst ButtonEndIcon=(0,styled.Ay)('span',{\n name:'MuiButton',\n slot:'EndIcon',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.endIcon,styles[`iconSize${(0,capitalize.A)(ownerState.size)}`]];\n}\n})(({\n ownerState\n})=>(0,esm_extends.A)({\n display:'inherit',\n marginRight:-4,\n marginLeft:8\n},ownerState.size==='small' &&{\n marginRight:-2\n},commonIconStyles(ownerState)));\nconst Button=external_React_.forwardRef(function Button(inProps,ref){\n // props priority:`inProps`>`contextProps`>`themeDefaultProps`\n const contextProps=external_React_.useContext(ButtonGroup_ButtonGroupContext);\n const buttonGroupButtonContextPositionClassName=external_React_.useContext(ButtonGroup_ButtonGroupButtonContext);\n const resolvedProps=(0,resolveProps.A)(contextProps,inProps);\n const props=(0,DefaultPropsProvider.b)({\n props:resolvedProps,\n name:'MuiButton'\n});\n const{\n children,\n color='primary',\n component='button',\n className,\n disabled=false,\n disableElevation=false,\n disableFocusRipple=false,\n endIcon:endIconProp,\n focusVisibleClassName,\n fullWidth=false,\n size='medium',\n startIcon:startIconProp,\n type,\n variant='text'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Button_excluded);,props,{\n color,\n component,\n disabled,\n disableElevation,\n disableFocusRipple,\n fullWidth,\n size,\n type,\n variant\n});\n const classes=Button_useUtilityClasses(ownerState);\n const startIcon=startIconProp && (0,jsx_runtime.jsx)(ButtonStartIcon,{\n className:classes.startIcon,\n ownerState:ownerState,\n children:startIconProp\n});\n const endIcon=endIconProp && (0,jsx_runtime.jsx)(ButtonEndIcon,{\n className:classes.endIcon,\n ownerState:ownerState,\n children:endIconProp\n});\n const positionClassName=buttonGroupButtonContextPositionClassName || '';\n return (0,jsx_runtime.jsxs)(ButtonRoot,(0,esm_extends.A)({\n ownerState:ownerState,\n className:(0,clsx.A)(contextProps.className,classes.root,className,positionClassName),\n component:component,\n disabled:disabled,\n focusRipple:!disableFocusRipple,\n focusVisibleClassName:(0,clsx.A)(classes.focusVisible,focusVisibleClassName),\n ref:ref,\n type:type\n},other,{\n classes:classes,\n children:[startIcon,children,endIcon]\n}));\n});\n false ? 0 :void 0;\n const Button_Button=(Button);\n;// ./node_modules/@mui/material/InputAdornment/inputAdornmentClasses.js\n\n\nfunction getInputAdornmentUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiInputAdornment',slot);\n}\nconst inputAdornmentClasses=(0,generateUtilityClasses.A)('MuiInputAdornment',['root','filled','standard','outlined','positionStart','positionEnd','disablePointerEvents','hiddenLabel','sizeSmall']);\n const InputAdornment_inputAdornmentClasses=(inputAdornmentClasses);\n;// ./node_modules/@mui/material/InputAdornment/InputAdornment.js\n'use client';\n\n\n\nvar InputAdornment_span;\nconst InputAdornment_excluded=[\"children\",\"className\",\"component\",\"disablePointerEvents\",\"disableTypography\",\"position\",\"variant\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst overridesResolver=(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,styles[`position${(0,capitalize.A)(ownerState.position)}`],ownerState.disablePointerEvents===true && styles.disablePointerEvents,styles[ownerState.variant]];\n};\nconst InputAdornment_useUtilityClasses=ownerState=>{\n const{\n classes,\n disablePointerEvents,\n hiddenLabel,\n position,\n size,\n variant\n}=ownerState;\n const slots={\n root:['root',disablePointerEvents && 'disablePointerEvents',position && `position${(0,capitalize.A)(position)}`,variant,hiddenLabel && 'hiddenLabel',size && `size${(0,capitalize.A)(size)}`]\n};\n return (0,composeClasses.A)(slots,getInputAdornmentUtilityClass,classes);\n};\nconst InputAdornmentRoot=(0,styled.Ay)('div',{\n name:'MuiInputAdornment',\n slot:'Root',\n overridesResolver\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n display:'flex',\n height:'0.01em',\n // Fix IE11 flexbox alignment. To remove at some point.\n maxHeight:'2em',\n alignItems:'center',\n whiteSpace:'nowrap',\n color:(theme.vars || theme).palette.action.active\n},ownerState.variant==='filled' &&{\n // Styles applied to the root element if `variant=\"filled\"`.\n [`&.${InputAdornment_inputAdornmentClasses.positionStart}&:not(.${InputAdornment_inputAdornmentClasses.hiddenLabel})`]:{\n marginTop:16\n}\n},ownerState.position==='start' &&{\n // Styles applied to the root element if `position=\"start\"`.\n marginRight:8\n},ownerState.position==='end' &&{\n // Styles applied to the root element if `position=\"end\"`.\n marginLeft:8\n},ownerState.disablePointerEvents===true &&{\n // Styles applied to the root element if `disablePointerEvents={true}`.\n pointerEvents:'none'\n}));\nconst InputAdornment=external_React_.forwardRef(function InputAdornment(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiInputAdornment'\n});\n const{\n children,\n className,\n component='div',\n disablePointerEvents=false,\n disableTypography=false,\n position,\n variant:variantProp\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,InputAdornment_excluded);;\n let variant=variantProp;\n if (variantProp && muiFormControl.variant){\n if (false) // removed by dead control flow\n{}\n}\n if (muiFormControl && !variant){\n variant=muiFormControl.variant;\n},props,{\n hiddenLabel:muiFormControl.hiddenLabel,\n size:muiFormControl.size,\n disablePointerEvents,\n position,\n variant\n});\n const classes=InputAdornment_useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsx)(FormControl_FormControlContext.Provider,{\n value:null,\n children:(0,jsx_runtime.jsx)(InputAdornmentRoot,(0,esm_extends.A)({\n as:component,\n ownerState:ownerState,\n className:(0,clsx.A)(classes.root,className),\n ref:ref\n},other,{\n children:typeof children==='string' && !disableTypography ? (0,jsx_runtime.jsx)(Typography_Typography,{\n color:\"text.secondary\",\n children:children\n}) :(0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[position==='start' ? (InputAdornment_span || (InputAdornment_span=(0,jsx_runtime.jsx)(\"span\",{\n className:\"notranslate\",\n children:\"\\u200B\"\n}))):null,children]\n})\n}))\n});\n});\n false ? 0 :void 0;\n const InputAdornment_InputAdornment=(InputAdornment);\n// EXTERNAL MODULE:./node_modules/@mui/system/useThemeWithoutDefault.js\nvar system_useThemeWithoutDefault=__webpack_require__(2923);\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\nfunction getWindow(node){\n if (node==null){\n return window;\n}\n\n if (node.toString() !=='[object Window]'){\n var ownerDocument=node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window:window;\n}\n\n return node;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n\n\nfunction isElement(node){\n var OwnElement=getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node){\n var OwnElement=getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node){\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot==='undefined'){\n return false;\n}\n\n var OwnElement=getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n;// ./node_modules/@popperjs/core/lib/utils/math.js\nvar math_max=Math.max;\nvar math_min=Math.min;\nvar round=Math.round;\n;// ./node_modules/@popperjs/core/lib/utils/userAgent.js\nfunction getUAString(){\n var uaData=navigator.userAgentData;\n\n if (uaData !=null && uaData.brands && Array.isArray(uaData.brands)){\n return uaData.brands.map(function (item){\n return item.brand+\"/\"+item.version;\n}).join(' ');\n}\n\n return navigator.userAgent;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\n\nfunction isLayoutViewport(){\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n\n\n\n\nfunction getBoundingClientRect(element,includeScale,isFixedStrategy){\n if (includeScale===void 0){\n includeScale=false;\n}\n\n if (isFixedStrategy===void 0){\n isFixedStrategy=false;\n}\n\n var clientRect=element.getBoundingClientRect();\n var scaleX=1;\n var scaleY=1;\n\n if (includeScale && isHTMLElement(element)){\n scaleX=element.offsetWidth>0 ? round(clientRect.width) / element.offsetWidth || 1:1;\n scaleY=element.offsetHeight>0 ? round(clientRect.height) / element.offsetHeight || 1:1;\n}\n\n var _ref=isElement(element) ? getWindow(element) :window,\n visualViewport=_ref.visualViewport;\n\n var addVisualOffsets=!isLayoutViewport() && isFixedStrategy;\n var x=(clientRect.left+(addVisualOffsets && visualViewport ? visualViewport.offsetLeft :0)) / scaleX;\n var y=(clientRect.top+(addVisualOffsets && visualViewport ? visualViewport.offsetTop :0)) / scaleY;\n var width=clientRect.width / scaleX;\n var height=clientRect.height / scaleY;\n return{\n width:width,\n height:height,\n top:y,\n right:x+width,\n bottom:y+height,\n left:x,\n x:x,\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n\nfunction getWindowScroll(node){\n var win=getWindow(node);\n var scrollLeft=win.pageXOffset;\n var scrollTop=win.pageYOffset;\n return{\n scrollLeft:scrollLeft,\n scrollTop:scrollTop\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\nfunction getHTMLElementScroll(element){\n return{\n scrollLeft:element.scrollLeft,\n scrollTop:element.scrollTop\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n\n\n\n\nfunction getNodeScroll(node){\n if (node===getWindow(node) || !isHTMLElement(node)){\n return getWindowScroll(node);\n}else{\n return getHTMLElementScroll(node);\n}\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\nfunction getNodeName(element){\n return element ? (element.nodeName || '').toLowerCase():null;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n\nfunction getDocumentElement(element){\n // $FlowFixMe[incompatible-return]:assume body is always available\n return ((isElement(element) ? element.ownerDocument:// $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n\n\n\nfunction getWindowScrollBarX(element){\n // If <html>has a CSS width greater than the viewport,then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019,IE11,Safari)\n return getBoundingClientRect(getDocumentElement(element)).left+getWindowScroll(element).scrollLeft;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n\nfunction getComputedStyle(element){\n return getWindow(element).getComputedStyle(element);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n\nfunction isScrollParent(element){\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle=getComputedStyle(element),\n overflow=_getComputedStyle.overflow,\n overflowX=_getComputedStyle.overflowX,\n overflowY=_getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow+overflowY+overflowX);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element){\n var rect=element.getBoundingClientRect();\n var scaleX=round(rect.width) / element.offsetWidth || 1;\n var scaleY=round(rect.height) / element.offsetHeight || 1;\n return scaleX !==1 || scaleY !==1;\n}// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement,offsetParent,isFixed){\n if (isFixed===void 0){\n isFixed=false;\n}\n\n var isOffsetParentAnElement=isHTMLElement(offsetParent);\n var offsetParentIsScaled=isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement=getDocumentElement(offsetParent);\n var rect=getBoundingClientRect(elementOrVirtualElement,offsetParentIsScaled,isFixed);\n var scroll={\n scrollLeft:0,\n scrollTop:0\n};\n var offsets={\n x:0,\n y:0\n};\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed){\n if (getNodeName(offsetParent) !=='body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)){\n scroll=getNodeScroll(offsetParent);\n}\n\n if (isHTMLElement(offsetParent)){\n offsets=getBoundingClientRect(offsetParent,true);\n offsets.x+=offsetParent.clientLeft;\n offsets.y+=offsetParent.clientTop;\n}else if (documentElement){\n offsets.x=getWindowScrollBarX(documentElement);\n}\n}\n\n return{\n x:rect.left+scroll.scrollLeft - offsets.x,\n y:rect.top+scroll.scrollTop - offsets.y,\n width:rect.width,\n height:rect.height\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element){\n var clientRect=getBoundingClientRect(element);// Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width=element.offsetWidth;\n var height=element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <=1){\n width=clientRect.width;\n}\n\n if (Math.abs(clientRect.height - height) <=1){\n height=clientRect.height;\n}\n\n return{\n x:element.offsetLeft,\n y:element.offsetTop,\n width:width,\n height:height\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n\n\n\nfunction getParentNode(element){\n if (getNodeName(element)==='html'){\n return element;\n}\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || (// DOM Element detected\n isShadowRoot(element) ? element.host:null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]:HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n);\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n\n\n\n\nfunction getScrollParent(node){\n if (['html','body','#document'].indexOf(getNodeName(node))>=0){\n // $FlowFixMe[incompatible-return]:assume body is always available\n return node.ownerDocument.body;\n}\n\n if (isHTMLElement(node) && isScrollParent(node)){\n return node;\n}\n\n return getScrollParent(getParentNode(node));\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n\n\n\n\n\n\nfunction listScrollParents(element,list){\n var _element$ownerDocumen;\n\n if (list===void 0){\n list=[];\n}\n\n var scrollParent=getScrollParent(element);\n var isBody=scrollParent===((_element$ownerDocumen=element.ownerDocument)==null ? void 0:_element$ownerDocumen.body);\n var win=getWindow(scrollParent);\n var target=isBody ? [win].concat(win.visualViewport || [],isScrollParent(scrollParent) ? scrollParent:[]):scrollParent;\n var updatedList=list.concat(target);\n return isBody ? updatedList:// $FlowFixMe[incompatible-call]:isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n\nfunction isTableElement(element){\n return ['table','td','th'].indexOf(getNodeName(element))>=0;\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element){\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position==='fixed'){\n return null;\n}\n\n return element.offsetParent;\n}// `.offsetParent` reports `null` for fixed elements,while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element){\n var isFirefox=/firefox/i.test(getUAString());\n var isIE=/Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)){\n // In IE 9,10 and 11 fixed elements containing block is always established by the viewport\n var elementCss=getComputedStyle(element);\n\n if (elementCss.position==='fixed'){\n return null;\n}\n}\n\n var currentNode=getParentNode(element);\n\n if (isShadowRoot(currentNode)){\n currentNode=currentNode.host;\n}\n\n while (isHTMLElement(currentNode) && ['html','body'].indexOf(getNodeName(currentNode)) < 0){\n var css=getComputedStyle(currentNode);// This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !=='none' || css.perspective !=='none' || css.contain==='paint' || ['transform','perspective'].indexOf(css.willChange) !==-1 || isFirefox && css.willChange==='filter' || isFirefox && css.filter && css.filter !=='none'){\n return currentNode;\n}else{\n currentNode=currentNode.parentNode;\n}\n}\n\n return null;\n}// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element){\n var window=getWindow(element);\n var offsetParent=getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position==='static'){\n offsetParent=getTrueOffsetParent(offsetParent);\n}\n\n if (offsetParent && (getNodeName(offsetParent)==='html' || getNodeName(offsetParent)==='body' && getComputedStyle(offsetParent).position==='static')){\n return window;\n}\n\n return offsetParent || getContainingBlock(element) || window;\n}\n;// ./node_modules/@popperjs/core/lib/enums.js\nvar enums_top='top';\nvar bottom='bottom';\nvar right='right';\nvar left='left';\nvar auto='auto';\nvar basePlacements=[enums_top,bottom,right,left];\nvar start='start';\nvar end='end';\nvar clippingParents='clippingParents';\nvar viewport='viewport';\nvar popper='popper';\nvar reference='reference';\nvar variationPlacements=basePlacements.reduce(function (acc,placement){\n return acc.concat([placement+\"-\"+start,placement+\"-\"+end]);\n},[]);\nvar enums_placements=[].concat(basePlacements,[auto]).reduce(function (acc,placement){\n return acc.concat([placement,placement+\"-\"+start,placement+\"-\"+end]);\n},[]);// modifiers that need to read the DOM\n\nvar beforeRead='beforeRead';\nvar read='read';\nvar afterRead='afterRead';// pure-logic modifiers\n\nvar beforeMain='beforeMain';\nvar main='main';\nvar afterMain='afterMain';// modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite='beforeWrite';\nvar write='write';\nvar afterWrite='afterWrite';\nvar modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];\n;// ./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n // source:https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers){\n var map=new Map();\n var visited=new Set();\n var result=[];\n modifiers.forEach(function (modifier){\n map.set(modifier.name,modifier);\n});// On visiting object,check for its dependencies and visit them recursively\n\n function sort(modifier){\n visited.add(modifier.name);\n var requires=[].concat(modifier.requires || [],modifier.requiresIfExists || []);\n requires.forEach(function (dep){\n if (!visited.has(dep)){\n var depModifier=map.get(dep);\n\n if (depModifier){\n sort(depModifier);\n}\n}\n});\n result.push(modifier);\n}\n\n modifiers.forEach(function (modifier){\n if (!visited.has(modifier.name)){\n // check for visited object\n sort(modifier);\n}\n});\n return result;\n}\n\nfunction orderModifiers(modifiers){\n // order based on dependencies\n var orderedModifiers=order(modifiers);// order based on phase\n\n return modifierPhases.reduce(function (acc,phase){\n return acc.concat(orderedModifiers.filter(function (modifier){\n return modifier.phase===phase;\n}));\n},[]);\n}\n;// ./node_modules/@popperjs/core/lib/utils/debounce.js\nfunction debounce_debounce(fn){\n var pending;\n return function (){\n if (!pending){\n pending=new Promise(function (resolve){\n Promise.resolve().then(function (){\n pending=undefined;\n resolve(fn());\n});\n});\n}\n\n return pending;\n};\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergeByName.js\nfunction mergeByName(modifiers){\n var merged=modifiers.reduce(function (merged,current){\n var existing=merged[current.name];,existing,current,{\n options:Object.assign({},existing.data,current.data)\n}):current;\n return merged;\n});// IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key){\n return merged[key];\n});\n}\n;// ./node_modules/@popperjs/core/lib/createPopper.js\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS={\n placement:'bottom',\n modifiers:[],\n strategy:'absolute'\n};\n\nfunction areValidElements(){\n for (var _len=arguments.length,args=new Array(_len),_key=0;_key < _len;_key++){\n args[_key]=arguments[_key];\n}\n\n return !args.some(function (element){\n return !(element && typeof element.getBoundingClientRect==='function');\n});\n}\n\nfunction popperGenerator(generatorOptions){\n if (generatorOptions===void 0){\n generatorOptions={};\n}\n\n var _generatorOptions=generatorOptions,\n _generatorOptions$def=_generatorOptions.defaultModifiers,\n defaultModifiers=_generatorOptions$def===void 0 ? [] :_generatorOptions$def,\n _generatorOptions$def2=_generatorOptions.defaultOptions,\n defaultOptions=_generatorOptions$def2===void 0 ? DEFAULT_OPTIONS :_generatorOptions$def2;\n return function createPopper(reference,popper,options){\n if (options===void 0){\n options=defaultOptions;\n}\n\n var state={\n placement:'bottom',\n orderedModifiers:[],\n options:Object.assign({},\n elements:{\n reference:reference,\n popper:popper\n}\n};\n var effectCleanupFns=[];\n var isDestroyed=false;\n var instance={\n state:state,\n setOptions:function setOptions(setOptionsAction){\n var options=typeof setOptionsAction==='function' ? setOptionsAction(state.options) :setOptionsAction;\n cleanupModifierEffects();,defaultOptions,state.options,options);\n state.scrollParents={\n reference:isElement(reference) ? listScrollParents(reference):reference.contextElement ? listScrollParents(reference.contextElement):[],\n popper:listScrollParents(popper)\n};// Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers=orderModifiers(mergeByName([].concat(defaultModifiers,state.options.modifiers)));// Strip out disabled modifiers\n\n state.orderedModifiers=orderedModifiers.filter(function (m){\n return m.enabled;\n});\n runModifierEffects();\n return instance.update();\n},\n // Sync update – it will always be executed,even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events),always\n // prefer the async Popper#update method\n forceUpdate:function forceUpdate(){\n if (isDestroyed){\n return;\n}\n\n var _state$elements=state.elements,\n reference=_state$elements.reference,\n popper=_state$elements.popper;// Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference,popper)){\n return;\n}// Store the reference and popper rects to be read by modifiers\n\n\n state.rects={\n reference:getCompositeRect(reference,getOffsetParent(popper),state.options.strategy==='fixed'),\n popper:getLayoutRect(popper)\n};// Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement,which then needs to re-run all the modifiers,because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset=false;\n state.placement=state.options.placement;// On each update cycle,the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data,use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier){\n return state.modifiersData[modifier.name]=Object.assign({},modifier.data);\n});\n\n for (var index=0;index < state.orderedModifiers.length;index++){\n if (state.reset===true){\n state.reset=false;\n index=-1;\n continue;\n}:_state$orderedModifie2,\n name=_state$orderedModifie.name;\n\n if (typeof fn==='function'){\n state=fn({\n state:state,\n options:_options,\n name:name,\n instance:instance\n}) || state;\n}\n}\n},\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update:debounce_debounce(function (){\n return new Promise(function (resolve){\n instance.forceUpdate();\n resolve(state);\n});\n}),\n destroy:function destroy(){\n cleanupModifierEffects();\n isDestroyed=true;\n}\n};\n\n if (!areValidElements(reference,popper)){\n return instance;\n}\n\n instance.setOptions(options).then(function (state){\n if (!isDestroyed && options.onFirstUpdate){\n options.onFirstUpdate(state);\n}\n});// Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use,but the modifier is run after the dependent\n // one.\n\n function runModifierEffects(){\n state.orderedModifiers.forEach(function (_ref){\n var name=_ref.name,\n _ref$options=_ref.options,\n options=_ref$options===void 0 ?{}:_ref$options,\n effect=_ref.effect;\n\n if (typeof effect==='function'){\n var cleanupFn=effect({\n state:state,\n name:name,\n instance:instance,\n options:options\n});;\n\n effectCleanupFns.push(cleanupFn || noopFn);\n}\n});\n}\n\n function cleanupModifierEffects(){\n effectCleanupFns.forEach(function (fn){\n return fn();\n});\n effectCleanupFns=[];\n}\n\n return instance;\n};\n}\nvar createPopper=(null && (popperGenerator()));// eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive={\n passive:true\n};\n\nfunction effect(_ref){\n var state=_ref.state,\n instance=_ref.instance,\n options=_ref.options;\n var _options$scroll=options.scroll,\n scroll=_options$scroll===void 0 ? true :_options$scroll,\n _options$resize=options.resize,\n resize=_options$resize===void 0 ? true :_options$resize;\n var window=getWindow(state.elements.popper);\n var scrollParents=[].concat(state.scrollParents.reference,state.scrollParents.popper);\n\n if (scroll){\n scrollParents.forEach(function (scrollParent){\n scrollParent.addEventListener('scroll',instance.update,passive);\n});\n}\n\n if (resize){\n window.addEventListener('resize',instance.update,passive);\n}\n\n return function (){\n if (scroll){\n scrollParents.forEach(function (scrollParent){\n scrollParent.removeEventListener('scroll',instance.update,passive);\n});\n}\n\n if (resize){\n window.removeEventListener('resize',instance.update,passive);\n}\n};\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const eventListeners=({\n name:'eventListeners',\n enabled:true,\n phase:'write',\n fn:function fn(){}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n\nfunction getBasePlacement(placement){\n return placement.split('-')[0];\n}\n;// ./node_modules/@popperjs/core/lib/utils/getVariation.js\nfunction getVariation(placement){\n return placement.split('-')[1];\n}\n;// ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\nfunction getMainAxisFromPlacement(placement){\n return ['top','bottom'].indexOf(placement)>=0 ? 'x':'y';\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n\n\n\n\nfunction computeOffsets(_ref){\n var reference=_ref.reference,\n element=_ref.element,\n placement=_ref.placement;\n var basePlacement=placement ? getBasePlacement(placement) :null;\n var variation=placement ? getVariation(placement) :null;\n var commonX=reference.x+reference.width / 2 - element.width / 2;\n var commonY=reference.y+reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement){\n case enums_top:\n offsets={\n x:commonX,\n y:reference.y - element.height\n};\n break;\n\n case bottom:\n offsets={\n x:commonX,\n y:reference.y+reference.height\n};\n break;\n\n case right:\n offsets={\n x:reference.x+reference.width,\n y:commonY\n};\n break;\n\n case left:\n offsets={\n x:reference.x - element.width,\n y:commonY\n};\n break;\n\n default:\n offsets={\n x:reference.x,\n y:reference.y\n};\n}\n\n var mainAxis=basePlacement ? getMainAxisFromPlacement(basePlacement) :null;\n\n if (mainAxis !=null){\n var len=mainAxis==='y' ? 'height' :'width';\n\n switch (variation){\n case start:\n offsets[mainAxis]=offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis]=offsets[mainAxis]+(reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n}\n}\n\n return offsets;\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n\n\nfunction popperOffsets(_ref){\n var state=_ref.state,\n name=_ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement,and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name]=computeOffsets({\n reference:state.rects.reference,\n element:state.rects.popper,\n strategy:'absolute',\n placement:state.placement\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_popperOffsets=({\n name:'popperOffsets',\n enabled:true,\n phase:'read',\n fn:popperOffsets,\n data:{}\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides={\n top:'auto',\n right:'auto',\n bottom:'auto',\n left:'auto'\n};// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR,but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref,win){\n var x=_ref.x,\n y=_ref.y;\n var dpr=win.devicePixelRatio || 1;\n return{\n x:round(x * dpr) / dpr || 0,\n y:round(y * dpr) / dpr || 0\n};\n}\n\nfunction mapToStyles(_ref2){\n var _Object$assign2;\n\n var popper=_ref2.popper,\n popperRect=_ref2.popperRect,\n placement=_ref2.placement,\n variation=_ref2.variation,\n offsets=_ref2.offsets,\n position=_ref2.position,\n gpuAcceleration=_ref2.gpuAcceleration,\n adaptive=_ref2.adaptive,\n roundOffsets=_ref2.roundOffsets,\n isFixed=_ref2.isFixed;\n var _offsets$x=offsets.x,\n x=_offsets$x===void 0 ? 0 :_offsets$x,\n _offsets$y=offsets.y,\n y=_offsets$y===void 0 ? 0 :_offsets$y;\n\n var _ref3=typeof roundOffsets==='function' ? roundOffsets({\n x:x,\n y:y\n}) :{\n x:x,\n y:y\n};\n\n x=_ref3.x;\n y=_ref3.y;\n var hasX=offsets.hasOwnProperty('x');\n var hasY=offsets.hasOwnProperty('y');\n var sideX=left;\n var sideY=enums_top;\n var win=window;\n\n if (adaptive){\n var offsetParent=getOffsetParent(popper);\n var heightProp='clientHeight';\n var widthProp='clientWidth';\n\n if (offsetParent===getWindow(popper)){\n offsetParent=getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !=='static' && position==='absolute'){\n heightProp='scrollHeight';\n widthProp='scrollWidth';\n}\n}// $FlowFixMe[incompatible-cast]:force type refinement,we compare offsetParent with window above,but Flow doesn't detect it\n\n\n offsetParent=offsetParent;\n\n if (placement===enums_top || (placement===left || placement===right) && variation===end){\n sideY=bottom;\n var offsetY=isFixed && offsetParent===win && win.visualViewport ? win.visualViewport.height:// $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -=offsetY - popperRect.height;\n y*=gpuAcceleration ? 1:-1;\n}\n\n if (placement===left || (placement===enums_top || placement===bottom) && variation===end){\n sideX=right;\n var offsetX=isFixed && offsetParent===win && win.visualViewport ? win.visualViewport.width:// $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -=offsetX - popperRect.width;\n x*=gpuAcceleration ? 1:-1;\n}\n}\n\n var commonStyles=Object.assign({\n position:position\n},adaptive && unsetSides);\n\n var _ref4=roundOffsets===true ? roundOffsetsByDPR({\n x:x,\n y:y\n},getWindow(popper)) :{\n x:x,\n y:y\n};\n\n x=_ref4.x;\n y=_ref4.y;\n\n if (gpuAcceleration){\n var _Object$assign;,_Object$assign[sideY]=hasY ? '0':'',_Object$assign[sideX]=hasX ? '0':'',_Object$assign.transform=(win.devicePixelRatio || 1) <=1 ? \"translate(\"+x+\"px,\"+y+\"px)\":\"translate3d(\"+x+\"px,\"+y+\"px,0)\",_Object$assign));\n},_Object$assign2[sideY]=hasY ? y+\"px\":'',_Object$assign2[sideX]=hasX ? x+\"px\":'',_Object$assign2.transform='',_Object$assign2));\n}\n\nfunction computeStyles(_ref5){\n var state=_ref5.state,\n options=_ref5.options;\n var _options$gpuAccelerat=options.gpuAcceleration,\n gpuAcceleration=_options$gpuAccelerat===void 0 ? true :_options$gpuAccelerat,\n _options$adaptive=options.adaptive,\n adaptive=_options$adaptive===void 0 ? true :_options$adaptive,\n _options$roundOffsets=options.roundOffsets,\n roundOffsets=_options$roundOffsets===void 0 ? true :_options$roundOffsets;\n var commonStyles={\n placement:getBasePlacement(state.placement),\n variation:getVariation(state.placement),\n popper:state.elements.popper,\n popperRect:state.rects.popper,\n gpuAcceleration:gpuAcceleration,\n isFixed:state.options.strategy==='fixed'\n};\n\n if (state.modifiersData.popperOffsets !=null){\n state.styles.popper=Object.assign({},commonStyles,{\n offsets:state.modifiersData.popperOffsets,\n position:state.options.strategy,\n adaptive:adaptive,\n roundOffsets:roundOffsets\n})));\n}\n\n if (state.modifiersData.arrow !=null){\n state.styles.arrow=Object.assign({},commonStyles,{\n offsets:state.modifiersData.arrow,\n position:'absolute',\n adaptive:false,\n roundOffsets:roundOffsets\n})));\n},state.attributes.popper,{\n 'data-popper-placement':state.placement\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_computeStyles=({\n name:'computeStyles',\n enabled:true,\n phase:'beforeWrite',\n fn:computeStyles,\n data:{}\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref){\n var state=_ref.state;\n Object.keys(state.elements).forEach(function (name){\n var style=state.styles[name] ||{};;\n var element=state.elements[name];// arrow is optional+virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)){\n return;\n}// Flow doesn't support to extend this property,but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style,style);\n Object.keys(attributes).forEach(function (name){\n var value=attributes[name];\n\n if (value===false){\n element.removeAttribute(name);\n}else{\n element.setAttribute(name,value===true ? '':value);\n}\n});\n});\n}\n\nfunction applyStyles_effect(_ref2){\n var state=_ref2.state;\n var initialStyles={\n popper:{\n position:state.options.strategy,\n left:'0',\n top:'0',\n margin:'0'\n},\n arrow:{\n position:'absolute'\n}\n};\n Object.assign(state.elements.popper.style,initialStyles.popper);\n state.styles=initialStyles;\n\n if (state.elements.arrow){\n Object.assign(state.elements.arrow.style,initialStyles.arrow);\n}\n\n return function (){\n Object.keys(state.elements).forEach(function (name){\n var element=state.elements[name];;\n var styleProperties=Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] :initialStyles[name]);// Set all values to an empty string to unset them\n\n var style=styleProperties.reduce(function (style,property){\n style[property]='';\n return style;\n});// arrow is optional+virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)){\n return;\n}\n\n Object.assign(element.style,style);\n Object.keys(attributes).forEach(function (attribute){\n element.removeAttribute(attribute);\n});\n});\n};\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_applyStyles=({\n name:'applyStyles',\n enabled:true,\n phase:'write',\n fn:applyStyles,\n effect:applyStyles_effect,\n requires:['computeStyles']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/offset.js\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement,rects,offset){\n var basePlacement=getBasePlacement(placement);\n var invertDistance=[left,enums_top].indexOf(basePlacement)>=0 ? -1 :1;,rects,{\n placement:placement\n})) :offset,\n skidding=_ref[0],\n distance=_ref[1];\n\n skidding=skidding || 0;\n distance=(distance || 0) * invertDistance;\n return [left,right].indexOf(basePlacement)>=0 ?{\n x:distance,\n y:skidding\n}:{\n x:skidding,\n y:distance\n};\n}\n\nfunction offset(_ref2){\n var state=_ref2.state,\n options=_ref2.options,\n name=_ref2.name;\n var _options$offset=options.offset,\n offset=_options$offset===void 0 ? [0,0] :_options$offset;\n var data=enums_placements.reduce(function (acc,placement){\n acc[placement]=distanceAndSkiddingToXY(placement,state.rects,offset);\n return acc;\n});\n var _data$state$placement=data[state.placement],\n x=_data$state$placement.x,\n y=_data$state$placement.y;\n\n if (state.modifiersData.popperOffsets !=null){\n state.modifiersData.popperOffsets.x+=x;\n state.modifiersData.popperOffsets.y+=y;\n}\n\n state.modifiersData[name]=data;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_offset=({\n name:'offset',\n enabled:true,\n phase:'main',\n requires:['popperOffsets'],\n fn:offset\n});\n;// ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\nvar hash={\n left:'right',\n right:'left',\n bottom:'top',\n top:'bottom'\n};\nfunction getOppositePlacement(placement){\n return placement.replace(/left|right|bottom|top/g,function (matched){\n return hash[matched];\n});\n}\n;// ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\nvar getOppositeVariationPlacement_hash={\n start:'end',\n end:'start'\n};\nfunction getOppositeVariationPlacement(placement){\n return placement.replace(/start|end/g,function (matched){\n return getOppositeVariationPlacement_hash[matched];\n});\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n\n\n\n\nfunction getViewportRect(element,strategy){\n var win=getWindow(element);\n var html=getDocumentElement(element);\n var visualViewport=win.visualViewport;\n var width=html.clientWidth;\n var height=html.clientHeight;\n var x=0;\n var y=0;\n\n if (visualViewport){\n width=visualViewport.width;\n height=visualViewport.height;\n var layoutViewport=isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy==='fixed'){\n x=visualViewport.offsetLeft;\n y=visualViewport.offsetTop;\n}\n}\n\n return{\n width:width,\n height:height,\n x:x+getWindowScrollBarX(element),\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n\n\n\n\n // Gets the entire size of the scrollable document area,even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element){\n var _element$ownerDocumen;\n\n var html=getDocumentElement(element);\n var winScroll=getWindowScroll(element);\n var body=(_element$ownerDocumen=element.ownerDocument)==null ? void 0 :_element$ownerDocumen.body;\n var width=math_max(html.scrollWidth,html.clientWidth,body ? body.scrollWidth :0,body ? body.clientWidth :0);\n var height=math_max(html.scrollHeight,html.clientHeight,body ? body.scrollHeight :0,body ? body.clientHeight :0);\n var x=-winScroll.scrollLeft+getWindowScrollBarX(element);\n var y=-winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction==='rtl'){\n x+=math_max(html.clientWidth,body ? body.clientWidth:0) - width;\n}\n\n return{\n width:width,\n height:height,\n x:x,\n y:y\n};\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/contains.js\n\nfunction contains(parent,child){\n var rootNode=child.getRootNode && child.getRootNode();// First,attempt with faster native method\n\n if (parent.contains(child)){\n return true;\n}// then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)){\n var next=child;\n\n do{\n if (next && parent.isSameNode(next)){\n return true;\n}// $FlowFixMe[prop-missing]:need a better way to handle this...\n\n\n next=next.parentNode || next.host;\n}while (next);\n}// Give up,the result is false\n\n\n return false;\n}\n;// ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\nfunction rectToClientRect(rect){\n return Object.assign({},rect,{\n left:rect.x,\n top:rect.y,\n right:rect.x+rect.width,\n bottom:rect.y+rect.height\n});\n}\n;// ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element,strategy){\n var rect=getBoundingClientRect(element,false,strategy==='fixed');\n rect.top=rect.top+element.clientTop;\n rect.left=rect.left+element.clientLeft;\n rect.bottom=rect.top+element.clientHeight;\n rect.right=rect.left+element.clientWidth;\n rect.width=element.clientWidth;\n rect.height=element.clientHeight;\n rect.x=rect.left;\n rect.y=rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element,clippingParent,strategy){\n return clippingParent===viewport ? rectToClientRect(getViewportRect(element,strategy)):isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent,strategy):rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element){\n var clippingParents=listScrollParents(getParentNode(element));\n var canEscapeClipping=['absolute','fixed'].indexOf(getComputedStyle(element).position)>=0;\n var clipperElement=canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) :element;\n\n if (!isElement(clipperElement)){\n return [];\n}// $FlowFixMe[incompatible-return]:https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent){\n return isElement(clippingParent) && contains(clippingParent,clipperElement) && getNodeName(clippingParent) !=='body';\n});\n}// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element,boundary,rootBoundary,strategy){\n var mainClippingParents=boundary==='clippingParents' ? getClippingParents(element) :[].concat(boundary);\n var clippingParents=[].concat(mainClippingParents,[rootBoundary]);\n var firstClippingParent=clippingParents[0];\n var clippingRect=clippingParents.reduce(function (accRect,clippingParent){\n var rect=getClientRectFromMixedType(element,clippingParent,strategy);\n accRect.top=math_max(rect.top,accRect.top);\n accRect.right=math_min(rect.right,accRect.right);\n accRect.bottom=math_min(rect.bottom,accRect.bottom);\n accRect.left=math_max(rect.left,accRect.left);\n return accRect;\n},getClientRectFromMixedType(element,firstClippingParent,strategy));\n clippingRect.width=clippingRect.right - clippingRect.left;\n clippingRect.height=clippingRect.bottom - clippingRect.top;\n clippingRect.x=clippingRect.left;\n clippingRect.y=clippingRect.top;\n return clippingRect;\n}\n;// ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\nfunction getFreshSideObject(){\n return{\n top:0,\n right:0,\n bottom:0,\n left:0\n};\n}\n;// ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n\nfunction mergePaddingObject(paddingObject){\n return Object.assign({},getFreshSideObject(),paddingObject);\n}\n;// ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\nfunction expandToHashMap(value,keys){\n return keys.reduce(function (hashMap,key){\n hashMap[key]=value;\n return hashMap;\n});\n}\n;// ./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state,options){\n if (options===void 0){\n options={};\n}\n\n var _options=options,\n _options$placement=_options.placement,\n placement=_options$placement===void 0 ? state.placement :_options$placement,\n _options$strategy=_options.strategy,\n strategy=_options$strategy===void 0 ? state.strategy :_options$strategy,\n _options$boundary=_options.boundary,\n boundary=_options$boundary===void 0 ? clippingParents :_options$boundary,\n _options$rootBoundary=_options.rootBoundary,\n rootBoundary=_options$rootBoundary===void 0 ? viewport :_options$rootBoundary,\n _options$elementConte=_options.elementContext,\n elementContext=_options$elementConte===void 0 ? popper :_options$elementConte,\n _options$altBoundary=_options.altBoundary,\n altBoundary=_options$altBoundary===void 0 ? false :_options$altBoundary,\n _options$padding=_options.padding,\n padding=_options$padding===void 0 ? 0 :_options$padding;\n var paddingObject=mergePaddingObject(typeof padding !=='number' ? padding :expandToHashMap(padding,basePlacements));\n var altContext=elementContext===popper ? reference :popper;\n var popperRect=state.rects.popper;\n var element=state.elements[altBoundary ? altContext :elementContext];\n var clippingClientRect=getClippingRect(isElement(element) ? element :element.contextElement || getDocumentElement(state.elements.popper),boundary,rootBoundary,strategy);\n var referenceClientRect=getBoundingClientRect(state.elements.reference);\n var popperOffsets=computeOffsets({\n reference:referenceClientRect,\n element:popperRect,\n strategy:'absolute',\n placement:placement\n});,popperRect,popperOffsets));\n var elementClientRect=elementContext===popper ? popperClientRect :referenceClientRect;// positive=overflowing the clipping rect\n // 0 or negative=within the clipping rect\n\n var overflowOffsets={\n top:clippingClientRect.top - elementClientRect.top+paddingObject.top,\n bottom:elementClientRect.bottom - clippingClientRect.bottom+paddingObject.bottom,\n left:clippingClientRect.left - elementClientRect.left+paddingObject.left,\n right:elementClientRect.right - clippingClientRect.right+paddingObject.right\n};\n var offsetData=state.modifiersData.offset;// Offsets can be applied only to the popper element\n\n if (elementContext===popper && offsetData){\n var offset=offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key){\n var multiply=[right,bottom].indexOf(key)>=0 ? 1:-1;\n var axis=[enums_top,bottom].indexOf(key)>=0 ? 'y':'x';\n overflowOffsets[key]+=offset[axis] * multiply;\n});\n}\n\n return overflowOffsets;\n}\n;// ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n\n\n\n\nfunction computeAutoPlacement(state,options){\n if (options===void 0){\n options={};\n}\n\n var _options=options,\n placement=_options.placement,\n boundary=_options.boundary,\n rootBoundary=_options.rootBoundary,\n padding=_options.padding,\n flipVariations=_options.flipVariations,\n _options$allowedAutoP=_options.allowedAutoPlacements,\n allowedAutoPlacements=_options$allowedAutoP===void 0 ? enums_placements :_options$allowedAutoP;\n var variation=getVariation(placement);\n var placements=variation ? flipVariations ? variationPlacements :variationPlacements.filter(function (placement){\n return getVariation(placement)===variation;\n}) :basePlacements;\n var allowedPlacements=placements.filter(function (placement){\n return allowedAutoPlacements.indexOf(placement)>=0;\n});\n\n if (allowedPlacements.length===0){\n allowedPlacements=placements;\n}// $FlowFixMe[incompatible-type]:Flow seems to have problems with two array unions...\n\n\n var overflows=allowedPlacements.reduce(function (acc,placement){\n acc[placement]=detectOverflow(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding\n})[getBasePlacement(placement)];\n return acc;\n});\n return Object.keys(overflows).sort(function (a,b){\n return overflows[a] - overflows[b];\n});\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/flip.js\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement){\n if (getBasePlacement(placement)===auto){\n return [];\n}\n\n var oppositePlacement=getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement),oppositePlacement,getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref){\n var state=_ref.state,\n options=_ref.options,\n name=_ref.name;\n\n if (state.modifiersData[name]._skip){\n return;\n}\n\n var _options$mainAxis=options.mainAxis,\n checkMainAxis=_options$mainAxis===void 0 ? true :_options$mainAxis,\n _options$altAxis=options.altAxis,\n checkAltAxis=_options$altAxis===void 0 ? true :_options$altAxis,\n specifiedFallbackPlacements=options.fallbackPlacements,\n padding=options.padding,\n boundary=options.boundary,\n rootBoundary=options.rootBoundary,\n altBoundary=options.altBoundary,\n _options$flipVariatio=options.flipVariations,\n flipVariations=_options$flipVariatio===void 0 ? true :_options$flipVariatio,\n allowedAutoPlacements=options.allowedAutoPlacements;\n var preferredPlacement=state.options.placement;\n var basePlacement=getBasePlacement(preferredPlacement);\n var isBasePlacement=basePlacement===preferredPlacement;\n var fallbackPlacements=specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] :getExpandedFallbackPlacements(preferredPlacement));\n var placements=[preferredPlacement].concat(fallbackPlacements).reduce(function (acc,placement){\n return acc.concat(getBasePlacement(placement)===auto ? computeAutoPlacement(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding,\n flipVariations:flipVariations,\n allowedAutoPlacements:allowedAutoPlacements\n}):placement);\n},[]);\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;\n var checksMap=new Map();\n var makeFallbackChecks=true;\n var firstFittingPlacement=placements[0];\n\n for (var i=0;i < placements.length;i++){\n var placement=placements[i];\n\n var _basePlacement=getBasePlacement(placement);\n\n var isStartVariation=getVariation(placement)===start;\n var isVertical=[enums_top,bottom].indexOf(_basePlacement)>=0;\n var len=isVertical ? 'width' :'height';\n var overflow=detectOverflow(state,{\n placement:placement,\n boundary:boundary,\n rootBoundary:rootBoundary,\n altBoundary:altBoundary,\n padding:padding\n});\n var mainVariationSide=isVertical ? isStartVariation ? right :left :isStartVariation ? bottom :enums_top;\n\n if (referenceRect[len]>popperRect[len]){\n mainVariationSide=getOppositePlacement(mainVariationSide);\n}\n\n var altVariationSide=getOppositePlacement(mainVariationSide);\n var checks=[];\n\n if (checkMainAxis){\n checks.push(overflow[_basePlacement] <=0);\n}\n\n if (checkAltAxis){\n checks.push(overflow[mainVariationSide] <=0,overflow[altVariationSide] <=0);\n}\n\n if (checks.every(function (check){\n return check;\n})){\n firstFittingPlacement=placement;\n makeFallbackChecks=false;\n break;\n}\n\n checksMap.set(placement,checks);\n}\n\n if (makeFallbackChecks){\n // `2` may be desired in some cases – research later\n var numberOfChecks=flipVariations ? 3 :1;\n\n var _loop=function _loop(_i){\n var fittingPlacement=placements.find(function (placement){\n var checks=checksMap.get(placement);\n\n if (checks){\n return checks.slice(0,_i).every(function (check){\n return check;\n});\n}\n});\n\n if (fittingPlacement){\n firstFittingPlacement=fittingPlacement;\n return \"break\";\n}\n};\n\n for (var _i=numberOfChecks;_i>0;_i--){\n var _ret=_loop(_i);\n\n if (_ret===\"break\") break;\n}\n}\n\n if (state.placement !==firstFittingPlacement){\n state.modifiersData[name]._skip=true;\n state.placement=firstFittingPlacement;\n state.reset=true;\n}\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_flip=({\n name:'flip',\n enabled:true,\n phase:'main',\n fn:flip,\n requiresIfExists:['offset'],\n data:{\n _skip:false\n}\n});\n;// ./node_modules/@popperjs/core/lib/utils/getAltAxis.js\nfunction getAltAxis(axis){\n return axis==='x' ? 'y':'x';\n}\n;// ./node_modules/@popperjs/core/lib/utils/within.js\n\nfunction within(min,value,max){\n return math_max(min,math_min(value,max));\n}\nfunction withinMaxClamp(min,value,max){\n var v=within(min,value,max);\n return v>max ? max:v;\n}\n;// ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref){\n var state=_ref.state,\n options=_ref.options,\n name=_ref.name;\n var _options$mainAxis=options.mainAxis,\n checkMainAxis=_options$mainAxis===void 0 ? true :_options$mainAxis,\n _options$altAxis=options.altAxis,\n checkAltAxis=_options$altAxis===void 0 ? false :_options$altAxis,\n boundary=options.boundary,\n rootBoundary=options.rootBoundary,\n altBoundary=options.altBoundary,\n padding=options.padding,\n _options$tether=options.tether,\n tether=_options$tether===void 0 ? true :_options$tether,\n _options$tetherOffset=options.tetherOffset,\n tetherOffset=_options$tetherOffset===void 0 ? 0 :_options$tetherOffset;\n var overflow=detectOverflow(state,{\n boundary:boundary,\n rootBoundary:rootBoundary,\n padding:padding,\n altBoundary:altBoundary\n});\n var basePlacement=getBasePlacement(state.placement);\n var variation=getVariation(state.placement);\n var isBasePlacement=!variation;\n var mainAxis=getMainAxisFromPlacement(basePlacement);\n var altAxis=getAltAxis(mainAxis);\n var popperOffsets=state.modifiersData.popperOffsets;\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;,state.rects,{\n placement:state.placement\n})) :tetherOffset;\n var normalizedTetherOffsetValue=typeof tetherOffsetValue==='number' ?{\n mainAxis:tetherOffsetValue,\n altAxis:tetherOffsetValue\n}:Object.assign({\n mainAxis:0,\n altAxis:0\n},tetherOffsetValue);\n var offsetModifierState=state.modifiersData.offset ? state.modifiersData.offset[state.placement] :null;\n var data={\n x:0,\n y:0\n};\n\n if (!popperOffsets){\n return;\n}\n\n if (checkMainAxis){\n var _offsetModifierState$;\n\n var mainSide=mainAxis==='y' ? enums_top :left;\n var altSide=mainAxis==='y' ? bottom :right;\n var len=mainAxis==='y' ? 'height' :'width';\n var offset=popperOffsets[mainAxis];\n var min=offset+overflow[mainSide];\n var max=offset - overflow[altSide];\n var additive=tether ? -popperRect[len] / 2 :0;\n var minLen=variation===start ? referenceRect[len] :popperRect[len];\n var maxLen=variation===start ? -popperRect[len] :-referenceRect[len];// We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement=state.elements.arrow;\n var arrowRect=tether && arrowElement ? getLayoutRect(arrowElement) :{\n width:0,\n height:0\n};\n var arrowPaddingObject=state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding:getFreshSideObject();\n var arrowPaddingMin=arrowPaddingObject[mainSide];\n var arrowPaddingMax=arrowPaddingObject[altSide];// If the reference length is smaller than the arrow length,we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary,the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen=within(0,referenceRect[len],arrowRect[len]);\n var minOffset=isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis:minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset=isBasePlacement ? -referenceRect[len] / 2+additive+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis:maxLen+arrowLen+arrowPaddingMax+normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent=state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset=arrowOffsetParent ? mainAxis==='y' ? arrowOffsetParent.clientTop || 0:arrowOffsetParent.clientLeft || 0:0;\n var offsetModifierValue=(_offsetModifierState$=offsetModifierState==null ? void 0:offsetModifierState[mainAxis]) !=null ? _offsetModifierState$:0;\n var tetherMin=offset+minOffset - offsetModifierValue - clientOffset;\n var tetherMax=offset+maxOffset - offsetModifierValue;\n var preventedOffset=within(tether ? math_min(min,tetherMin):min,offset,tether ? math_max(max,tetherMax):max);\n popperOffsets[mainAxis]=preventedOffset;\n data[mainAxis]=preventedOffset - offset;\n}\n\n if (checkAltAxis){\n var _offsetModifierState$2;\n\n var _mainSide=mainAxis==='x' ? enums_top:left;\n\n var _altSide=mainAxis==='x' ? bottom:right;\n\n var _offset=popperOffsets[altAxis];\n\n var _len=altAxis==='y' ? 'height':'width';\n\n var _min=_offset+overflow[_mainSide];\n\n var _max=_offset - overflow[_altSide];\n\n var isOriginSide=[enums_top,left].indexOf(basePlacement) !==-1;\n\n var _offsetModifierValue=(_offsetModifierState$2=offsetModifierState==null ? void 0:offsetModifierState[altAxis]) !=null ? _offsetModifierState$2:0;\n\n var _tetherMin=isOriginSide ? _min:_offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue+normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax=isOriginSide ? _offset+referenceRect[_len]+popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis:_max;\n\n var _preventedOffset=tether && isOriginSide ? withinMaxClamp(_tetherMin,_offset,_tetherMax):within(tether ? _tetherMin:_min,_offset,tether ? _tetherMax:_max);\n\n popperOffsets[altAxis]=_preventedOffset;\n data[altAxis]=_preventedOffset - _offset;\n}\n\n state.modifiersData[name]=data;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_preventOverflow=({\n name:'preventOverflow',\n enabled:true,\n phase:'main',\n fn:preventOverflow,\n requiresIfExists:['offset']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/arrow.js\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject=function toPaddingObject(padding,state){\n padding=typeof padding==='function' ? padding(Object.assign({},state.rects,{\n placement:state.placement\n})):padding;\n return mergePaddingObject(typeof padding !=='number' ? padding:expandToHashMap(padding,basePlacements));\n};\n\nfunction arrow(_ref){\n var _state$modifiersData$;\n\n var state=_ref.state,\n name=_ref.name,\n options=_ref.options;\n var arrowElement=state.elements.arrow;\n var popperOffsets=state.modifiersData.popperOffsets;\n var basePlacement=getBasePlacement(state.placement);\n var axis=getMainAxisFromPlacement(basePlacement);\n var isVertical=[left,right].indexOf(basePlacement)>=0;\n var len=isVertical ? 'height' :'width';\n\n if (!arrowElement || !popperOffsets){\n return;\n}\n\n var paddingObject=toPaddingObject(options.padding,state);\n var arrowRect=getLayoutRect(arrowElement);\n var minProp=axis==='y' ? enums_top :left;\n var maxProp=axis==='y' ? bottom :right;\n var endDiff=state.rects.reference[len]+state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff=popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent=getOffsetParent(arrowElement);\n var clientSize=arrowOffsetParent ? axis==='y' ? arrowOffsetParent.clientHeight || 0 :arrowOffsetParent.clientWidth || 0 :0;\n var centerToReference=endDiff / 2 - startDiff / 2;// Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min=paddingObject[minProp];\n var max=clientSize - arrowRect[len] - paddingObject[maxProp];\n var center=clientSize / 2 - arrowRect[len] / 2+centerToReference;\n var offset=within(min,center,max);// Prevents breaking syntax highlighting...\n\n var axisProp=axis;,_state$modifiersData$[axisProp]=offset,_state$modifiersData$.centerOffset=offset - center,_state$modifiersData$);\n}\n\nfunction arrow_effect(_ref2){\n var state=_ref2.state,\n options=_ref2.options;\n var _options$element=options.element,\n arrowElement=_options$element===void 0 ? '[data-popper-arrow]' :_options$element;\n\n if (arrowElement==null){\n return;\n}// CSS selector\n\n\n if (typeof arrowElement==='string'){\n arrowElement=state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement){\n return;\n}\n}\n\n if (!contains(state.elements.popper,arrowElement)){\n return;\n}\n\n state.elements.arrow=arrowElement;\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_arrow=({\n name:'arrow',\n enabled:true,\n phase:'main',\n fn:arrow,\n effect:arrow_effect,\n requires:['popperOffsets'],\n requiresIfExists:['preventOverflow']\n});\n;// ./node_modules/@popperjs/core/lib/modifiers/hide.js\n\n\n\nfunction getSideOffsets(overflow,rect,preventedOffsets){\n if (preventedOffsets===void 0){\n preventedOffsets={\n x:0,\n y:0\n};\n}\n\n return{\n top:overflow.top - rect.height - preventedOffsets.y,\n right:overflow.right - rect.width+preventedOffsets.x,\n bottom:overflow.bottom - rect.height+preventedOffsets.y,\n left:overflow.left - rect.width - preventedOffsets.x\n};\n}\n\nfunction isAnySideFullyClipped(overflow){\n return [enums_top,right,bottom,left].some(function (side){\n return overflow[side]>=0;\n});\n}\n\nfunction hide(_ref){\n var state=_ref.state,\n name=_ref.name;\n var referenceRect=state.rects.reference;\n var popperRect=state.rects.popper;\n var preventedOffsets=state.modifiersData.preventOverflow;\n var referenceOverflow=detectOverflow(state,{\n elementContext:'reference'\n});\n var popperAltOverflow=detectOverflow(state,{\n altBoundary:true\n});\n var referenceClippingOffsets=getSideOffsets(referenceOverflow,referenceRect);\n var popperEscapeOffsets=getSideOffsets(popperAltOverflow,popperRect,preventedOffsets);\n var isReferenceHidden=isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped=isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name]={\n referenceClippingOffsets:referenceClippingOffsets,\n popperEscapeOffsets:popperEscapeOffsets,\n isReferenceHidden:isReferenceHidden,\n hasPopperEscaped:hasPopperEscaped\n};,state.attributes.popper,{\n 'data-popper-reference-hidden':isReferenceHidden,\n 'data-popper-escaped':hasPopperEscaped\n});\n}// eslint-disable-next-line import/no-unused-modules\n\n\n const modifiers_hide=({\n name:'hide',\n enabled:true,\n phase:'main',\n requiresIfExists:['preventOverflow'],\n fn:hide\n});\n;// ./node_modules/@popperjs/core/lib/popper.js\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers=[eventListeners,modifiers_popperOffsets,modifiers_computeStyles,modifiers_applyStyles,modifiers_offset,modifiers_flip,modifiers_preventOverflow,modifiers_arrow,modifiers_hide];\nvar popper_createPopper=popperGenerator({\n defaultModifiers:defaultModifiers\n});// eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n;// ./node_modules/@mui/material/Popper/popperClasses.js\n\n\nfunction getPopperUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiPopper',slot);\n}\nconst popperClasses=(0,generateUtilityClasses.A)('MuiPopper',['root']);\n const Popper_popperClasses=((null && (popperClasses)));\n;// ./node_modules/@mui/material/Popper/BasePopper.js\n'use client';\n\n\n\nconst BasePopper_excluded=[\"anchorEl\",\"children\",\"direction\",\"disablePortal\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"slotProps\",\"slots\",\"TransitionProps\",\"ownerState\"],\n BasePopper_excluded2=[\"anchorEl\",\"children\",\"container\",\"direction\",\"disablePortal\",\"keepMounted\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"style\",\"transition\",\"slotProps\",\"slots\"];\n\n\n\n\n\n\n\n\n\nfunction flipPlacement(placement,direction){\n if (direction==='ltr'){\n return placement;\n}\n switch (placement){\n case 'bottom-end':\n return 'bottom-start';\n case 'bottom-start':\n return 'bottom-end';\n case 'top-end':\n return 'top-start';\n case 'top-start':\n return 'top-end';\n default:\n return placement;\n}\n}\nfunction BasePopper_resolveAnchorEl(anchorEl){\n return typeof anchorEl==='function' ? anchorEl():anchorEl;\n}\nfunction BasePopper_isHTMLElement(element){\n return element.nodeType !==undefined;\n}\nfunction isVirtualElement(element){\n return !BasePopper_isHTMLElement(element);\n}\nconst BasePopper_useUtilityClasses=ownerState=>{\n const{\n classes\n}=ownerState;\n const slots={\n root:['root']\n};\n return (0,composeClasses.A)(slots,getPopperUtilityClass,classes);\n};;\nconst PopperTooltip=external_React_.forwardRef(function PopperTooltip(props,forwardedRef){\n var _slots$root;\n const{\n anchorEl,\n children,\n direction,\n disablePortal,\n modifiers,\n open,\n placement:initialPlacement,\n popperOptions,\n popperRef:popperRefProp,\n slotProps={},\n TransitionProps\n // @ts-ignore internal logic\n // prevent from spreading to DOM,it can come from the parent component e.g. Select.\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,BasePopper_excluded);\n const tooltipRef=external_React_.useRef(null);\n const ownRef=(0,useForkRef.A)(tooltipRef,forwardedRef);\n const popperRef=external_React_.useRef(null);\n const handlePopperRef=(0,useForkRef.A)(popperRef,popperRefProp);\n const handlePopperRefRef=external_React_.useRef(handlePopperRef);\n (0,useEnhancedEffect.A)(()=>{\n handlePopperRefRef.current=handlePopperRef;\n},[handlePopperRef]);\n external_React_.useImperativeHandle(popperRefProp,()=>popperRef.current,[]);\n const rtlPlacement=flipPlacement(initialPlacement,direction);\n \n const [placement,setPlacement]=external_React_.useState(rtlPlacement);\n const [resolvedAnchorElement,setResolvedAnchorElement]=external_React_.useState(BasePopper_resolveAnchorEl(anchorEl));\n external_React_.useEffect(()=>{\n if (popperRef.current){\n popperRef.current.forceUpdate();\n}\n});\n external_React_.useEffect(()=>{\n if (anchorEl){\n setResolvedAnchorElement(BasePopper_resolveAnchorEl(anchorEl));\n}\n},[anchorEl]);\n (0,useEnhancedEffect.A)(()=>{\n if (!resolvedAnchorElement || !open){\n return undefined;\n}\n const handlePopperUpdate=data=>{\n setPlacement(data.placement);\n};\n let popperModifiers=[{\n name:'preventOverflow',\n options:{\n altBoundary:disablePortal\n}\n},{\n name:'flip',\n options:{\n altBoundary:disablePortal\n}\n},{\n name:'onUpdate',\n enabled:true,\n phase:'afterWrite',\n fn:({\n state\n})=>{\n handlePopperUpdate(state);\n}\n}];\n if (modifiers !=null){\n popperModifiers=popperModifiers.concat(modifiers);\n}\n if (popperOptions && popperOptions.modifiers !=null){\n popperModifiers=popperModifiers.concat(popperOptions.modifiers);\n}\n const popper=popper_createPopper(resolvedAnchorElement,tooltipRef.current,(0,esm_extends.A)({\n placement:rtlPlacement\n},popperOptions,{\n modifiers:popperModifiers\n}));\n handlePopperRefRef.current(popper);\n return ()=>{\n popper.destroy();\n handlePopperRefRef.current(null);\n};\n},[resolvedAnchorElement,disablePortal,modifiers,open,popperOptions,rtlPlacement]);\n const childProps={\n placement:placement\n};\n if (TransitionProps !==null){\n childProps.TransitionProps=TransitionProps;\n}\n const classes=BasePopper_useUtilityClasses(props);\n const Root=(_slots$root=slots.root) !=null ? _slots$root :'div';\n const rootProps=useSlotProps_useSlotProps({\n elementType:Root,\n externalSlotProps:slotProps.root,\n externalForwardedProps:other,\n additionalProps:{\n role:'tooltip',\n ref:ownRef\n},\n ownerState:props,\n className:classes.root\n});,rootProps,{\n children:typeof children==='function' ? children(childProps):children\n}));\n});\n\n\nconst Popper=external_React_.forwardRef(function Popper(props,forwardedRef){\n const{\n anchorEl,\n children,\n container:containerProp,\n direction='ltr',\n disablePortal=false,\n keepMounted=false,\n modifiers,\n open,\n placement='bottom',\n popperOptions=defaultPopperOptions,\n popperRef,\n style,\n transition=false,\n slotProps={}\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,BasePopper_excluded2);\n const [exited,setExited]=external_React_.useState(true);\n const handleEnter=()=>{\n setExited(false);\n};\n const handleExited=()=>{\n setExited(true);\n};\n if (!keepMounted && !open && (!transition || exited)){\n return null;\n}\n\n // If the container prop is provided,use that\n // If the anchorEl prop is provided,use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n let container;\n if (containerProp){\n container=containerProp;\n}else if (anchorEl){\n const resolvedAnchorEl=BasePopper_resolveAnchorEl(anchorEl);\n container=resolvedAnchorEl && BasePopper_isHTMLElement(resolvedAnchorEl) ? (0,ownerDocument_ownerDocument.A)(resolvedAnchorEl).body:(0,ownerDocument_ownerDocument.A)(null).body;\n}\n const display=!open && keepMounted && (!transition || exited) ? 'none' :undefined;\n const transitionProps=transition ?{\n in:open,\n onEnter:handleEnter,\n onExited:handleExited\n}:undefined;\n return (0,jsx_runtime.jsx)(Portal_Portal,{\n disablePortal:disablePortal,\n container:container,\n children:(0,jsx_runtime.jsx)(PopperTooltip,(0,esm_extends.A)({\n anchorEl:anchorEl,\n direction:direction,\n disablePortal:disablePortal,\n modifiers:modifiers,\n ref:forwardedRef,\n open:transition ? !exited:open,\n placement:placement,\n popperOptions:popperOptions,\n popperRef:popperRef,\n slotProps:slotProps,\n slots:slots\n},other,{\n style:(0,esm_extends.A)({\n // Prevents scroll issue,waiting for Popper.js to add this style once initiated.\n position:'fixed',\n // Fix Popper.js display issue\n top:0,\n left:0,\n display\n},style),\n TransitionProps:transitionProps,\n children:children\n}))\n});\n});\n false ? 0 :void 0;\n const BasePopper=(Popper);\n;// ./node_modules/@mui/material/Popper/Popper.js\n'use client';\n\n\n\nconst Popper_excluded=[\"anchorEl\",\"component\",\"components\",\"componentsProps\",\"container\",\"disablePortal\",\"keepMounted\",\"modifiers\",\"open\",\"placement\",\"popperOptions\",\"popperRef\",\"transition\",\"slots\",\"slotProps\"];\n\n\n\n\n\n\n\n\n\nconst PopperRoot=(0,styled.Ay)(BasePopper,{\n name:'MuiPopper',\n slot:'Root',\n overridesResolver:(props,styles)=>styles.root\n});\n\n\nconst Popper_Popper=external_React_.forwardRef(function Popper(inProps,ref){\n var _slots$root;\n const theme=(0,system_useThemeWithoutDefault.A)();\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiPopper'\n});\n const{\n anchorEl,\n component,\n components,\n componentsProps,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition,\n slots,\n slotProps\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Popper_excluded);\n const RootComponent=(_slots$root=slots==null ? void 0 :slots.root) !=null ? _slots$root :components==null ? void 0 :components.Root;\n const otherProps=(0,esm_extends.A)({\n anchorEl,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition\n},other);\n return (0,jsx_runtime.jsx)(PopperRoot,(0,esm_extends.A)({\n as:component,\n direction:theme==null ? void 0 :theme.direction,\n slots:{\n root:RootComponent\n},\n slotProps:slotProps !=null ? slotProps:componentsProps\n},otherProps,{\n ref:ref\n}));\n});\n false ? 0 :void 0;\n const material_Popper_Popper=(Popper_Popper);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useId.js\nvar utils_useId=__webpack_require__(1668);\n;// ./node_modules/@mui/material/Tooltip/tooltipClasses.js\n\n\nfunction getTooltipUtilityClass(slot){\n return (0,generateUtilityClass_generateUtilityClass.Ay)('MuiTooltip',slot);\n}\nconst tooltipClasses=(0,generateUtilityClasses.A)('MuiTooltip',['popper','popperInteractive','popperArrow','popperClose','tooltip','tooltipArrow','touch','tooltipPlacementLeft','tooltipPlacementRight','tooltipPlacementTop','tooltipPlacementBottom','arrow']);\n const Tooltip_tooltipClasses=(tooltipClasses);\n;// ./node_modules/@mui/material/Tooltip/Tooltip.js\n'use client';\n\n\n\nconst Tooltip_excluded=[\"arrow\",\"children\",\"classes\",\"components\",\"componentsProps\",\"describeChild\",\"disableFocusListener\",\"disableHoverListener\",\"disableInteractive\",\"disableTouchListener\",\"enterDelay\",\"enterNextDelay\",\"enterTouchDelay\",\"followCursor\",\"id\",\"leaveDelay\",\"leaveTouchDelay\",\"onClose\",\"onOpen\",\"open\",\"placement\",\"PopperComponent\",\"PopperProps\",\"slotProps\",\"slots\",\"title\",\"TransitionComponent\",\"TransitionProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction Tooltip_round(value){\n return Math.round(value * 1e5) / 1e5;\n}\nconst Tooltip_useUtilityClasses=ownerState=>{\n const{\n classes,\n disableInteractive,\n arrow,\n touch,\n placement\n}=ownerState;\n const slots={\n popper:['popper',!disableInteractive && 'popperInteractive',arrow && 'popperArrow'],\n tooltip:['tooltip',arrow && 'tooltipArrow',touch && 'touch',`tooltipPlacement${(0,capitalize.A)(placement.split('-')[0])}`],\n arrow:['arrow']\n};\n return (0,composeClasses.A)(slots,getTooltipUtilityClass,classes);\n};\nconst TooltipPopper=(0,styled.Ay)(material_Popper_Popper,{\n name:'MuiTooltip',\n slot:'Popper',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.popper,!ownerState.disableInteractive && styles.popperInteractive,ownerState.arrow && styles.popperArrow,!ownerState.open && styles.popperClose];\n}\n})(({\n theme,\n ownerState,\n open\n})=>(0,esm_extends.A)({\n zIndex:(theme.vars || theme).zIndex.tooltip,\n pointerEvents:'none'\n},!ownerState.disableInteractive &&{\n pointerEvents:'auto'\n},!open &&{\n pointerEvents:'none'\n},ownerState.arrow &&{\n [`&[data-popper-placement*=\"bottom\"] .${Tooltip_tooltipClasses.arrow}`]:{\n top:0,\n marginTop:'-0.71em',\n '&::before':{\n transformOrigin:'0 100%'\n}\n},\n [`&[data-popper-placement*=\"top\"] .${Tooltip_tooltipClasses.arrow}`]:{\n bottom:0,\n marginBottom:'-0.71em',\n '&::before':{\n transformOrigin:'100% 0'\n}\n},\n [`&[data-popper-placement*=\"right\"] .${Tooltip_tooltipClasses.arrow},!ownerState.isRtl ?{\n left:0,\n marginLeft:'-0.71em'\n}:{\n right:0,\n marginRight:'-0.71em'\n},{\n height:'1em',\n width:'0.71em',\n '&::before':{\n transformOrigin:'100% 100%'\n}\n}),\n [`&[data-popper-placement*=\"left\"] .${Tooltip_tooltipClasses.arrow},!ownerState.isRtl ?{\n right:0,\n marginRight:'-0.71em'\n}:{\n left:0,\n marginLeft:'-0.71em'\n},{\n height:'1em',\n width:'0.71em',\n '&::before':{\n transformOrigin:'0 0'\n}\n})\n}));\nconst TooltipTooltip=(0,styled.Ay)('div',{\n name:'MuiTooltip',\n slot:'Tooltip',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.tooltip,ownerState.touch && styles.touch,ownerState.arrow && styles.tooltipArrow,styles[`tooltipPlacement${(0,capitalize.A)(ownerState.placement.split('-')[0])}`]];\n}\n})(({\n theme,\n ownerState\n})=>(0,esm_extends.A)({\n backgroundColor:theme.vars ? theme.vars.palette.Tooltip.bg:(0,colorManipulator.X4)(theme.palette.grey[700],.92),\n borderRadius:(theme.vars || theme).shape.borderRadius,\n color:(theme.vars || theme).palette.common.white,\n fontFamily:theme.typography.fontFamily,\n padding:'4px 8px',\n fontSize:theme.typography.pxToRem(11),\n maxWidth:300,\n margin:2,\n wordWrap:'break-word',\n fontWeight:theme.typography.fontWeightMedium\n},ownerState.arrow &&{\n position:'relative',\n margin:0\n},ownerState.touch &&{\n padding:'8px 16px',\n fontSize:theme.typography.pxToRem(14),\n lineHeight:`${Tooltip_round(16 / 14)}em`,\n fontWeight:theme.typography.fontWeightRegular\n},{\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]:(0,esm_extends.A)({\n transformOrigin:'right center'\n},!ownerState.isRtl ? (0,esm_extends.A)({\n marginRight:'14px'\n},ownerState.touch &&{\n marginRight:'24px'\n}) :(0,esm_extends.A)({\n marginLeft:'14px'\n},ownerState.touch &&{\n marginLeft:'24px'\n})),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]:(0,esm_extends.A)({\n transformOrigin:'left center'\n},!ownerState.isRtl ? (0,esm_extends.A)({\n marginLeft:'14px'\n},ownerState.touch &&{\n marginLeft:'24px'\n}) :(0,esm_extends.A)({\n marginRight:'14px'\n},ownerState.touch &&{\n marginRight:'24px'\n})),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"top\"] &`]:(0,esm_extends.A)({\n transformOrigin:'center bottom',\n marginBottom:'14px'\n},ownerState.touch &&{\n marginBottom:'24px'\n}),\n [`.${Tooltip_tooltipClasses.popper}[data-popper-placement*=\"bottom\"] &`]:(0,esm_extends.A)({\n transformOrigin:'center top',\n marginTop:'14px'\n},ownerState.touch &&{\n marginTop:'24px'\n})\n}));\nconst TooltipArrow=(0,styled.Ay)('span',{\n name:'MuiTooltip',\n slot:'Arrow',\n overridesResolver:(props,styles)=>styles.arrow\n})(({\n theme\n})=>({\n overflow:'hidden',\n position:'absolute',\n width:'1em',\n height:'0.71em',\n boxSizing:'border-box',\n color:theme.vars ? theme.vars.palette.Tooltip.bg :(0,colorManipulator.X4)(theme.palette.grey[700],.9),\n '&::before':{\n content:'\"\"',\n margin:'auto',\n display:'block',\n width:'100%',\n height:'100%',\n backgroundColor:'currentColor',\n transform:'rotate(45deg)'\n}\n}));\nlet hystersisOpen=false;\nconst hystersisTimer=new useTimeout.E();\nlet cursorPosition={\n x:0,\n y:0\n};\nfunction testReset(){\n hystersisOpen=false;\n hystersisTimer.clear();\n}\nfunction composeEventHandler(handler,eventHandler){\n return (event,...params)=>{\n if (eventHandler){\n eventHandler(event,...params);\n}\n handler(event,...params);\n};\n}\n\n// TODO v6:Remove PopperComponent,PopperProps,TransitionComponent and TransitionProps.\nconst Tooltip=external_React_.forwardRef(function Tooltip(inProps,ref){\n var _ref,_slots$popper,_ref2,_ref3,_slots$transition,_ref4,_slots$tooltip,_ref5,_slots$arrow,_slotProps$popper,_ref6,_slotProps$popper2,_slotProps$transition,_slotProps$tooltip,_ref7,_slotProps$tooltip2,_slotProps$arrow,_ref8,_slotProps$arrow2;\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiTooltip'\n});\n const{\n arrow=false,\n children:childrenProp,\n components={},\n title,\n TransitionComponent:TransitionComponentProp=Grow_Grow,\n TransitionProps\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,Tooltip_excluded);\n\n // to prevent runtime errors,developers will need to provide a child as a React element anyway.\n const children=external_React_.isValidElement(childrenProp) ? childrenProp :(0,jsx_runtime.jsx)(\"span\",{\n children:childrenProp\n});\n const theme=styles_useTheme_useTheme();\n const isRtl=useRtl();\n const [childNode,setChildNode]=external_React_.useState();\n const [arrowRef,setArrowRef]=external_React_.useState(null);\n const ignoreNonTouchEvents=external_React_.useRef(false);\n const disableInteractive=disableInteractiveProp || followCursor;\n const closeTimer=(0,useTimeout.A)();\n const enterTimer=(0,useTimeout.A)();\n const leaveTimer=(0,useTimeout.A)();\n const touchTimer=(0,useTimeout.A)();\n const [openState,setOpenState]=(0,useControlled.A)({\n controlled:openProp,\n default:false,\n name:'Tooltip',\n state:'open'\n});\n let open=openState;\n const id=(0,utils_useId.A)(idProp);\n const prevUserSelect=external_React_.useRef();\n const stopTouchInteraction=(0,utils_useEventCallback.A)(()=>{\n if (prevUserSelect.current !==undefined){\n document.body.style.WebkitUserSelect=prevUserSelect.current;\n prevUserSelect.current=undefined;\n}\n touchTimer.clear();\n});\n external_React_.useEffect(()=>stopTouchInteraction,[stopTouchInteraction]);\n const handleOpen=event=>{\n hystersisTimer.clear();\n hystersisOpen=true;\n\n // The mouseover event will trigger for every nested element in the tooltip.\n // We can skip rerendering when the tooltip is already open.\n // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n setOpenState(true);\n if (onOpen && !open){\n onOpen(event);\n}\n};\n const handleClose=(0,utils_useEventCallback.A)(\n \n event=>{\n hystersisTimer.start(800+leaveDelay,()=>{\n hystersisOpen=false;\n});\n setOpenState(false);\n if (onClose && open){\n onClose(event);\n}\n closeTimer.start(theme.transitions.duration.shortest,()=>{\n ignoreNonTouchEvents.current=false;\n});\n});\n const handleMouseOver=event=>{\n if (ignoreNonTouchEvents.current && event.type !=='touchstart'){\n return;\n}\n\n // Remove the title ahead of time.\n // We don't want to wait for the next render commit.\n // We would risk displaying two tooltips at the same time (native+this one).\n if (childNode){\n childNode.removeAttribute('title');\n}\n enterTimer.clear();\n leaveTimer.clear();\n if (enterDelay || hystersisOpen && enterNextDelay){\n enterTimer.start(hystersisOpen ? enterNextDelay :enterDelay,()=>{\n handleOpen(event);\n});\n}else{\n handleOpen(event);\n}\n};\n const handleMouseLeave=event=>{\n enterTimer.clear();\n leaveTimer.start(leaveDelay,()=>{\n handleClose(event);\n});\n};\n const{\n isFocusVisibleRef,\n onBlur:handleBlurVisible,\n onFocus:handleFocusVisible,\n ref:focusVisibleRef\n}=(0,useIsFocusVisible.A)();\n // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).\n // We just need to re-render the Tooltip if the focus-visible state changes.\n const [,setChildIsFocusVisible]=external_React_.useState(false);\n const handleBlur=event=>{\n handleBlurVisible(event);\n if (isFocusVisibleRef.current===false){\n setChildIsFocusVisible(false);\n handleMouseLeave(event);\n}\n};\n const handleFocus=event=>{\n // Workaround for https://github.com/facebook/react/issues/7769\n // The autoFocus of React might trigger the event before the componentDidMount.\n // We need to account for this eventuality.\n if (!childNode){\n setChildNode(event.currentTarget);\n}\n handleFocusVisible(event);\n if (isFocusVisibleRef.current===true){\n setChildIsFocusVisible(true);\n handleMouseOver(event);\n}\n};\n const detectTouchStart=event=>{\n ignoreNonTouchEvents.current=true;\n const childrenProps=children.props;\n if (childrenProps.onTouchStart){\n childrenProps.onTouchStart(event);\n}\n};\n const handleTouchStart=event=>{\n detectTouchStart(event);\n leaveTimer.clear();\n closeTimer.clear();\n stopTouchInteraction();\n prevUserSelect.current=document.body.style.WebkitUserSelect;\n // Prevent iOS text selection on long-tap.\n document.body.style.WebkitUserSelect='none';\n touchTimer.start(enterTouchDelay,()=>{\n document.body.style.WebkitUserSelect=prevUserSelect.current;\n handleMouseOver(event);\n});\n};\n const handleTouchEnd=event=>{\n if (children.props.onTouchEnd){\n children.props.onTouchEnd(event);\n}\n stopTouchInteraction();\n leaveTimer.start(leaveTouchDelay,()=>{\n handleClose(event);\n});\n};\n external_React_.useEffect(()=>{\n if (!open){\n return undefined;\n}\n\n \n function handleKeyDown(nativeEvent){\n // IE11,Edge (prior to using Bink?) use 'Esc'\n if (nativeEvent.key==='Escape' || nativeEvent.key==='Esc'){\n handleClose(nativeEvent);\n}\n}\n document.addEventListener('keydown',handleKeyDown);\n return ()=>{\n document.removeEventListener('keydown',handleKeyDown);\n};\n},[handleClose,open]);\n const handleRef=(0,utils_useForkRef.A)(getReactElementRef(children),focusVisibleRef,setChildNode,ref);\n\n // There is no point in displaying an empty tooltip.\n // So we exclude all falsy values,except 0,which is valid.\n if (!title && title !==0){\n open=false;\n}\n const popperRef=external_React_.useRef();\n const handleMouseMove=event=>{\n const childrenProps=children.props;\n if (childrenProps.onMouseMove){\n childrenProps.onMouseMove(event);\n}\n cursorPosition={\n x:event.clientX,\n y:event.clientY\n};\n if (popperRef.current){\n popperRef.current.update();\n}\n};;\n const titleIsString=typeof title==='string';\n if (describeChild){\n nameOrDescProps.title=!open && titleIsString && !disableHoverListener ? title:null;\n nameOrDescProps['aria-describedby']=open ? id:null;\n}else{\n nameOrDescProps['aria-label']=titleIsString ? title:null;\n nameOrDescProps['aria-labelledby']=open && !titleIsString ? id:null;\n},nameOrDescProps,other,children.props,{\n className:(0,clsx.A)(other.className,children.props.className),\n onTouchStart:detectTouchStart,\n ref:handleRef\n},followCursor ?{\n onMouseMove:handleMouseMove\n});;\n if (!disableTouchListener){\n childrenProps.onTouchStart=handleTouchStart;\n childrenProps.onTouchEnd=handleTouchEnd;\n}\n if (!disableHoverListener){\n childrenProps.onMouseOver=composeEventHandler(handleMouseOver,childrenProps.onMouseOver);\n childrenProps.onMouseLeave=composeEventHandler(handleMouseLeave,childrenProps.onMouseLeave);\n if (!disableInteractive){\n interactiveWrapperListeners.onMouseOver=handleMouseOver;\n interactiveWrapperListeners.onMouseLeave=handleMouseLeave;\n}\n}\n if (!disableFocusListener){\n childrenProps.onFocus=composeEventHandler(handleFocus,childrenProps.onFocus);\n childrenProps.onBlur=composeEventHandler(handleBlur,childrenProps.onBlur);\n if (!disableInteractive){\n interactiveWrapperListeners.onFocus=handleFocus;\n interactiveWrapperListeners.onBlur=handleBlur;\n}\n}\n const popperOptions=external_React_.useMemo(()=>{\n var _PopperProps$popperOp;\n let tooltipModifiers=[{\n name:'arrow',\n enabled:Boolean(arrowRef),\n options:{\n element:arrowRef,\n padding:4\n}\n}];\n if ((_PopperProps$popperOp=PopperProps.popperOptions) !=null && _PopperProps$popperOp.modifiers){\n tooltipModifiers=tooltipModifiers.concat(PopperProps.popperOptions.modifiers);\n},PopperProps.popperOptions,{\n modifiers:tooltipModifiers\n});\n},[arrowRef,PopperProps]);,props,{\n isRtl,\n arrow,\n disableInteractive,\n placement,\n PopperComponentProp,\n touch:ignoreNonTouchEvents.current\n});\n const classes=Tooltip_useUtilityClasses(ownerState);\n const PopperComponent=(_ref=(_slots$popper=slots.popper) !=null ? _slots$popper :components.Popper) !=null ? _ref :TooltipPopper;\n const TransitionComponent=(_ref2=(_ref3=(_slots$transition=slots.transition) !=null ? _slots$transition :components.Transition) !=null ? _ref3 :TransitionComponentProp) !=null ? _ref2 :Grow_Grow;\n const TooltipComponent=(_ref4=(_slots$tooltip=slots.tooltip) !=null ? _slots$tooltip :components.Tooltip) !=null ? _ref4 :TooltipTooltip;\n const ArrowComponent=(_ref5=(_slots$arrow=slots.arrow) !=null ? _slots$arrow :components.Arrow) !=null ? _ref5 :TooltipArrow;,PopperProps,(_slotProps$popper=slotProps.popper) !=null ? _slotProps$popper :componentsProps.popper,{\n className:(0,clsx.A)(classes.popper,PopperProps==null ? void 0:PopperProps.className,(_ref6=(_slotProps$popper2=slotProps.popper) !=null ? _slotProps$popper2:componentsProps.popper)==null ? void 0:_ref6.className)\n}),ownerState);,TransitionProps,(_slotProps$transition=slotProps.transition) !=null ? _slotProps$transition :componentsProps.transition),ownerState);,(_slotProps$tooltip=slotProps.tooltip) !=null ? _slotProps$tooltip :componentsProps.tooltip,{\n className:(0,clsx.A)(classes.tooltip,(_ref7=(_slotProps$tooltip2=slotProps.tooltip) !=null ? _slotProps$tooltip2:componentsProps.tooltip)==null ? void 0:_ref7.className)\n}),ownerState);,(_slotProps$arrow=slotProps.arrow) !=null ? _slotProps$arrow :componentsProps.arrow,{\n className:(0,clsx.A)(classes.arrow,(_ref8=(_slotProps$arrow2=slotProps.arrow) !=null ? _slotProps$arrow2:componentsProps.arrow)==null ? void 0:_ref8.className)\n}),ownerState);\n return (0,jsx_runtime.jsxs)(external_React_.Fragment,{\n children:[external_React_.cloneElement(children,childrenProps),(0,jsx_runtime.jsx)(PopperComponent,(0,esm_extends.A)({\n as:PopperComponentProp !=null ? PopperComponentProp :material_Popper_Popper,\n placement:placement,\n anchorEl:followCursor ?{\n getBoundingClientRect:()=>({\n top:cursorPosition.y,\n left:cursorPosition.x,\n right:cursorPosition.x,\n bottom:cursorPosition.y,\n width:0,\n height:0\n})\n}:childNode,\n popperRef:popperRef,\n open:childNode ? open:false,\n id:id,\n transition:true\n},interactiveWrapperListeners,popperProps,{\n popperOptions:popperOptions,\n children:({\n TransitionProps:TransitionPropsInner\n})=>(0,jsx_runtime.jsx)(TransitionComponent,(0,esm_extends.A)({\n timeout:theme.transitions.duration.shorter\n},TransitionPropsInner,transitionProps,{\n children:(0,jsx_runtime.jsxs)(TooltipComponent,(0,esm_extends.A)({},tooltipProps,{\n children:[title,arrow ? (0,jsx_runtime.jsx)(ArrowComponent,(0,esm_extends.A)({},tooltipArrowProps,{\n ref:setArrowRef\n})):null]\n}))\n}))\n}))]\n});\n});\n false ? 0 :void 0;\n const Tooltip_Tooltip=(Tooltip);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Send.js\nvar Send=__webpack_require__(443);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Close.js\nvar Close=__webpack_require__(9781);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/SmartToy.js\nvar SmartToy=__webpack_require__(5926);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/ChatBubbleOutline.js\nvar ChatBubbleOutline=__webpack_require__(2255);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/AttachFile.js\nvar AttachFile=__webpack_require__(530);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Person.js\nvar icons_material_Person=__webpack_require__(1432);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/RecordVoiceOver.js\nvar RecordVoiceOver=__webpack_require__(7246);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Email.js\nvar Email=__webpack_require__(1845);\n;// ./node_modules/@reduxjs/toolkit/node_modules/redux/dist/redux.mjs\n// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code){\n return `Minified Redux error #${code};visit https://redux.js.org/Errors?code=${code}for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable=(()=>typeof Symbol===\"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default=$$observable;\n\n// src/utils/actionTypes.ts\nvar randomString=()=>Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes={\n INIT:`@@redux/INIT${randomString()}`,\n REPLACE:`@@redux/REPLACE${randomString()}`,\n PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default=ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction redux_isPlainObject(obj){\n if (typeof obj !==\"object\" || obj===null)\n return false;\n let proto=obj;\n while (Object.getPrototypeOf(proto) !==null){\n proto=Object.getPrototypeOf(proto);\n}\n return Object.getPrototypeOf(obj)===proto || Object.getPrototypeOf(obj)===null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val){\n if (val===void 0)\n return \"undefined\";\n if (val===null)\n return \"null\";\n const type=typeof val;\n switch (type){\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\":{\n return type;\n}\n}\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName=ctorName(val);\n switch (constructorName){\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n}\n return Object.prototype.toString.call(val).slice(8,-1).toLowerCase().replace(/\\s/g,\"\");\n}\nfunction ctorName(val){\n return typeof val.constructor===\"function\" ? val.constructor.name:null;\n}\nfunction isError(val){\n return val instanceof Error || typeof val.message===\"string\" && val.constructor && typeof val.constructor.stackTraceLimit===\"number\";\n}\nfunction isDate(val){\n if (val instanceof Date)\n return true;\n return typeof val.toDateString===\"function\" && typeof val.getDate===\"function\" && typeof val.setDate===\"function\";\n}\nfunction kindOf(val){\n let typeOfVal=typeof val;\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer,preloadedState,enhancer){\n if (typeof reducer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(2):0);\n}\n if (typeof preloadedState===\"function\" && typeof enhancer===\"function\" || typeof enhancer===\"function\" && typeof arguments[3]===\"function\"){\n throw new Error(true ? formatProdErrorMessage(0):0);\n}\n if (typeof preloadedState===\"function\" && typeof enhancer===\"undefined\"){\n enhancer=preloadedState;\n preloadedState=void 0;\n}\n if (typeof enhancer !==\"undefined\"){\n if (typeof enhancer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(1):0);\n}\n return enhancer(createStore)(reducer,preloadedState);\n}\n let currentReducer=reducer;\n let currentState=preloadedState;\n let currentListeners=new Map();\n let nextListeners=currentListeners;\n let listenerIdCounter=0;\n let isDispatching=false;\n function ensureCanMutateNextListeners(){\n if (nextListeners===currentListeners){\n nextListeners=new Map();\n currentListeners.forEach((listener,key)=>{\n nextListeners.set(key,listener);\n});\n}\n}\n function getState(){\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(3):0);\n}\n return currentState;\n}\n function subscribe(listener){\n if (typeof listener !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(4):0);\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(5):0);\n}\n let isSubscribed=true;\n ensureCanMutateNextListeners();\n const listenerId=listenerIdCounter++;\n nextListeners.set(listenerId,listener);\n return function unsubscribe(){\n if (!isSubscribed){\n return;\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(6):0);\n}\n isSubscribed=false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners=null;\n};\n}\n function dispatch(action){\n if (!redux_isPlainObject(action)){\n throw new Error(true ? formatProdErrorMessage(7):0);\n}\n if (typeof action.type===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(8):0);\n}\n if (typeof action.type !==\"string\"){\n throw new Error(true ? formatProdErrorMessage(17):0);\n}\n if (isDispatching){\n throw new Error(true ? formatProdErrorMessage(9):0);\n}\n try{\n isDispatching=true;\n currentState=currentReducer(currentState,action);\n}finally{\n isDispatching=false;\n}\n const listeners=currentListeners=nextListeners;\n listeners.forEach((listener)=>{\n listener();\n});\n return action;\n}\n function replaceReducer(nextReducer){\n if (typeof nextReducer !==\"function\"){\n throw new Error(true ? formatProdErrorMessage(10):0);\n}\n currentReducer=nextReducer;\n dispatch({\n type:actionTypes_default.REPLACE\n});\n}\n function observable(){\n const outerSubscribe=subscribe;\n return{\n \n subscribe(observer){\n if (typeof observer !==\"object\" || observer===null){\n throw new Error(true ? formatProdErrorMessage(11):0);\n}\n function observeState(){\n const observerAsObserver=observer;\n if (observerAsObserver.next){\n observerAsObserver.next(getState());\n}\n}\n observeState();\n const unsubscribe=outerSubscribe(observeState);\n return{\n unsubscribe\n};\n},\n [symbol_observable_default](){\n return this;\n}\n};\n}\n dispatch({\n type:actionTypes_default.INIT\n});\n const store={\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]:observable\n};\n return store;\n}\nfunction legacy_createStore(reducer,preloadedState,enhancer){\n return createStore(reducer,preloadedState,enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message){\n if (typeof console !==\"undefined\" && typeof console.error===\"function\"){\n console.error(message);\n}\n try{\n throw new Error(message);\n}catch (e){\n}\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState,reducers,action,unexpectedKeyCache){\n const reducerKeys=Object.keys(reducers);\n const argumentName=action && action.type===actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" :\"previous state received by the reducer\";\n if (reducerKeys.length===0){\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n}\n if (!redux_isPlainObject(inputState)){\n return `The ${argumentName}has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys:\"${reducerKeys.join('\",\"')}\"`;\n}\n const unexpectedKeys=Object.keys(inputState).filter((key)=>!reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key)=>{\n unexpectedKeyCache[key]=true;\n});\n if (action && action.type===actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length>0){\n return `Unexpected ${unexpectedKeys.length>1 ? \"keys\":\"key\"}\"${unexpectedKeys.join('\",\"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead:\"${reducerKeys.join('\",\"')}\". Unexpected keys will be ignored.`;\n}\n}\nfunction assertReducerShape(reducers){\n Object.keys(reducers).forEach((key)=>{\n const reducer=reducers[key];\n const initialState=reducer(void 0,{\n type:actionTypes_default.INIT\n});\n if (typeof initialState===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(12):0);\n}\n if (typeof reducer(void 0,{\n type:actionTypes_default.PROBE_UNKNOWN_ACTION()\n})===\"undefined\"){\n throw new Error(true ? formatProdErrorMessage(13):0);\n}\n});\n}\nfunction combineReducers(reducers){\n const reducerKeys=Object.keys(reducers);;\n for (let i=0;i < reducerKeys.length;i++){\n const key=reducerKeys[i];\n if (typeof reducers[key]===\"function\"){\n finalReducers[key]=reducers[key];\n}\n}\n const finalReducerKeys=Object.keys(finalReducers);\n let unexpectedKeyCache;\n let shapeAssertionError;\n try{\n assertReducerShape(finalReducers);\n}catch (e){\n shapeAssertionError=e;\n},action){\n if (shapeAssertionError){\n throw shapeAssertionError;\n}\n let hasChanged=false;;\n for (let i=0;i < finalReducerKeys.length;i++){\n const key=finalReducerKeys[i];\n const reducer=finalReducers[key];\n const previousStateForKey=state[key];\n const nextStateForKey=reducer(previousStateForKey,action);\n if (typeof nextStateForKey===\"undefined\"){\n const actionType=action && action.type;\n throw new Error(true ? formatProdErrorMessage(14):0);\n}\n nextState[key]=nextStateForKey;\n hasChanged=hasChanged || nextStateForKey !==previousStateForKey;\n}\n hasChanged=hasChanged || finalReducerKeys.length !==Object.keys(state).length;\n return hasChanged ? nextState:state;\n};\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator,dispatch){\n return function(...args){\n return dispatch(actionCreator.apply(this,args));\n};\n}\nfunction bindActionCreators(actionCreators,dispatch){\n if (typeof actionCreators===\"function\"){\n return bindActionCreator(actionCreators,dispatch);\n}\n if (typeof actionCreators !==\"object\" || actionCreators===null){\n throw new Error(true ? formatProdErrorMessage(16):0);\n};\n for (const key in actionCreators){\n const actionCreator=actionCreators[key];\n if (typeof actionCreator===\"function\"){\n boundActionCreators[key]=bindActionCreator(actionCreator,dispatch);\n}\n}\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs){\n if (funcs.length===0){\n return (arg)=>arg;\n}\n if (funcs.length===1){\n return funcs[0];\n}\n return funcs.reduce((a,b)=>(...args)=>a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares){\n return (createStore2)=>(reducer,preloadedState)=>{\n const store=createStore2(reducer,preloadedState);\n let dispatch=()=>{\n throw new Error(true ? formatProdErrorMessage(15):0);\n};\n const middlewareAPI={\n getState:store.getState,\n dispatch:(action,...args)=>dispatch(action,...args)\n};\n const chain=middlewares.map((middleware)=>middleware(middlewareAPI));\n dispatch=compose(...chain)(store.dispatch);\n return{\n ...store,\n dispatch\n};\n};\n}\n\n// src/utils/isAction.ts\nfunction redux_isAction(action){\n return redux_isPlainObject(action) && \"type\" in action && typeof action.type===\"string\";\n}\n\n//# sourceMappingURL=redux.mjs.map\n;// ./node_modules/@reduxjs/toolkit/node_modules/redux-thunk/dist/redux-thunk.mjs\n// src/index.ts\nfunction createThunkMiddleware(extraArgument){\n const middleware=({dispatch,getState})=>(next)=>(action)=>{\n if (typeof action===\"function\"){\n return action(dispatch,getState,extraArgument);\n}\n return next(action);\n};\n return middleware;\n}\nvar redux_thunk_thunk=createThunkMiddleware();\nvar withExtraArgument=createThunkMiddleware;\n\n\n;// ./node_modules/immer/dist/immer.mjs\n// src/utils/env.ts\nvar NOTHING=Symbol.for(\"immer-nothing\");\nvar DRAFTABLE=Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE=Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors=false ? 0 :[];\nfunction die(error,...args){\n if (false) // removed by dead control flow\n{}\n throw new Error(\n `[Immer] minified error nr:${error}. Full error at:https://bit.ly/3cXEKWf`\n);\n}\n\n// src/utils/common.ts\nvar getPrototypeOf=Object.getPrototypeOf;\nfunction immer_isDraft(value){\n return !!value && !!value[DRAFT_STATE];\n}\nfunction isDraftable(value){\n if (!value)\n return false;\n return immer_isPlainObject(value) || Array.isArray(value) || !!value[DRAFTABLE] || !!value.constructor?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString=Object.prototype.constructor.toString();\nfunction immer_isPlainObject(value){\n if (!value || typeof value !==\"object\")\n return false;\n const proto=getPrototypeOf(value);\n if (proto===null){\n return true;\n}\n const Ctor=Object.hasOwnProperty.call(proto,\"constructor\") && proto.constructor;\n if (Ctor===Object)\n return true;\n return typeof Ctor==\"function\" && Function.toString.call(Ctor)===objectCtorString;\n}\nfunction original(value){\n if (!immer_isDraft(value))\n die(15,value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj,iter){\n if (getArchtype(obj)===0){\n Reflect.ownKeys(obj).forEach((key)=>{\n iter(key,obj[key],obj);\n});\n}else{\n obj.forEach((entry,index)=>iter(index,entry,obj));\n}\n}\nfunction getArchtype(thing){\n const state=thing[DRAFT_STATE];\n return state ? state.type_:Array.isArray(thing) ? 1:isMap(thing) ? 2:isSet(thing) ? 3:0;\n}\nfunction has(thing,prop){\n return getArchtype(thing)===2 ? thing.has(prop):Object.prototype.hasOwnProperty.call(thing,prop);\n}\nfunction get(thing,prop){\n return getArchtype(thing)===2 ? thing.get(prop):thing[prop];\n}\nfunction set(thing,propOrOldValue,value){\n const t=getArchtype(thing);\n if (t===2)\n thing.set(propOrOldValue,value);\n else if (t===3){\n thing.add(value);\n}else\n thing[propOrOldValue]=value;\n}\nfunction is(x,y){\n if (x===y){\n return x !==0 || 1 / x===1 / y;\n}else{\n return x !==x && y !==y;\n}\n}\nfunction isMap(target){\n return target instanceof Map;\n}\nfunction isSet(target){\n return target instanceof Set;\n}\nfunction latest(state){\n return state.copy_ || state.base_;\n}\nfunction shallowCopy(base,strict){\n if (isMap(base)){\n return new Map(base);\n}\n if (isSet(base)){\n return new Set(base);\n}\n if (Array.isArray(base))\n return Array.prototype.slice.call(base);\n const isPlain=immer_isPlainObject(base);\n if (strict===true || strict===\"class_only\" && !isPlain){\n const descriptors=Object.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys=Reflect.ownKeys(descriptors);\n for (let i=0;i < keys.length;i++){\n const key=keys[i];\n const desc=descriptors[key];\n if (desc.writable===false){\n desc.writable=true;\n desc.configurable=true;\n}\n if (desc.get || desc.set)\n descriptors[key]={\n configurable:true,\n writable:true,\n // could live with !!desc.set as well here...\n enumerable:desc.enumerable,\n value:base[key]\n};\n}\n return Object.create(getPrototypeOf(base),descriptors);\n}else{\n const proto=getPrototypeOf(base);\n if (proto !==null && isPlain){\n return{...base};\n}\n const obj=Object.create(proto);\n return Object.assign(obj,base);\n}\n}\nfunction freeze(obj,deep=false){\n if (isFrozen(obj) || immer_isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj)>1){\n obj.set=obj.add=obj.clear=obj.delete=dontMutateFrozenCollections;\n}\n Object.freeze(obj);\n if (deep)\n Object.entries(obj).forEach(([key,value])=>freeze(value,true));\n return obj;\n}\nfunction dontMutateFrozenCollections(){\n die(2);\n}\nfunction isFrozen(obj){\n return Object.isFrozen(obj);\n};\nfunction getPlugin(pluginKey){\n const plugin=plugins[pluginKey];\n if (!plugin){\n die(0,pluginKey);\n}\n return plugin;\n}\nfunction loadPlugin(pluginKey,implementation){\n if (!plugins[pluginKey])\n plugins[pluginKey]=implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nfunction getCurrentScope(){\n return currentScope;\n}\nfunction createScope(parent_,immer_){\n return{\n drafts_:[],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope,we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_:true,\n unfinalizedDrafts_:0\n};\n}\nfunction usePatchesInScope(scope,patchListener){\n if (patchListener){\n getPlugin(\"Patches\");\n scope.patches_=[];\n scope.inversePatches_=[];\n scope.patchListener_=patchListener;\n}\n}\nfunction revokeScope(scope){\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_=null;\n}\nfunction leaveScope(scope){\n if (scope===currentScope){\n currentScope=scope.parent_;\n}\n}\nfunction enterScope(immer2){\n return currentScope=createScope(currentScope,immer2);\n}\nfunction revokeDraft(draft){\n const state=draft[DRAFT_STATE];\n if (state.type_===0 || state.type_===1)\n state.revoke_();\n else\n state.revoked_=true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result,scope){\n scope.unfinalizedDrafts_=scope.drafts_.length;\n const baseDraft=scope.drafts_[0];\n const isReplaced=result !==void 0 && result !==baseDraft;\n if (isReplaced){\n if (baseDraft[DRAFT_STATE].modified_){\n revokeScope(scope);\n die(4);\n}\n if (isDraftable(result)){\n result=finalize(scope,result);\n if (!scope.parent_)\n maybeFreeze(scope,result);\n}\n if (scope.patches_){\n getPlugin(\"Patches\").generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope.patches_,\n scope.inversePatches_\n);\n}\n}else{\n result=finalize(scope,baseDraft,[]);\n}\n revokeScope(scope);\n if (scope.patches_){\n scope.patchListener_(scope.patches_,scope.inversePatches_);\n}\n return result !==NOTHING ? result:void 0;\n}\nfunction finalize(rootScope,value,path){\n if (isFrozen(value))\n return value;\n const state=value[DRAFT_STATE];\n if (!state){\n each(\n value,\n (key,childValue)=>finalizeProperty(rootScope,state,value,key,childValue,path)\n);\n return value;\n}\n if (state.scope_ !==rootScope)\n return value;\n if (!state.modified_){\n maybeFreeze(rootScope,state.base_,true);\n return state.base_;\n}\n if (!state.finalized_){\n state.finalized_=true;\n state.scope_.unfinalizedDrafts_--;\n const result=state.copy_;\n let resultEach=result;\n let isSet2=false;\n if (state.type_===3){\n resultEach=new Set(result);\n result.clear();\n isSet2=true;\n}\n each(\n resultEach,\n (key,childValue)=>finalizeProperty(rootScope,state,result,key,childValue,path,isSet2)\n);\n maybeFreeze(rootScope,result,false);\n if (path && rootScope.patches_){\n getPlugin(\"Patches\").generatePatches_(\n state,\n path,\n rootScope.patches_,\n rootScope.inversePatches_\n);\n}\n}\n return state.copy_;\n}\nfunction finalizeProperty(rootScope,parentState,targetObject,prop,childValue,rootPath,targetIsSet){\n if (false)\n // removed by dead control flow\n{}\n if (immer_isDraft(childValue)){\n const path=rootPath && parentState && parentState.type_ !==3 && // Set objects are atomic since they have no keys.\n !has(parentState.assigned_,prop) ? rootPath.concat(prop) :void 0;\n const res=finalize(rootScope,childValue,path);\n set(targetObject,prop,res);\n if (immer_isDraft(res)){\n rootScope.canAutoFreeze_=false;\n}else\n return;\n}else if (targetIsSet){\n targetObject.add(childValue);\n}\n if (isDraftable(childValue) && !isFrozen(childValue)){\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1){\n return;\n}\n finalize(rootScope,childValue);\n if ((!parentState || !parentState.scope_.parent_) && typeof prop !==\"symbol\" && Object.prototype.propertyIsEnumerable.call(targetObject,prop))\n maybeFreeze(rootScope,childValue);\n}\n}\nfunction maybeFreeze(scope,value,deep=false){\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_){\n freeze(value,deep);\n}\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base,parent){\n const isArray=Array.isArray(base);\n const state={\n type_:isArray ? 1 :0,\n // Track which produce call this is associated with.\n scope_:parent ? parent.scope_ :getCurrentScope(),\n // True for both shallow and deep changes.\n modified_:false,\n // Used during finalization.\n finalized_:false,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_:{},\n // The parent draft state.\n parent_:parent,\n // The base state.\n base_:base,\n // The base proxy.\n draft_:null,\n // set below\n // The base copy with any updated values.\n copy_:null,\n // Called by the `produce` function.\n revoke_:null,\n isManual_:false\n};\n let target=state;\n let traps=objectTraps;\n if (isArray){\n target=[state];\n traps=arrayTraps;\n}\n const{revoke,proxy}=Proxy.revocable(target,traps);\n state.draft_=proxy;\n state.revoke_=revoke;\n return proxy;\n}\nvar objectTraps={\n get(state,prop){\n if (prop===DRAFT_STATE)\n return state;\n const source=latest(state);\n if (!has(source,prop)){\n return readPropFromProto(state,source,prop);\n}\n const value=source[prop];\n if (state.finalized_ || !isDraftable(value)){\n return value;\n}\n if (value===peek(state.base_,prop)){\n prepareCopy(state);\n return state.copy_[prop]=createProxy(value,state);\n}\n return value;\n},\n has(state,prop){\n return prop in latest(state);\n},\n ownKeys(state){\n return Reflect.ownKeys(latest(state));\n},\n set(state,prop,value){\n const desc=getDescriptorFromProto(latest(state),prop);\n if (desc?.set){\n desc.set.call(state.draft_,value);\n return true;\n}\n if (!state.modified_){\n const current2=peek(latest(state),prop);\n const currentState=current2?.[DRAFT_STATE];\n if (currentState && currentState.base_===value){\n state.copy_[prop]=value;\n state.assigned_[prop]=false;\n return true;\n}\n if (is(value,current2) && (value !==void 0 || has(state.base_,prop)))\n return true;\n prepareCopy(state);\n markChanged(state);\n}\n if (state.copy_[prop]===value && // special case:handle new props with value 'undefined'\n (value !==void 0 || prop in state.copy_) || // special case:NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop]=value;\n state.assigned_[prop]=true;\n return true;\n},\n deleteProperty(state,prop){\n if (peek(state.base_,prop) !==void 0 || prop in state.base_){\n state.assigned_[prop]=false;\n prepareCopy(state);\n markChanged(state);\n}else{\n delete state.assigned_[prop];\n}\n if (state.copy_){\n delete state.copy_[prop];\n}\n return true;\n},\n // Note:We never coerce `desc.value` into an Immer draft,because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state,prop){\n const owner=latest(state);\n const desc=Reflect.getOwnPropertyDescriptor(owner,prop);\n if (!desc)\n return desc;\n return{\n writable:true,\n configurable:state.type_ !==1 || prop !==\"length\",\n enumerable:desc.enumerable,\n value:owner[prop]\n};\n},\n defineProperty(){\n die(11);\n},\n getPrototypeOf(state){\n return getPrototypeOf(state.base_);\n},\n setPrototypeOf(){\n die(12);\n}\n};;\neach(objectTraps,(key,fn)=>{\n arrayTraps[key]=function(){\n arguments[0]=arguments[0][0];\n return fn.apply(this,arguments);\n};\n});\narrayTraps.deleteProperty=function(state,prop){\n if (false)\n // removed by dead control flow\n{}\n return arrayTraps.set.call(this,state,prop,void 0);\n};\narrayTraps.set=function(state,prop,value){\n if (false)\n // removed by dead control flow\n{}\n return objectTraps.set.call(this,state[0],prop,value,state[0]);\n};\nfunction peek(draft,prop){\n const state=draft[DRAFT_STATE];\n const source=state ? latest(state):draft;\n return source[prop];\n}\nfunction readPropFromProto(state,source,prop){\n const desc=getDescriptorFromProto(source,prop);\n return desc ? `value` in desc ? desc.value:(\n // This is a very special case,if the prop is a getter defined by the\n // prototype,we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n):void 0;\n}\nfunction getDescriptorFromProto(source,prop){\n if (!(prop in source))\n return void 0;\n let proto=getPrototypeOf(source);\n while (proto){\n const desc=Object.getOwnPropertyDescriptor(proto,prop);\n if (desc)\n return desc;\n proto=getPrototypeOf(proto);\n}\n return void 0;\n}\nfunction markChanged(state){\n if (!state.modified_){\n state.modified_=true;\n if (state.parent_){\n markChanged(state.parent_);\n}\n}\n}\nfunction prepareCopy(state){\n if (!state.copy_){\n state.copy_=shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n);\n}\n}\n\n// src/core/immerClass.ts\nvar Immer2=class{\n constructor(config){\n this.autoFreeze_=true;\n this.useStrictShallowCopy_=false;\n \n this.produce=(base,recipe,patchListener)=>{\n if (typeof base===\"function\" && typeof recipe !==\"function\"){\n const defaultBase=recipe;\n recipe=base;\n const self=this;\n return function curriedProduce(base2=defaultBase,...args){\n return self.produce(base2,(draft)=>recipe.call(this,draft,...args));\n};\n}\n if (typeof recipe !==\"function\")\n die(6);\n if (patchListener !==void 0 && typeof patchListener !==\"function\")\n die(7);\n let result;\n if (isDraftable(base)){\n const scope=enterScope(this);\n const proxy=createProxy(base,void 0);\n let hasError=true;\n try{\n result=recipe(proxy);\n hasError=false;\n}finally{\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n}\n usePatchesInScope(scope,patchListener);\n return processResult(result,scope);\n}else if (!base || typeof base !==\"object\"){\n result=recipe(base);\n if (result===void 0)\n result=base;\n if (result===NOTHING)\n result=void 0;\n if (this.autoFreeze_)\n freeze(result,true);\n if (patchListener){\n const p=[];\n const ip=[];\n getPlugin(\"Patches\").generateReplacementPatches_(base,result,p,ip);\n patchListener(p,ip);\n}\n return result;\n}else\n die(1,base);\n};\n this.produceWithPatches=(base,recipe)=>{\n if (typeof base===\"function\"){\n return (state,...args)=>this.produceWithPatches(state,(draft)=>base(draft,...args));\n}\n let patches,inversePatches;\n const result=this.produce(base,recipe,(p,ip)=>{\n patches=p;\n inversePatches=ip;\n});\n return [result,patches,inversePatches];\n};\n if (typeof config?.autoFreeze===\"boolean\")\n this.setAutoFreeze(config.autoFreeze);\n if (typeof config?.useStrictShallowCopy===\"boolean\")\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n}\n createDraft(base){\n if (!isDraftable(base))\n die(8);\n if (immer_isDraft(base))\n base=immer_current(base);\n const scope=enterScope(this);\n const proxy=createProxy(base,void 0);\n proxy[DRAFT_STATE].isManual_=true;\n leaveScope(scope);\n return proxy;\n}\n finishDraft(draft,patchListener){\n const state=draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const{scope_:scope}=state;\n usePatchesInScope(scope,patchListener);\n return processResult(void 0,scope);\n}\n \n setAutoFreeze(value){\n this.autoFreeze_=value;\n}\n \n setUseStrictShallowCopy(value){\n this.useStrictShallowCopy_=value;\n}\n applyPatches(base,patches){\n let i;\n for (i=patches.length - 1;i>=0;i--){\n const patch=patches[i];\n if (patch.path.length===0 && patch.op===\"replace\"){\n base=patch.value;\n break;\n}\n}\n if (i>-1){\n patches=patches.slice(i+1);\n}\n const applyPatchesImpl=getPlugin(\"Patches\").applyPatches_;\n if (immer_isDraft(base)){\n return applyPatchesImpl(base,patches);\n}\n return this.produce(\n base,\n (draft)=>applyPatchesImpl(draft,patches)\n);\n}\n};\nfunction createProxy(value,parent){\n const draft=isMap(value) ? getPlugin(\"MapSet\").proxyMap_(value,parent):isSet(value) ? getPlugin(\"MapSet\").proxySet_(value,parent):createProxyProxy(value,parent);\n const scope=parent ? parent.scope_:getCurrentScope();\n scope.drafts_.push(draft);\n return draft;\n}\n\n// src/core/current.ts\nfunction immer_current(value){\n if (!immer_isDraft(value))\n die(10,value);\n return currentImpl(value);\n}\nfunction currentImpl(value){\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state=value[DRAFT_STATE];\n let copy;\n if (state){\n if (!state.modified_)\n return state.base_;\n state.finalized_=true;\n copy=shallowCopy(value,state.scope_.immer_.useStrictShallowCopy_);\n}else{\n copy=shallowCopy(value,true);\n}\n each(copy,(key,childValue)=>{\n set(copy,key,currentImpl(childValue));\n});\n if (state){\n state.finalized_=false;\n}\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches(){\n const errorOffset=16;\n const REPLACE=\"replace\";\n const ADD=\"add\";\n const REMOVE=\"remove\";\n function generatePatches_(state,basePath,patches,inversePatches){\n switch (state.type_){\n case 0:\n case 2:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches,\n inversePatches\n);\n case 1:\n return generateArrayPatches(state,basePath,patches,inversePatches);\n case 3:\n return generateSetPatches(\n state,\n basePath,\n patches,\n inversePatches\n);\n}\n}\n function generateArrayPatches(state,basePath,patches,inversePatches){\n let{base_,assigned_}=state;\n let copy_=state.copy_;\n if (copy_.length < base_.length){\n;\n [base_,copy_]=[copy_,base_];\n [patches,inversePatches]=[inversePatches,patches];\n}\n for (let i=0;i < base_.length;i++){\n if (assigned_[i] && copy_[i] !==base_[i]){\n const path=basePath.concat([i]);\n patches.push({\n op:REPLACE,\n path,\n // Need to maybe clone it,as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value:clonePatchValueIfNeeded(copy_[i])\n});\n inversePatches.push({\n op:REPLACE,\n path,\n value:clonePatchValueIfNeeded(base_[i])\n});\n}\n}\n for (let i=base_.length;i < copy_.length;i++){\n const path=basePath.concat([i]);\n patches.push({\n op:ADD,\n path,\n // Need to maybe clone it,as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value:clonePatchValueIfNeeded(copy_[i])\n});\n}\n for (let i=copy_.length - 1;base_.length <=i;--i){\n const path=basePath.concat([i]);\n inversePatches.push({\n op:REMOVE,\n path\n});\n}\n}\n function generatePatchesFromAssigned(state,basePath,patches,inversePatches){\n const{base_,copy_}=state;\n each(state.assigned_,(key,assignedValue)=>{\n const origValue=get(base_,key);\n const value=get(copy_,key);\n const op=!assignedValue ? REMOVE :has(base_,key) ? REPLACE :ADD;\n if (origValue===value && op===REPLACE)\n return;\n const path=basePath.concat(key);\n patches.push(op===REMOVE ?{op,path}:{op,path,value});\n inversePatches.push(\n op===ADD ?{op:REMOVE,path}:op===REMOVE ?{op:ADD,path,value:clonePatchValueIfNeeded(origValue)}:{op:REPLACE,path,value:clonePatchValueIfNeeded(origValue)}\n);\n});\n}\n function generateSetPatches(state,basePath,patches,inversePatches){\n let{base_,copy_}=state;\n let i=0;\n base_.forEach((value)=>{\n if (!copy_.has(value)){\n const path=basePath.concat([i]);\n patches.push({\n op:REMOVE,\n path,\n value\n});\n inversePatches.unshift({\n op:ADD,\n path,\n value\n});\n}\n i++;\n});\n i=0;\n copy_.forEach((value)=>{\n if (!base_.has(value)){\n const path=basePath.concat([i]);\n patches.push({\n op:ADD,\n path,\n value\n});\n inversePatches.unshift({\n op:REMOVE,\n path,\n value\n});\n}\n i++;\n});\n}\n function generateReplacementPatches_(baseValue,replacement,patches,inversePatches){\n patches.push({\n op:REPLACE,\n path:[],\n value:replacement===NOTHING ? void 0:replacement\n});\n inversePatches.push({\n op:REPLACE,\n path:[],\n value:baseValue\n});\n}\n function applyPatches_(draft,patches){\n patches.forEach((patch)=>{\n const{path,op}=patch;\n let base=draft;\n for (let i=0;i < path.length - 1;i++){\n const parentType=getArchtype(base);\n let p=path[i];\n if (typeof p !==\"string\" && typeof p !==\"number\"){\n p=\"\"+p;\n}\n if ((parentType===0 || parentType===1) && (p===\"__proto__\" || p===\"constructor\"))\n die(errorOffset+3);\n if (typeof base===\"function\" && p===\"prototype\")\n die(errorOffset+3);\n base=get(base,p);\n if (typeof base !==\"object\")\n die(errorOffset+2,path.join(\"/\"));\n}\n const type=getArchtype(base);\n const value=deepClonePatchValue(patch.value);\n const key=path[path.length - 1];\n switch (op){\n case REPLACE:\n switch (type){\n case 2:\n return base.set(key,value);\n case 3:\n die(errorOffset);\n default:\n return base[key]=value;\n}\n case ADD:\n switch (type){\n case 1:\n return key===\"-\" ? base.push(value):base.splice(key,0,value);\n case 2:\n return base.set(key,value);\n case 3:\n return base.add(value);\n default:\n return base[key]=value;\n}\n case REMOVE:\n switch (type){\n case 1:\n return base.splice(key,1);\n case 2:\n return base.delete(key);\n case 3:\n return base.delete(patch.value);\n default:\n return delete base[key];\n}\n default:\n die(errorOffset+1,op);\n}\n});\n return draft;\n}\n function deepClonePatchValue(obj){\n if (!isDraftable(obj))\n return obj;\n if (Array.isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k,v])=>[k,deepClonePatchValue(v)])\n);\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned=Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key]=deepClonePatchValue(obj[key]);\n if (has(obj,DRAFTABLE))\n cloned[DRAFTABLE]=obj[DRAFTABLE];\n return cloned;\n}\n function clonePatchValueIfNeeded(obj){\n if (immer_isDraft(obj)){\n return deepClonePatchValue(obj);\n}else\n return obj;\n}\n loadPlugin(\"Patches\",{\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_\n});\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet(){\n class DraftMap extends Map{\n constructor(target,parent){\n super();\n this[DRAFT_STATE]={\n type_:2,\n parent_:parent,\n scope_:parent ? parent.scope_:getCurrentScope(),\n modified_:false,\n finalized_:false,\n copy_:void 0,\n assigned_:void 0,\n base_:target,\n draft_:this,\n isManual_:false,\n revoked_:false\n};\n}\n get size(){\n return latest(this[DRAFT_STATE]).size;\n}\n has(key){\n return latest(this[DRAFT_STATE]).has(key);\n}\n set(key,value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !==value){\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key,true);\n state.copy_.set(key,value);\n state.assigned_.set(key,true);\n}\n return this;\n}\n delete(key){\n if (!this.has(key)){\n return false;\n}\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)){\n state.assigned_.set(key,false);\n}else{\n state.assigned_.delete(key);\n}\n state.copy_.delete(key);\n return true;\n}\n clear(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size){\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_=new Map();\n each(state.base_,(key)=>{\n state.assigned_.set(key,false);\n});\n state.copy_.clear();\n}\n}\n forEach(cb,thisArg){\n const state=this[DRAFT_STATE];\n latest(state).forEach((_value,key,_map)=>{\n cb.call(thisArg,this.get(key),key,this);\n});\n}\n get(key){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n const value=latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)){\n return value;\n}\n if (value !==state.base_.get(key)){\n return value;\n}\n const draft=createProxy(value,state);\n prepareMapCopy(state);\n state.copy_.set(key,draft);\n return draft;\n}\n keys(){\n return latest(this[DRAFT_STATE]).keys();\n}\n values(){\n const iterator=this.keys();\n return{\n [Symbol.iterator]:()=>this.values(),\n next:()=>{\n const r=iterator.next();\n if (r.done)\n return r;\n const value=this.get(r.value);\n return{\n done:false,\n value\n};\n}\n};\n}\n entries(){\n const iterator=this.keys();\n return{\n [Symbol.iterator]:()=>this.entries(),\n next:()=>{\n const r=iterator.next();\n if (r.done)\n return r;\n const value=this.get(r.value);\n return{\n done:false,\n value:[r.value,value]\n};\n}\n};\n}\n [(DRAFT_STATE,Symbol.iterator)](){\n return this.entries();\n}\n}\n function proxyMap_(target,parent){\n return new DraftMap(target,parent);\n}\n function prepareMapCopy(state){\n if (!state.copy_){\n state.assigned_=new Map();\n state.copy_=new Map(state.base_);\n}\n}\n class DraftSet extends Set{\n constructor(target,parent){\n super();\n this[DRAFT_STATE]={\n type_:3,\n parent_:parent,\n scope_:parent ? parent.scope_:getCurrentScope(),\n modified_:false,\n finalized_:false,\n copy_:void 0,\n base_:target,\n draft_:this,\n drafts_:new Map(),\n revoked_:false,\n isManual_:false\n};\n}\n get size(){\n return latest(this[DRAFT_STATE]).size;\n}\n has(value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_){\n return state.base_.has(value);\n}\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n}\n add(value){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)){\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n}\n return this;\n}\n delete(value){\n if (!this.has(value)){\n return false;\n}\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)):(\n \n false\n));\n}\n clear(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size){\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n}\n}\n values(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n}\n entries(){\n const state=this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n}\n keys(){\n return this.values();\n}\n [(DRAFT_STATE,Symbol.iterator)](){\n return this.values();\n}\n forEach(cb,thisArg){\n const iterator=this.values();\n let result=iterator.next();\n while (!result.done){\n cb.call(thisArg,result.value,result.value,this);\n result=iterator.next();\n}\n}\n}\n function proxySet_(target,parent){\n return new DraftSet(target,parent);\n}\n function prepareSetCopy(state){\n if (!state.copy_){\n state.copy_=new Set();\n state.base_.forEach((value)=>{\n if (isDraftable(value)){\n const draft=createProxy(value,state);\n state.drafts_.set(value,draft);\n state.copy_.add(draft);\n}else{\n state.copy_.add(value);\n}\n});\n}\n}\n function assertUnrevoked(state){\n if (state.revoked_)\n die(3,JSON.stringify(latest(state)));\n}\n loadPlugin(\"MapSet\",{proxyMap_,proxySet_});\n}\n\n// src/immer.ts\nvar immer=new Immer2();\nvar produce=immer.produce;\nvar produceWithPatches=immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze=immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy=immer.setUseStrictShallowCopy.bind(immer);\nvar applyPatches=immer.applyPatches.bind(immer);\nvar createDraft=immer.createDraft.bind(immer);\nvar finishDraft=immer.finishDraft.bind(immer);\nfunction castDraft(value){\n return value;\n}\nfunction castImmutable(value){\n return value;\n}\n\n//# sourceMappingURL=immer.mjs.map\n;// ./node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs\n// src/index.ts\n\n\n\n\n// src/createDraftSafeSelector.ts\n\n\nvar createDraftSafeSelectorCreator=(...args)=>{\n const createSelector2=createSelectorCreator(...args);\n const createDraftSafeSelector2=Object.assign((...args2)=>{\n const selector=createSelector2(...args2);\n const wrappedSelector=(value,...rest)=>selector(isDraft(value) ? current(value):value,...rest);\n Object.assign(wrappedSelector,selector);\n return wrappedSelector;\n},{\n withTypes:()=>createDraftSafeSelector2\n});\n return createDraftSafeSelector2;\n};\nvar createDraftSafeSelector=(null && (createDraftSafeSelectorCreator(weakMapMemoize)));\n\n// src/configureStore.ts\n\n\n// src/devtoolsExtension.ts\n\nvar composeWithDevTools=typeof window !==\"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :function(){\n if (arguments.length===0) return void 0;\n if (typeof arguments[0]===\"object\") return compose;\n return compose.apply(null,arguments);\n};\nvar devToolsEnhancer=typeof window !==\"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ :function(){\n return function(noop3){\n return noop3;\n};\n};\n\n// src/getDefaultMiddleware.ts\n\n\n// src/createAction.ts\n\n\n// src/tsHelpers.ts\nvar hasMatchFunction=(v)=>{\n return v && typeof v.match===\"function\";\n};\n\n// src/createAction.ts\nfunction createAction(type,prepareAction){\n function actionCreator(...args){\n if (prepareAction){\n let prepared=prepareAction(...args);\n if (!prepared){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(0):0);\n}\n return{\n type,\n payload:prepared.payload,\n ...\"meta\" in prepared &&{\n meta:prepared.meta\n},\n ...\"error\" in prepared &&{\n error:prepared.error\n}\n};\n}\n return{\n type,\n payload:args[0]\n};\n}\n actionCreator.toString=()=>`${type}`;\n actionCreator.type=type;\n actionCreator.match=(action)=>redux_isAction(action) && action.type===type;\n return actionCreator;\n}\nfunction isActionCreator(action){\n return typeof action===\"function\" && \"type\" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction(action);\n}\nfunction isFSA(action){\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key){\n return [\"type\",\"payload\",\"error\",\"meta\"].indexOf(key)>-1;\n}\n\n// src/actionCreatorInvariantMiddleware.ts\nfunction getMessage(type){\n const splitType=type ? `${type}`.split(\"/\") :[];\n const actionName=splitType[splitType.length - 1] || \"actionCreator\";\n return `Detected an action creator with type \"${type || \"unknown\"}\" being dispatched. \nMake sure you're calling the action creator before dispatching,i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}\n}\n\n// src/utils.ts\n\nfunction getTimeMeasureUtils(maxDelay,fnName){\n let elapsed=0;\n return{\n measureTime(fn){\n const started=Date.now();\n try{\n return fn();\n}finally{\n const finished=Date.now();\n elapsed+=finished - started;\n}\n},\n warnIfExceeded(){\n if (elapsed>maxDelay){\n console.warn(`${fnName}took ${elapsed}ms,which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large,you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds,so you don't need to worry about that.`);\n}\n}\n};\n}\nvar Tuple=class _Tuple extends Array{\n constructor(...items){\n super(...items);\n Object.setPrototypeOf(this,_Tuple.prototype);\n}\n static get [Symbol.species](){\n return _Tuple;\n}\n concat(...arr){\n return super.concat.apply(this,arr);\n}\n prepend(...arr){\n if (arr.length===1 && Array.isArray(arr[0])){\n return new _Tuple(...arr[0].concat(this));\n}\n return new _Tuple(...arr.concat(this));\n}\n};\nfunction freezeDraftable(val){\n return isDraftable(val) ? produce(val,()=>{\n}):val;\n}\nfunction getOrInsertComputed(map,key,compute){\n if (map.has(key)) return map.get(key);\n return map.set(key,compute(key)).get(key);\n}\n\n// src/immutableStateInvariantMiddleware.ts\nfunction isImmutableDefault(value){\n return typeof value !==\"object\" || value==null || Object.isFrozen(value);\n}\nfunction trackForMutations(isImmutable,ignorePaths,obj){\n const trackedProperties=trackProperties(isImmutable,ignorePaths,obj);\n return{\n detectMutations(){\n return detectMutations(isImmutable,ignorePaths,trackedProperties,obj);\n}\n};\n}\nfunction trackProperties(isImmutable,ignorePaths=[],obj,path=\"\",checkedObjects=new Set()){\n const tracked={\n value:obj\n};\n if (!isImmutable(obj) && !checkedObjects.has(obj)){\n checkedObjects.add(obj);;\n for (const key in obj){\n const childPath=path ? path+\".\"+key :key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !==-1){\n continue;\n}\n tracked.children[key]=trackProperties(isImmutable,ignorePaths,obj[key],childPath);\n}\n}\n return tracked;\n}\nfunction detectMutations(isImmutable,ignoredPaths=[],trackedProperty,obj,sameParentRef=false,path=\"\"){\n const prevObj=trackedProperty ? trackedProperty.value :void 0;\n const sameRef=prevObj===obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)){\n return{\n wasMutated:true,\n path\n};\n}\n if (isImmutable(prevObj) || isImmutable(obj)){\n return{\n wasMutated:false\n};\n};\n for (let key in trackedProperty.children){\n keysToDetect[key]=true;\n}\n for (let key in obj){\n keysToDetect[key]=true;\n}\n const hasIgnoredPaths=ignoredPaths.length>0;\n for (let key in keysToDetect){\n const nestedPath=path ? path+\".\"+key :key;\n if (hasIgnoredPaths){\n const hasMatches=ignoredPaths.some((ignored)=>{\n if (ignored instanceof RegExp){\n return ignored.test(nestedPath);\n}\n return nestedPath===ignored;\n});\n if (hasMatches){\n continue;\n}\n}\n const result=detectMutations(isImmutable,ignoredPaths,trackedProperty.children[key],obj[key],sameRef,nestedPath);\n if (result.wasMutated){\n return result;\n}\n}\n return{\n wasMutated:false\n};\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}else // removed by dead control flow\n{var stringify,getSerialize}\n}\n\n// src/serializableStateInvariantMiddleware.ts\n\nfunction isPlain(val){\n const type=typeof val;\n return val==null || type===\"string\" || type===\"boolean\" || type===\"number\" || Array.isArray(val) || isPlainObject(val);\n}\nfunction findNonSerializableValue(value,path=\"\",isSerializable=isPlain,getEntries,ignoredPaths=[],cache){\n let foundNestedSerializable;\n if (!isSerializable(value)){\n return{\n keyPath:path || \"<root>\",\n value\n};\n}\n if (typeof value !==\"object\" || value===null){\n return false;\n}\n if (cache?.has(value)) return false;\n const entries=getEntries !=null ? getEntries(value) :Object.entries(value);\n const hasIgnoredPaths=ignoredPaths.length>0;\n for (const [key,nestedValue] of entries){\n const nestedPath=path ? path+\".\"+key :key;\n if (hasIgnoredPaths){\n const hasMatches=ignoredPaths.some((ignored)=>{\n if (ignored instanceof RegExp){\n return ignored.test(nestedPath);\n}\n return nestedPath===ignored;\n});\n if (hasMatches){\n continue;\n}\n}\n if (!isSerializable(nestedValue)){\n return{\n keyPath:nestedPath,\n value:nestedValue\n};\n}\n if (typeof nestedValue===\"object\"){\n foundNestedSerializable=findNonSerializableValue(nestedValue,nestedPath,isSerializable,getEntries,ignoredPaths,cache);\n if (foundNestedSerializable){\n return foundNestedSerializable;\n}\n}\n}\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nfunction isNestedFrozen(value){\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)){\n if (typeof nestedValue !==\"object\" || nestedValue===null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n}\n return true;\n}){\n if (true){\n return ()=>(next)=>(action)=>next(action);\n}\n}\n\n// src/getDefaultMiddleware.ts\nfunction isBoolean(x){\n return typeof x===\"boolean\";\n}\nvar buildGetDefaultMiddleware=()=>function getDefaultMiddleware(options){\n const{\n thunk=true,\n immutableCheck=true,\n serializableCheck=true,\n actionCreatorCheck=true\n};\n let middlewareArray=new Tuple();\n if (thunk){\n if (isBoolean(thunk)){\n middlewareArray.push(redux_thunk_thunk);\n}else{\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n}\n}\n return middlewareArray;\n};\n\n// src/autoBatchEnhancer.ts\nvar SHOULD_AUTOBATCH=\"RTK_autoBatch\";\nvar prepareAutoBatched=()=>(payload)=>({\n payload,\n meta:{\n [SHOULD_AUTOBATCH]:true\n}\n});\nvar createQueueWithTimer=(timeout)=>{\n return (notify)=>{\n setTimeout(notify,timeout);\n};\n};\nvar autoBatchEnhancer=(options={\n type:\"raf\"\n})=>(next)=>(...args)=>{\n const store=next(...args);\n let notifying=true;\n let shouldNotifyAtEndOfTick=false;\n let notificationQueued=false;\n const listeners=new Set();\n const queueCallback=options.type===\"tick\" ? queueMicrotask :options.type===\"raf\" ? (\n // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !==\"undefined\" && window.requestAnimationFrame ? window.requestAnimationFrame :createQueueWithTimer(10)\n) :options.type===\"callback\" ? options.queueNotification :createQueueWithTimer(options.timeout);\n const notifyListeners=()=>{\n notificationQueued=false;\n if (shouldNotifyAtEndOfTick){\n shouldNotifyAtEndOfTick=false;\n listeners.forEach((l)=>l());\n}\n};,store,{\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener2){\n const wrappedListener=()=>notifying && listener2();\n const unsubscribe=store.subscribe(wrappedListener);\n listeners.add(listener2);\n return ()=>{\n unsubscribe();\n listeners.delete(listener2);\n};\n},\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action){\n try{\n notifying=!action?.meta?.[SHOULD_AUTOBATCH];\n shouldNotifyAtEndOfTick=!notifying;\n if (shouldNotifyAtEndOfTick){\n if (!notificationQueued){\n notificationQueued=true;\n queueCallback(notifyListeners);\n}\n}\n return store.dispatch(action);\n}finally{\n notifying=true;\n}\n}\n});\n};\n\n// src/getDefaultEnhancers.ts\nvar buildGetDefaultEnhancers=(middlewareEnhancer)=>function getDefaultEnhancers(options){\n const{\n autoBatch=true\n};\n let enhancerArray=new Tuple(middlewareEnhancer);\n if (autoBatch){\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch===\"object\" ? autoBatch:void 0));\n}\n return enhancerArray;\n};\n\n// src/configureStore.ts\nfunction configureStore(options){\n const getDefaultMiddleware=buildGetDefaultMiddleware();\n const{\n reducer=void 0,\n middleware,\n devTools=true,\n duplicateMiddlewareCheck=true,\n preloadedState=void 0,\n enhancers=void 0\n};\n let rootReducer;\n if (typeof reducer===\"function\"){\n rootReducer=reducer;\n}else if (redux_isPlainObject(reducer)){\n rootReducer=combineReducers(reducer);\n}else{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(1):0);\n}\n let finalMiddleware;\n if (typeof middleware===\"function\"){\n finalMiddleware=middleware(getDefaultMiddleware);\n}else{\n finalMiddleware=getDefaultMiddleware();\n}\n let finalCompose=compose;\n if (devTools){\n finalCompose=composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace:\"production\" !==\"production\",\n ...typeof devTools===\"object\" && devTools\n});\n}\n const middlewareEnhancer=applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers=buildGetDefaultEnhancers(middlewareEnhancer);\n let storeEnhancers=typeof enhancers===\"function\" ? enhancers(getDefaultEnhancers) :getDefaultEnhancers();\n const composedEnhancer=finalCompose(...storeEnhancers);\n return createStore(rootReducer,preloadedState,composedEnhancer);\n}\n\n// src/createReducer.ts\n\n\n// src/mapBuilders.ts\nfunction executeReducerBuilderCallback(builderCallback){\n const actionsMap={};\n const actionMatchers=[];\n let defaultCaseReducer;\n const builder={\n addCase(typeOrActionCreator,reducer){\n if (false) // removed by dead control flow\n{}\n const type=typeof typeOrActionCreator===\"string\" ? typeOrActionCreator :typeOrActionCreator.type;\n if (!type){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(28):0);\n}\n if (type in actionsMap){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(29):0);\n}\n actionsMap[type]=reducer;\n return builder;\n},\n addMatcher(matcher,reducer){\n if (false) // removed by dead control flow\n{}\n actionMatchers.push({\n matcher,\n reducer\n});\n return builder;\n},\n addDefaultCase(reducer){\n if (false) // removed by dead control flow\n{}\n defaultCaseReducer=reducer;\n return builder;\n}\n};\n builderCallback(builder);\n return [actionsMap,actionMatchers,defaultCaseReducer];\n}\n\n// src/createReducer.ts\nfunction isStateFunction(x){\n return typeof x===\"function\";\n}\nfunction createReducer(initialState,mapOrBuilderCallback){\n if (false) // removed by dead control flow\n{}\n let [actionsMap,finalActionMatchers,finalDefaultCaseReducer]=executeReducerBuilderCallback(mapOrBuilderCallback);\n let getInitialState;\n if (isStateFunction(initialState)){\n getInitialState=()=>freezeDraftable(initialState());\n}else{\n const frozenInitialState=freezeDraftable(initialState);\n getInitialState=()=>frozenInitialState;\n}\n function reducer(state=getInitialState(),action){\n let caseReducers=[actionsMap[action.type],...finalActionMatchers.filter(({\n matcher\n})=>matcher(action)).map(({\n reducer:reducer2\n})=>reducer2)];\n if (caseReducers.filter((cr)=>!!cr).length===0){\n caseReducers=[finalDefaultCaseReducer];\n}\n return caseReducers.reduce((previousState,caseReducer)=>{\n if (caseReducer){\n if (immer_isDraft(previousState)){\n const draft=previousState;\n const result=caseReducer(draft,action);\n if (result===void 0){\n return previousState;\n}\n return result;\n}else if (!isDraftable(previousState)){\n const result=caseReducer(previousState,action);\n if (result===void 0){\n if (previousState===null){\n return previousState;\n}\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n}\n return result;\n}else{\n return produce(previousState,(draft)=>{\n return caseReducer(draft,action);\n});\n}\n}\n return previousState;\n},state);\n}\n reducer.getInitialState=getInitialState;\n return reducer;\n}\n\n// src/matchers.ts\nvar matches=(matcher,action)=>{\n if (hasMatchFunction(matcher)){\n return matcher.match(action);\n}else{\n return matcher(action);\n}\n};\nfunction isAnyOf(...matchers){\n return (action)=>{\n return matchers.some((matcher)=>matches(matcher,action));\n};\n}\nfunction isAllOf(...matchers){\n return (action)=>{\n return matchers.every((matcher)=>matches(matcher,action));\n};\n}\nfunction hasExpectedRequestMetadata(action,validStatus){\n if (!action || !action.meta) return false;\n const hasValidRequestId=typeof action.meta.requestId===\"string\";\n const hasValidRequestStatus=validStatus.indexOf(action.meta.requestStatus)>-1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a){\n return typeof a[0]===\"function\" && \"pending\" in a[0] && \"fulfilled\" in a[0] && \"rejected\" in a[0];\n}\nfunction isPending(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"pending\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isPending()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.pending));\n}\nfunction isRejected(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"rejected\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isRejected()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.rejected));\n}\nfunction isRejectedWithValue(...asyncThunks){\n const hasFlag=(action)=>{\n return action && action.meta && action.meta.rejectedWithValue;\n};\n if (asyncThunks.length===0){\n return isAllOf(isRejected(...asyncThunks),hasFlag);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isRejectedWithValue()(asyncThunks[0]);\n}\n return isAllOf(isRejected(...asyncThunks),hasFlag);\n}\nfunction isFulfilled(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"fulfilled\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isFulfilled()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.map((asyncThunk)=>asyncThunk.fulfilled));\n}\nfunction isAsyncThunkAction(...asyncThunks){\n if (asyncThunks.length===0){\n return (action)=>hasExpectedRequestMetadata(action,[\"pending\",\"fulfilled\",\"rejected\"]);\n}\n if (!isAsyncThunkArray(asyncThunks)){\n return isAsyncThunkAction()(asyncThunks[0]);\n}\n return isAnyOf(...asyncThunks.flatMap((asyncThunk)=>[asyncThunk.pending,asyncThunk.rejected,asyncThunk.fulfilled]));\n}\n\n// src/nanoid.ts\nvar urlAlphabet=\"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\";\nvar nanoid=(size=21)=>{\n let id=\"\";\n let i=size;\n while (i--){\n id+=urlAlphabet[Math.random() * 64 | 0];\n}\n return id;\n};\n\n// src/createAsyncThunk.ts\nvar commonProperties=[\"name\",\"message\",\"stack\",\"code\"];\nvar RejectWithValue=class{\n constructor(payload,meta){\n this.payload=payload;\n this.meta=meta;\n}\n \n _type;\n};\nvar FulfillWithMeta=class{\n constructor(payload,meta){\n this.payload=payload;\n this.meta=meta;\n}\n \n _type;\n};\nvar miniSerializeError=(value)=>{\n if (typeof value===\"object\" && value !==null){\n const simpleError={};\n for (const property of commonProperties){\n if (typeof value[property]===\"string\"){\n simpleError[property]=value[property];\n}\n}\n return simpleError;\n}\n return{\n message:String(value)\n};\n};\nvar externalAbortMessage=\"External signal was aborted\";\nvar createAsyncThunk=(()=>{\n function createAsyncThunk2(typePrefix,payloadCreator,options){\n const fulfilled=createAction(typePrefix+\"/fulfilled\",(payload,requestId,arg,meta)=>({\n payload,\n meta:{\n ...meta ||{},\n arg,\n requestId,\n requestStatus:\"fulfilled\"\n}\n}));\n const pending=createAction(typePrefix+\"/pending\",(requestId,arg,meta)=>({\n payload:void 0,\n meta:{\n ...meta ||{},\n arg,\n requestId,\n requestStatus:\"pending\"\n}\n}));\n const rejected=createAction(typePrefix+\"/rejected\",(error,requestId,arg,payload,meta)=>({\n payload,\n error:(options && options.serializeError || miniSerializeError)(error || \"Rejected\"),\n meta:{\n ...meta ||{},\n arg,\n requestId,\n rejectedWithValue:!!payload,\n requestStatus:\"rejected\",\n aborted:error?.name===\"AbortError\",\n condition:error?.name===\"ConditionError\"\n}\n}));\n function actionCreator(arg,{\n signal\n}){\n return (dispatch,getState,extra)=>{\n const requestId=options?.idGenerator ? options.idGenerator(arg) :nanoid();\n const abortController=new AbortController();\n let abortHandler;\n let abortReason;\n function abort(reason){\n abortReason=reason;\n abortController.abort();\n}\n if (signal){\n if (signal.aborted){\n abort(externalAbortMessage);\n}else{\n signal.addEventListener(\"abort\",()=>abort(externalAbortMessage),{\n once:true\n});\n}\n}\n const promise=async function(){\n let finalAction;\n try{\n let conditionResult=options?.condition?.(arg,{\n getState,\n extra\n});\n if (isThenable(conditionResult)){\n conditionResult=await conditionResult;\n}\n if (conditionResult===false || abortController.signal.aborted){\n throw{\n name:\"ConditionError\",\n message:\"Aborted due to condition callback returning false.\"\n};\n}\n const abortedPromise=new Promise((_,reject)=>{\n abortHandler=()=>{\n reject({\n name:\"AbortError\",\n message:abortReason || \"Aborted\"\n});\n};\n abortController.signal.addEventListener(\"abort\",abortHandler);\n});\n dispatch(pending(requestId,arg,options?.getPendingMeta?.({\n requestId,\n arg\n},{\n getState,\n extra\n})));\n finalAction=await Promise.race([abortedPromise,Promise.resolve(payloadCreator(arg,{\n dispatch,\n getState,\n extra,\n requestId,\n signal:abortController.signal,\n abort,\n rejectWithValue:(value,meta)=>{\n return new RejectWithValue(value,meta);\n},\n fulfillWithValue:(value,meta)=>{\n return new FulfillWithMeta(value,meta);\n}\n})).then((result)=>{\n if (result instanceof RejectWithValue){\n throw result;\n}\n if (result instanceof FulfillWithMeta){\n return fulfilled(result.payload,requestId,arg,result.meta);\n}\n return fulfilled(result,requestId,arg);\n})]);\n}catch (err){\n finalAction=err instanceof RejectWithValue ? rejected(null,requestId,arg,err.payload,err.meta):rejected(err,requestId,arg);\n}finally{\n if (abortHandler){\n abortController.signal.removeEventListener(\"abort\",abortHandler);\n}\n}\n const skipDispatch=options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;\n if (!skipDispatch){\n dispatch(finalAction);\n}\n return finalAction;\n}();\n return Object.assign(promise,{\n abort,\n requestId,\n arg,\n unwrap(){\n return promise.then(unwrapResult);\n}\n});\n};\n}\n return Object.assign(actionCreator,{\n pending,\n rejected,\n fulfilled,\n settled:isAnyOf(rejected,fulfilled),\n typePrefix\n});\n}\n createAsyncThunk2.withTypes=()=>createAsyncThunk2;\n return createAsyncThunk2;\n})();\nfunction unwrapResult(action){\n if (action.meta && action.meta.rejectedWithValue){\n throw action.payload;\n}\n if (action.error){\n throw action.error;\n}\n return action.payload;\n}\nfunction isThenable(value){\n return value !==null && typeof value===\"object\" && typeof value.then===\"function\";\n}\n\n// src/createSlice.ts\nvar asyncThunkSymbol=Symbol.for(\"rtk-slice-createasyncthunk\");\nvar asyncThunkCreator={\n [asyncThunkSymbol]:createAsyncThunk\n};\nvar ReducerType=((ReducerType2)=>{\n ReducerType2[\"reducer\"]=\"reducer\";\n ReducerType2[\"reducerWithPrepare\"]=\"reducerWithPrepare\";\n ReducerType2[\"asyncThunk\"]=\"asyncThunk\";\n return ReducerType2;\n});\nfunction getType(slice,actionKey){\n return `${slice}/${actionKey}`;\n}\nfunction buildCreateSlice({\n creators\n}){\n const cAT=creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice2(options){\n const{\n name,\n reducerPath=name\n}=options;\n if (!name){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(11):0);\n};\n const reducerNames=Object.keys(reducers);\n const context={\n sliceCaseReducersByName:{},\n sliceMatchers:[]\n};\n const contextMethods={\n addCase(typeOrActionCreator,reducer2){\n const type=typeof typeOrActionCreator===\"string\" ? typeOrActionCreator :typeOrActionCreator.type;\n if (!type){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(12):0);\n}\n if (type in context.sliceCaseReducersByType){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(13):0);\n}\n context.sliceCaseReducersByType[type]=reducer2;\n return contextMethods;\n},\n addMatcher(matcher,reducer2){\n context.sliceMatchers.push({\n matcher,\n reducer:reducer2\n});\n return contextMethods;\n},\n exposeAction(name2,actionCreator){\n context.actionCreators[name2]=actionCreator;\n return contextMethods;\n},\n exposeCaseReducer(name2,reducer2){\n context.sliceCaseReducersByName[name2]=reducer2;\n return contextMethods;\n}\n};\n reducerNames.forEach((reducerName)=>{\n const reducerDefinition=reducers[reducerName];\n const reducerDetails={\n reducerName,\n type:getType(name,reducerName),\n createNotation:typeof options.reducers===\"function\"\n};\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)){\n handleThunkCaseReducerDefinition(reducerDetails,reducerDefinition,contextMethods,cAT);\n}else{\n handleNormalReducerDefinition(reducerDetails,reducerDefinition,contextMethods);\n}\n});\n function buildReducer(){\n if (false) // removed by dead control flow\n{},actionMatchers=[],defaultCaseReducer=void 0]=typeof options.extraReducers===\"function\" ? executeReducerBuilderCallback(options.extraReducers) :[options.extraReducers];\n const finalCaseReducers={\n ...extraReducers,\n ...context.sliceCaseReducersByType\n};\n return createReducer(options.initialState,(builder)=>{\n for (let key in finalCaseReducers){\n builder.addCase(key,finalCaseReducers[key]);\n}\n for (let sM of context.sliceMatchers){\n builder.addMatcher(sM.matcher,sM.reducer);\n}\n for (let m of actionMatchers){\n builder.addMatcher(m.matcher,m.reducer);\n}\n if (defaultCaseReducer){\n builder.addDefaultCase(defaultCaseReducer);\n}\n});\n}\n const selectSelf=(state)=>state;\n const injectedSelectorCache=new Map();\n const injectedStateCache=new WeakMap();\n let _reducer;\n function reducer(state,action){\n if (!_reducer) _reducer=buildReducer();\n return _reducer(state,action);\n}\n function getInitialState(){\n if (!_reducer) _reducer=buildReducer();\n return _reducer.getInitialState();\n}\n function makeSelectorProps(reducerPath2,injected=false){\n function selectSlice(state){\n let sliceState=state[reducerPath2];\n if (typeof sliceState===\"undefined\"){\n if (injected){\n sliceState=getOrInsertComputed(injectedStateCache,selectSlice,getInitialState);\n}\n}\n return sliceState;\n}\n function getSelectors(selectState=selectSelf){\n const selectorCache=getOrInsertComputed(injectedSelectorCache,injected,()=>new WeakMap());\n return getOrInsertComputed(selectorCache,selectState,()=>{\n const map={};)){\n map[name2]=wrapSelector(selector,selectState,()=>getOrInsertComputed(injectedStateCache,selectState,getInitialState),injected);\n}\n return map;\n});\n}\n return{\n reducerPath:reducerPath2,\n getSelectors,\n get selectors(){\n return getSelectors(selectSlice);\n},\n selectSlice\n};\n}\n const slice={\n name,\n reducer,\n actions:context.actionCreators,\n caseReducers:context.sliceCaseReducersByName,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable,{\n reducerPath:pathOpt,\n ...config\n}){\n const newReducerPath=pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath:newReducerPath,\n reducer\n},config);\n return{\n ...slice,\n ...makeSelectorProps(newReducerPath,true)\n};\n}\n};\n return slice;\n};\n}\nfunction wrapSelector(selector,selectState,getInitialState,injected){\n function wrapper(rootState,...args){\n let sliceState=selectState(rootState);\n if (typeof sliceState===\"undefined\"){\n if (injected){\n sliceState=getInitialState();\n}\n}\n return selector(sliceState,...args);\n}\n wrapper.unwrapped=selector;\n return wrapper;\n}\nvar createSlice=buildCreateSlice();\nfunction buildReducerCreators(){\n function asyncThunk(payloadCreator,config){\n return{\n _reducerDefinitionType:\"asyncThunk\",\n payloadCreator,\n ...config\n};\n}\n asyncThunk.withTypes=()=>asyncThunk;\n return{\n reducer(caseReducer){\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args){\n return caseReducer(...args);\n}\n}[caseReducer.name],{\n _reducerDefinitionType:\"reducer\" \n});\n},\n preparedReducer(prepare,reducer){\n return{\n _reducerDefinitionType:\"reducerWithPrepare\",\n prepare,\n reducer\n};\n},\n asyncThunk\n};\n}\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n},maybeReducerWithPrepare,context){\n let caseReducer;\n let prepareCallback;\n if (\"reducer\" in maybeReducerWithPrepare){\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(17):0);\n}\n caseReducer=maybeReducerWithPrepare.reducer;\n prepareCallback=maybeReducerWithPrepare.prepare;\n}else{\n caseReducer=maybeReducerWithPrepare;\n}\n context.addCase(type,caseReducer).exposeCaseReducer(reducerName,caseReducer).exposeAction(reducerName,prepareCallback ? createAction(type,prepareCallback):createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition){\n return reducerDefinition._reducerDefinitionType===\"asyncThunk\";\n}\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition){\n return reducerDefinition._reducerDefinitionType===\"reducerWithPrepare\";\n}\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n},reducerDefinition,context,cAT){\n if (!cAT){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(18):0);\n}\n const{\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n}=reducerDefinition;\n const thunk=cAT(type,payloadCreator,options);\n context.exposeAction(reducerName,thunk);\n if (fulfilled){\n context.addCase(thunk.fulfilled,fulfilled);\n}\n if (pending){\n context.addCase(thunk.pending,pending);\n}\n if (rejected){\n context.addCase(thunk.rejected,rejected);\n}\n if (settled){\n context.addMatcher(thunk.settled,settled);\n}\n context.exposeCaseReducer(reducerName,{\n fulfilled:fulfilled || redux_toolkit_modern_noop,\n pending:pending || redux_toolkit_modern_noop,\n rejected:rejected || redux_toolkit_modern_noop,\n settled:settled || redux_toolkit_modern_noop\n});\n}\nfunction redux_toolkit_modern_noop(){\n}\n\n// src/entities/entity_state.ts\nfunction getInitialEntityState(){\n return{\n ids:[],\n entities:{}\n};\n}\nfunction createInitialStateFactory(stateAdapter){\n function getInitialState(additionalState={},entities){\n const state=Object.assign(getInitialEntityState(),additionalState);\n return entities ? stateAdapter.setAll(state,entities):state;\n}\n return{\n getInitialState\n};\n}\n\n// src/entities/state_selectors.ts\nfunction createSelectorsFactory(){\n function getSelectors(selectState,options={}){\n const{\n createSelector:createSelector2=createDraftSafeSelector\n}=options;\n const selectIds=(state)=>state.ids;\n const selectEntities=(state)=>state.entities;\n const selectAll=createSelector2(selectIds,selectEntities,(ids,entities)=>ids.map((id)=>entities[id]));\n const selectId=(_,id)=>id;\n const selectById=(entities,id)=>entities[id];\n const selectTotal=createSelector2(selectIds,(ids)=>ids.length);\n if (!selectState){\n return{\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById:createSelector2(selectEntities,selectId,selectById)\n};\n}\n const selectGlobalizedEntities=createSelector2(selectState,selectEntities);\n return{\n selectIds:createSelector2(selectState,selectIds),\n selectEntities:selectGlobalizedEntities,\n selectAll:createSelector2(selectState,selectAll),\n selectTotal:createSelector2(selectState,selectTotal),\n selectById:createSelector2(selectGlobalizedEntities,selectId,selectById)\n};\n}\n return{\n getSelectors\n};\n}\n\n// src/entities/state_adapter.ts\n\nvar isDraftTyped=(null && (isDraft3));\nfunction createSingleArgumentStateOperator(mutator){\n const operator=createStateOperator((_,state)=>mutator(state));\n return function operation(state){\n return operator(state,void 0);\n};\n}\nfunction createStateOperator(mutator){\n return function operation(state,arg){\n function isPayloadActionArgument(arg2){\n return isFSA(arg2);\n}\n const runMutator=(draft)=>{\n if (isPayloadActionArgument(arg)){\n mutator(arg.payload,draft);\n}else{\n mutator(arg,draft);\n}\n};\n if (isDraftTyped(state)){\n runMutator(state);\n return state;\n}\n return createNextState3(state,runMutator);\n};\n}\n\n// src/entities/utils.ts\n\nfunction selectIdValue(entity,selectId){\n const key=selectId(entity);\n return key;\n}\nfunction ensureEntitiesArray(entities){\n if (!Array.isArray(entities)){\n entities=Object.values(entities);\n}\n return entities;\n}\nfunction getCurrent(value){\n return isDraft4(value) ? current2(value):value;\n}\nfunction splitAddedUpdatedEntities(newEntities,selectId,state){\n newEntities=ensureEntitiesArray(newEntities);\n const existingIdsArray=getCurrent(state.ids);\n const existingIds=new Set(existingIdsArray);\n const added=[];\n const addedIds=new Set([]);\n const updated=[];\n for (const entity of newEntities){\n const id=selectIdValue(entity,selectId);\n if (existingIds.has(id) || addedIds.has(id)){\n updated.push({\n id,\n changes:entity\n});\n}else{\n addedIds.add(id);\n added.push(entity);\n}\n}\n return [added,updated,existingIdsArray];\n}\n\n// src/entities/unsorted_state_adapter.ts\nfunction createUnsortedStateAdapter(selectId){\n function addOneMutably(entity,state){\n const key=selectIdValue(entity,selectId);\n if (key in state.entities){\n return;\n}\n state.ids.push(key);\n state.entities[key]=entity;\n}\n function addManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n for (const entity of newEntities){\n addOneMutably(entity,state);\n}\n}\n function setOneMutably(entity,state){\n const key=selectIdValue(entity,selectId);\n if (!(key in state.entities)){\n state.ids.push(key);\n}\n;\n state.entities[key]=entity;\n}\n function setManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n for (const entity of newEntities){\n setOneMutably(entity,state);\n}\n}\n function setAllMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n state.ids=[];;\n addManyMutably(newEntities,state);\n}\n function removeOneMutably(key,state){\n return removeManyMutably([key],state);\n}\n function removeManyMutably(keys,state){\n let didMutate=false;\n keys.forEach((key)=>{\n if (key in state.entities){\n delete state.entities[key];\n didMutate=true;\n}\n});\n if (didMutate){\n state.ids=state.ids.filter((id)=>id in state.entities);\n}\n}\n function removeAllMutably(state){\n Object.assign(state,{\n ids:[],\n entities:{}\n});\n}\n function takeNewKey(keys,update,state){\n const original3=state.entities[update.id];\n if (original3===void 0){\n return false;\n},original3,update.changes);\n const newKey=selectIdValue(updated,selectId);\n const hasNewKey=newKey !==update.id;\n if (hasNewKey){\n keys[update.id]=newKey;\n delete state.entities[update.id];\n}\n;\n state.entities[newKey]=updated;\n return hasNewKey;\n}\n function updateOneMutably(update,state){\n return updateManyMutably([update],state);\n}\n function updateManyMutably(updates,state){\n const newKeys={};;\n updates.forEach((update)=>{\n if (update.id in state.entities){\n updatesPerEntity[update.id]={\n id:update.id,\n // Spreads ignore falsy values,so this works even if there isn't\n // an existing update already at this key\n changes:{\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n}\n};\n}\n});\n updates=Object.values(updatesPerEntity);\n const didMutateEntities=updates.length>0;\n if (didMutateEntities){\n const didMutateIds=updates.filter((update)=>takeNewKey(newKeys,update,state)).length>0;\n if (didMutateIds){\n state.ids=Object.values(state.entities).map((e)=>selectIdValue(e,selectId));\n}\n}\n}\n function upsertOneMutably(entity,state){\n return upsertManyMutably([entity],state);\n}\n function upsertManyMutably(newEntities,state){\n const [added,updated]=splitAddedUpdatedEntities(newEntities,selectId,state);\n addManyMutably(added,state);\n updateManyMutably(updated,state);\n}\n return{\n removeAll:createSingleArgumentStateOperator(removeAllMutably),\n addOne:createStateOperator(addOneMutably),\n addMany:createStateOperator(addManyMutably),\n setOne:createStateOperator(setOneMutably),\n setMany:createStateOperator(setManyMutably),\n setAll:createStateOperator(setAllMutably),\n updateOne:createStateOperator(updateOneMutably),\n updateMany:createStateOperator(updateManyMutably),\n upsertOne:createStateOperator(upsertOneMutably),\n upsertMany:createStateOperator(upsertManyMutably),\n removeOne:createStateOperator(removeOneMutably),\n removeMany:createStateOperator(removeManyMutably)\n};\n}\n\n// src/entities/sorted_state_adapter.ts\nfunction findInsertIndex(sortedItems,item,comparisonFunction){\n let lowIndex=0;\n let highIndex=sortedItems.length;\n while (lowIndex < highIndex){\n let middleIndex=lowIndex+highIndex>>>1;\n const currentItem=sortedItems[middleIndex];\n const res=comparisonFunction(item,currentItem);\n if (res>=0){\n lowIndex=middleIndex+1;\n}else{\n highIndex=middleIndex;\n}\n}\n return lowIndex;\n}\nfunction insert(sortedItems,item,comparisonFunction){\n const insertAtIndex=findInsertIndex(sortedItems,item,comparisonFunction);\n sortedItems.splice(insertAtIndex,0,item);\n return sortedItems;\n}\nfunction createSortedStateAdapter(selectId,comparer){\n const{\n removeOne,\n removeMany,\n removeAll\n}=createUnsortedStateAdapter(selectId);\n function addOneMutably(entity,state){\n return addManyMutably([entity],state);\n}\n function addManyMutably(newEntities,state,existingIds){\n newEntities=ensureEntitiesArray(newEntities);\n const existingKeys=new Set(existingIds ?? getCurrent(state.ids));\n const models=newEntities.filter((model)=>!existingKeys.has(selectIdValue(model,selectId)));\n if (models.length !==0){\n mergeFunction(state,models);\n}\n}\n function setOneMutably(entity,state){\n return setManyMutably([entity],state);\n}\n function setManyMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);\n if (newEntities.length !==0){\n for (const item of newEntities){\n delete state.entities[selectId(item)];\n}\n mergeFunction(state,newEntities);\n}\n}\n function setAllMutably(newEntities,state){\n newEntities=ensureEntitiesArray(newEntities);;\n state.ids=[];\n addManyMutably(newEntities,state,[]);\n}\n function updateOneMutably(update,state){\n return updateManyMutably([update],state);\n}\n function updateManyMutably(updates,state){\n let appliedUpdates=false;\n let replacedIds=false;\n for (let update of updates){\n const entity=state.entities[update.id];\n if (!entity){\n continue;\n}\n appliedUpdates=true;\n Object.assign(entity,update.changes);\n const newId=selectId(entity);\n if (update.id !==newId){\n replacedIds=true;\n delete state.entities[update.id];\n const oldIndex=state.ids.indexOf(update.id);\n state.ids[oldIndex]=newId;\n state.entities[newId]=entity;\n}\n}\n if (appliedUpdates){\n mergeFunction(state,[],appliedUpdates,replacedIds);\n}\n}\n function upsertOneMutably(entity,state){\n return upsertManyMutably([entity],state);\n}\n function upsertManyMutably(newEntities,state){\n const [added,updated,existingIdsArray]=splitAddedUpdatedEntities(newEntities,selectId,state);\n if (added.length){\n addManyMutably(added,state,existingIdsArray);\n}\n if (updated.length){\n updateManyMutably(updated,state);\n}\n}\n function areArraysEqual(a,b){\n if (a.length !==b.length){\n return false;\n}\n for (let i=0;i < a.length;i++){\n if (a[i]===b[i]){\n continue;\n}\n return false;\n}\n return true;\n}\n const mergeFunction=(state,addedItems,appliedUpdates,replacedIds)=>{\n const currentEntities=getCurrent(state.entities);\n const currentIds=getCurrent(state.ids);\n const stateEntities=state.entities;\n let ids=currentIds;\n if (replacedIds){\n ids=new Set(currentIds);\n}\n let sortedEntities=[];\n for (const id of ids){\n const entity=currentEntities[id];\n if (entity){\n sortedEntities.push(entity);\n}\n}\n const wasPreviouslyEmpty=sortedEntities.length===0;\n for (const item of addedItems){\n stateEntities[selectId(item)]=item;\n if (!wasPreviouslyEmpty){\n insert(sortedEntities,item,comparer);\n}\n}\n if (wasPreviouslyEmpty){\n sortedEntities=addedItems.slice().sort(comparer);\n}else if (appliedUpdates){\n sortedEntities.sort(comparer);\n}\n const newSortedIds=sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds,newSortedIds)){\n state.ids=newSortedIds;\n}\n};\n return{\n removeOne,\n removeMany,\n removeAll,\n addOne:createStateOperator(addOneMutably),\n updateOne:createStateOperator(updateOneMutably),\n upsertOne:createStateOperator(upsertOneMutably),\n setOne:createStateOperator(setOneMutably),\n setMany:createStateOperator(setManyMutably),\n setAll:createStateOperator(setAllMutably),\n addMany:createStateOperator(addManyMutably),\n updateMany:createStateOperator(updateManyMutably),\n upsertMany:createStateOperator(upsertManyMutably)\n};\n}){\n const{\n selectId,\n sortComparer\n}={\n sortComparer:false,\n selectId:(instance)=>instance.id,\n ...options\n};\n const stateAdapter=sortComparer ? createSortedStateAdapter(selectId,sortComparer) :createUnsortedStateAdapter(selectId);\n const stateFactory=createInitialStateFactory(stateAdapter);\n const selectorsFactory=createSelectorsFactory();\n return{\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n};\n}\n\n// src/listenerMiddleware/index.ts\n\n\n// src/listenerMiddleware/exceptions.ts\nvar task=\"task\";\nvar listener=\"listener\";\nvar completed=\"completed\";\nvar cancelled=\"cancelled\";\nvar taskCancelled=(null && (`task-${cancelled}`));\nvar taskCompleted=(null && (`task-${completed}`));\nvar listenerCancelled=(null && (`${listener}-${cancelled}`));\nvar listenerCompleted=(null && (`${listener}-${completed}`));\nvar TaskAbortError=class{\n constructor(code){\n this.code=code;\n this.message=`${task}${cancelled}(reason:${code})`;\n}\n name=\"TaskAbortError\";\n message;\n};\n\n// src/listenerMiddleware/utils.ts\nvar assertFunction=(func,expected)=>{\n if (typeof func !==\"function\"){\n throw new TypeError(true ? redux_toolkit_modern_formatProdErrorMessage(32):0);\n}\n};\nvar noop2=()=>{\n};\nvar catchRejection=(promise,onError=noop2)=>{\n promise.catch(onError);\n return promise;\n};\nvar addAbortSignalListener=(abortSignal,callback)=>{\n abortSignal.addEventListener(\"abort\",callback,{\n once:true\n});\n return ()=>abortSignal.removeEventListener(\"abort\",callback);\n};\nvar abortControllerWithReason=(abortController,reason)=>{\n const signal=abortController.signal;\n if (signal.aborted){\n return;\n}\n if (!(\"reason\" in signal)){\n Object.defineProperty(signal,\"reason\",{\n enumerable:true,\n value:reason,\n configurable:true,\n writable:true\n});\n}\n;\n abortController.abort(reason);\n};\n\n// src/listenerMiddleware/task.ts\nvar validateActive=(signal)=>{\n if (signal.aborted){\n const{\n reason\n}=signal;\n throw new TaskAbortError(reason);\n}\n};\nfunction raceWithSignal(signal,promise){\n let cleanup=noop2;\n return new Promise((resolve,reject)=>{\n const notifyRejection=()=>reject(new TaskAbortError(signal.reason));\n if (signal.aborted){\n notifyRejection();\n return;\n}\n cleanup=addAbortSignalListener(signal,notifyRejection);\n promise.finally(()=>cleanup()).then(resolve,reject);\n}).finally(()=>{\n cleanup=noop2;\n});\n}\nvar runTask=async (task2,cleanUp)=>{\n try{\n await Promise.resolve();\n const value=await task2();\n return{\n status:\"ok\",\n value\n};\n}catch (error){\n return{\n status:error instanceof TaskAbortError ? \"cancelled\":\"rejected\",\n error\n};\n}finally{\n cleanUp?.();\n}\n};\nvar createPause=(signal)=>{\n return (promise)=>{\n return catchRejection(raceWithSignal(signal,promise).then((output)=>{\n validateActive(signal);\n return output;\n}));\n};\n};\nvar createDelay=(signal)=>{\n const pause=createPause(signal);\n return (timeoutMs)=>{\n return pause(new Promise((resolve)=>setTimeout(resolve,timeoutMs)));\n};\n};\n\n// src/listenerMiddleware/index.ts\nvar{\n assign:redux_toolkit_modern_assign\n}=Object;;\nvar alm=\"listenerMiddleware\";\nvar createFork=(parentAbortSignal,parentBlockingPromises)=>{\n const linkControllers=(controller)=>addAbortSignalListener(parentAbortSignal,()=>abortControllerWithReason(controller,parentAbortSignal.reason));\n return (taskExecutor,opts)=>{\n assertFunction(taskExecutor,\"taskExecutor\");\n const childAbortController=new AbortController();\n linkControllers(childAbortController);\n const result=runTask(async ()=>{\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result2=await taskExecutor({\n pause:createPause(childAbortController.signal),\n delay:createDelay(childAbortController.signal),\n signal:childAbortController.signal\n});\n validateActive(childAbortController.signal);\n return result2;\n},()=>abortControllerWithReason(childAbortController,taskCompleted));\n if (opts?.autoJoin){\n parentBlockingPromises.push(result.catch(noop2));\n}\n return{\n result:createPause(parentAbortSignal)(result),\n cancel(){\n abortControllerWithReason(childAbortController,taskCancelled);\n}\n};\n};\n};\nvar createTakePattern=(startListening,signal)=>{\n const take=async (predicate,timeout)=>{\n validateActive(signal);\n let unsubscribe=()=>{\n};\n const tuplePromise=new Promise((resolve,reject)=>{\n let stopListening=startListening({\n predicate,\n effect:(action,listenerApi)=>{\n listenerApi.unsubscribe();\n resolve([action,listenerApi.getState(),listenerApi.getOriginalState()]);\n}\n});\n unsubscribe=()=>{\n stopListening();\n reject();\n};\n});\n const promises=[tuplePromise];\n if (timeout !=null){\n promises.push(new Promise((resolve)=>setTimeout(resolve,timeout,null)));\n}\n try{\n const output=await raceWithSignal(signal,Promise.race(promises));\n validateActive(signal);\n return output;\n}finally{\n unsubscribe();\n}\n};\n return (predicate,timeout)=>catchRejection(take(predicate,timeout));\n};\nvar getListenerEntryPropsFrom=(options)=>{\n let{\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n}=options;\n if (type){\n predicate=createAction(type).match;\n}else if (actionCreator){\n type=actionCreator.type;\n predicate=actionCreator.match;\n}else if (matcher){\n predicate=matcher;\n}else if (predicate){\n}else{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(21):0);\n}\n assertFunction(effect,\"options.listener\");\n return{\n predicate,\n type,\n effect\n};\n};\nvar createListenerEntry=redux_toolkit_modern_assign((options)=>{\n const{\n type,\n predicate,\n effect\n}=getListenerEntryPropsFrom(options);\n const entry={\n id:nanoid(),\n effect,\n type,\n predicate,\n pending:new Set(),\n unsubscribe:()=>{\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(22):0);\n}\n};\n return entry;\n},{\n withTypes:()=>createListenerEntry\n});\nvar findListenerEntry=(listenerMap,options)=>{\n const{\n type,\n effect,\n predicate\n}=getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find((entry)=>{\n const matchPredicateOrType=typeof type===\"string\" ? entry.type===type:entry.predicate===predicate;\n return matchPredicateOrType && entry.effect===effect;\n});\n};\nvar cancelActiveListeners=(entry)=>{\n entry.pending.forEach((controller)=>{\n abortControllerWithReason(controller,listenerCancelled);\n});\n};\nvar createClearListenerMiddleware=(listenerMap)=>{\n return ()=>{\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n};\n};\nvar safelyNotifyError=(errorHandler,errorToNotify,errorInfo)=>{\n try{\n errorHandler(errorToNotify,errorInfo);\n}catch (errorHandlerError){\n setTimeout(()=>{\n throw errorHandlerError;\n},0);\n}\n};\nvar addListener=redux_toolkit_modern_assign(createAction(`${alm}/add`),{\n withTypes:()=>addListener\n});\nvar clearAllListeners=(null && (createAction(`${alm}/removeAll`)));\nvar removeListener=redux_toolkit_modern_assign(createAction(`${alm}/remove`),{\n withTypes:()=>removeListener\n});\nvar defaultErrorHandler=(...args)=>{\n console.error(`${alm}/error`,...args);\n};)=>{\n const listenerMap=new Map();\n const{\n extra,\n onError=defaultErrorHandler\n}=middlewareOptions;\n assertFunction(onError,\"onError\");\n const insertEntry=(entry)=>{\n entry.unsubscribe=()=>listenerMap.delete(entry.id);\n listenerMap.set(entry.id,entry);\n return (cancelOptions)=>{\n entry.unsubscribe();\n if (cancelOptions?.cancelActive){\n cancelActiveListeners(entry);\n}\n};\n};\n const startListening=(options)=>{\n const entry=findListenerEntry(listenerMap,options) ?? createListenerEntry(options);\n return insertEntry(entry);\n};\n redux_toolkit_modern_assign(startListening,{\n withTypes:()=>startListening\n});\n const stopListening=(options)=>{\n const entry=findListenerEntry(listenerMap,options);\n if (entry){\n entry.unsubscribe();\n if (options.cancelActive){\n cancelActiveListeners(entry);\n}\n}\n return !!entry;\n};\n redux_toolkit_modern_assign(stopListening,{\n withTypes:()=>stopListening\n});\n const notifyListener=async (entry,action,api,getOriginalState)=>{\n const internalTaskController=new AbortController();\n const take=createTakePattern(startListening,internalTaskController.signal);\n const autoJoinPromises=[];\n try{\n entry.pending.add(internalTaskController);,api,{\n getOriginalState,\n condition:(predicate,timeout)=>take(predicate,timeout).then(Boolean),\n take,\n delay:createDelay(internalTaskController.signal),\n pause:createPause(internalTaskController.signal),\n extra,\n signal:internalTaskController.signal,\n fork:createFork(internalTaskController.signal,autoJoinPromises),\n unsubscribe:entry.unsubscribe,\n subscribe:()=>{\n listenerMap.set(entry.id,entry);\n},\n cancelActiveListeners:()=>{\n entry.pending.forEach((controller,_,set)=>{\n if (controller !==internalTaskController){\n abortControllerWithReason(controller,listenerCancelled);\n set.delete(controller);\n}\n});\n},\n cancel:()=>{\n abortControllerWithReason(internalTaskController,listenerCancelled);\n entry.pending.delete(internalTaskController);\n},\n throwIfCancelled:()=>{\n validateActive(internalTaskController.signal);\n}\n})\n));\n}catch (listenerError){\n if (!(listenerError instanceof TaskAbortError)){\n safelyNotifyError(onError,listenerError,{\n raisedBy:\"effect\"\n});\n}\n}finally{\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController,listenerCompleted);\n entry.pending.delete(internalTaskController);\n}\n};\n const clearListenerMiddleware=createClearListenerMiddleware(listenerMap);\n const middleware=(api)=>(next)=>(action)=>{\n if (!isAction3(action)){\n return next(action);\n}\n if (addListener.match(action)){\n return startListening(action.payload);\n}\n if (clearAllListeners.match(action)){\n clearListenerMiddleware();\n return;\n}\n if (removeListener.match(action)){\n return stopListening(action.payload);\n}\n let originalState=api.getState();\n const getOriginalState=()=>{\n if (originalState===INTERNAL_NIL_TOKEN){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(23):0);\n}\n return originalState;\n};\n let result;\n try{\n result=next(action);\n if (listenerMap.size>0){\n const currentState=api.getState();\n const listenerEntries=Array.from(listenerMap.values());\n for (const entry of listenerEntries){\n let runListener=false;\n try{\n runListener=entry.predicate(action,currentState,originalState);\n}catch (predicateError){\n runListener=false;\n safelyNotifyError(onError,predicateError,{\n raisedBy:\"predicate\"\n});\n}\n if (!runListener){\n continue;\n}\n notifyListener(entry,action,api,getOriginalState);\n}\n}\n}finally{\n originalState=INTERNAL_NIL_TOKEN;\n}\n return result;\n};\n return{\n middleware,\n startListening,\n stopListening,\n clearListeners:clearListenerMiddleware\n};\n};\n\n// src/dynamicMiddleware/index.ts\n\nvar createMiddlewareEntry=(middleware)=>({\n middleware,\n applied:new Map()\n});\nvar matchInstance=(instanceId)=>(action)=>action?.meta?.instanceId===instanceId;\nvar createDynamicMiddleware=()=>{\n const instanceId=nanoid();\n const middlewareMap=new Map();\n const withMiddleware=Object.assign(createAction(\"dynamicMiddleware/add\",(...middlewares)=>({\n payload:middlewares,\n meta:{\n instanceId\n}\n})),{\n withTypes:()=>withMiddleware\n});\n const addMiddleware=Object.assign(function addMiddleware2(...middlewares){\n middlewares.forEach((middleware2)=>{\n getOrInsertComputed(middlewareMap,middleware2,createMiddlewareEntry);\n});\n},{\n withTypes:()=>addMiddleware\n});\n const getFinalMiddleware=(api)=>{\n const appliedMiddleware=Array.from(middlewareMap.values()).map((entry)=>getOrInsertComputed(entry.applied,api,entry.middleware));\n return compose3(...appliedMiddleware);\n};\n const isWithMiddleware=isAllOf(withMiddleware,matchInstance(instanceId));\n const middleware=(api)=>(next)=>(action)=>{\n if (isWithMiddleware(action)){\n addMiddleware(...action.payload);\n return api.dispatch;\n}\n return getFinalMiddleware(api)(next)(action);\n};\n return{\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n};\n};\n\n// src/combineSlices.ts\n\nvar isSliceLike=(maybeSliceLike)=>\"reducerPath\" in maybeSliceLike && typeof maybeSliceLike.reducerPath===\"string\";\nvar getReducers=(slices)=>slices.flatMap((sliceOrMap)=>isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath,sliceOrMap.reducer]] :Object.entries(sliceOrMap));\nvar ORIGINAL_STATE=Symbol.for(\"rtk-state-proxy-original\");\nvar isStateProxy=(value)=>!!value && !!value[ORIGINAL_STATE];\nvar stateProxyMap=new WeakMap();\nvar createStateProxy=(state,reducerMap,initialStateCache)=>getOrInsertComputed(stateProxyMap,state,()=>new Proxy(state,{\n get:(target,prop,receiver)=>{\n if (prop===ORIGINAL_STATE) return target;\n const result=Reflect.get(target,prop,receiver);\n if (typeof result===\"undefined\"){\n const cached=initialStateCache[prop];\n if (typeof cached !==\"undefined\") return cached;\n const reducer=reducerMap[prop];\n if (reducer){\n const reducerResult=reducer(void 0,{\n type:nanoid()\n});\n if (typeof reducerResult===\"undefined\"){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(24):0);\n}\n initialStateCache[prop]=reducerResult;\n return reducerResult;\n}\n}\n return result;\n}\n}));\nvar redux_toolkit_modern_original=(state)=>{\n if (!isStateProxy(state)){\n throw new Error(true ? redux_toolkit_modern_formatProdErrorMessage(25):0);\n}\n return state[ORIGINAL_STATE];\n};;\nvar noopReducer=(state=emptyObject)=>state;\nfunction combineSlices(...slices){\n const reducerMap=Object.fromEntries(getReducers(slices));\n const getReducer=()=>Object.keys(reducerMap).length ? combineReducers2(reducerMap) :noopReducer;\n let reducer=getReducer();\n function combinedReducer(state,action){\n return reducer(state,action);\n}\n combinedReducer.withLazyLoadedSlices=()=>combinedReducer;;)=>{\n const{\n reducerPath,\n reducer:reducerToInject\n}=slice;\n const currentReducer=reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !==reducerToInject){\n if (typeof process !==\"undefined\" && \"production\"===\"development\") // removed by dead control flow\n{}\n return combinedReducer;\n}\n if (config.overrideExisting && currentReducer !==reducerToInject){\n delete initialStateCache[reducerPath];\n}\n reducerMap[reducerPath]=reducerToInject;\n reducer=getReducer();\n return combinedReducer;\n};\n const selector=Object.assign(function makeSelector(selectorFn,selectState){\n return function selector2(state,...args){\n return selectorFn(createStateProxy(selectState ? selectState(state,...args):state,reducerMap,initialStateCache),...args);\n};\n},{\n original:redux_toolkit_modern_original\n});\n return Object.assign(combinedReducer,{\n inject,\n selector\n});\n}\n\n// src/formatProdErrorMessage.ts\nfunction redux_toolkit_modern_formatProdErrorMessage(code){\n return `Minified Redux Toolkit error #${code};visit https://redux-toolkit.js.org/Errors?code=${code}for the full message or use the non-minified dev environment for full errors. `;\n}\n\n//# sourceMappingURL=redux-toolkit.modern.mjs.map\n;// ./node_modules/react-toastify/dist/index.mjs\n\"use client\";\nfunction Mt(t){if(!t||typeof document==\"undefined\")return;let o=document.head||document.getElementsByTagName(\"head\")[0],e=document.createElement(\"style\");e.type=\"text/css\",o.firstChild?o.insertBefore(e,o.firstChild):o.appendChild(e),e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}Mt(`:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:hsl(6, 78%, 57%);--toastify-color-transparent:rgba(255, 255, 255, .7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-container-width:fit-content;--toastify-toast-width:320px;--toastify-toast-offset:16px;--toastify-toast-top:max(var(--toastify-toast-offset), env(safe-area-inset-top));--toastify-toast-right:max(var(--toastify-toast-offset), env(safe-area-inset-right));--toastify-toast-left:max(var(--toastify-toast-offset), env(safe-area-inset-left));--toastify-toast-bottom:max(var(--toastify-toast-offset), env(safe-area-inset-bottom));--toastify-toast-background:#fff;--toastify-toast-padding:14px;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-toast-bd-radius:6px;--toastify-toast-shadow:0px 4px 12px rgba(0, 0, 0, .1);--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(to right, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error);--toastify-color-progress-bgo:.2}.Toastify__toast-container{z-index:var(--toastify-z-index);-webkit-transform:translate3d(0,0,var(--toastify-z-index));position:fixed;width:var(--toastify-container-width);box-sizing:border-box;color:#fff;display:flex;flex-direction:column}.Toastify__toast-container--top-left{top:var(--toastify-toast-top);left:var(--toastify-toast-left)}.Toastify__toast-container--top-center{top:var(--toastify-toast-top);left:50%;transform:translate(-50%);align-items:center}.Toastify__toast-container--top-right{top:var(--toastify-toast-top);right:var(--toastify-toast-right);align-items:end}.Toastify__toast-container--bottom-left{bottom:var(--toastify-toast-bottom);left:var(--toastify-toast-left)}.Toastify__toast-container--bottom-center{bottom:var(--toastify-toast-bottom);left:50%;transform:translate(-50%);align-items:center}.Toastify__toast-container--bottom-right{bottom:var(--toastify-toast-bottom);right:var(--toastify-toast-right);align-items:end}.Toastify__toast{--y:0;position:relative;touch-action:none;width:var(--toastify-toast-width);min-height:var(--toastify-toast-min-height);box-sizing:border-box;margin-bottom:1rem;padding:var(--toastify-toast-padding);border-radius:var(--toastify-toast-bd-radius);box-shadow:var(--toastify-toast-shadow);max-height:var(--toastify-toast-max-height);font-family:var(--toastify-font-family);z-index:0;display:flex;flex:1 auto;align-items:center;word-break:break-word}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;left:env(safe-area-inset-left);margin:0}.Toastify__toast-container--top-left,.Toastify__toast-container--top-center,.Toastify__toast-container--top-right{top:env(safe-area-inset-top);transform:translate(0)}.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-right{bottom:env(safe-area-inset-bottom);transform:translate(0)}.Toastify__toast-container--rtl{right:env(safe-area-inset-right);left:initial}.Toastify__toast{--toastify-toast-width:100%;margin-bottom:0;border-radius:0}}.Toastify__toast-container[data-stacked=true]{width:var(--toastify-toast-width)}.Toastify__toast--stacked{position:absolute;width:100%;transform:translate3d(0,var(--y),0) scale(var(--s));transition:transform .3s}.Toastify__toast--stacked[data-collapsed] .Toastify__toast-body,.Toastify__toast--stacked[data-collapsed] .Toastify__close-button{transition:opacity .1s}.Toastify__toast--stacked[data-collapsed=false]{overflow:visible}.Toastify__toast--stacked[data-collapsed=true]:not(:last-child)>*{opacity:0}.Toastify__toast--stacked:after{content:\"\";position:absolute;left:0;right:0;height:calc(var(--g) * 1px);bottom:100%}.Toastify__toast--stacked[data-pos=top]{top:0}.Toastify__toast--stacked[data-pos=bot]{bottom:0}.Toastify__toast--stacked[data-pos=bot].Toastify__toast--stacked:before{transform-origin:top}.Toastify__toast--stacked[data-pos=top].Toastify__toast--stacked:before{transform-origin:bottom}.Toastify__toast--stacked:before{content:\"\";position:absolute;left:0;right:0;bottom:0;height:100%;transform:scaleY(3);z-index:-1}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-icon{margin-inline-end:10px;width:22px;flex-shrink:0;display:flex}.Toastify--animate{animation-fill-mode:both;animation-duration:.5s}.Toastify--animate-icon{animation-fill-mode:both;animation-duration:.3s}.Toastify__toast-theme--dark{background:var(--toastify-color-dark);color:var(--toastify-text-color-dark)}.Toastify__toast-theme--light,.Toastify__toast-theme--colored.Toastify__toast--default{background:var(--toastify-color-light);color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{color:var(--toastify-text-color-info);background:var(--toastify-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{color:var(--toastify-text-color-success);background:var(--toastify-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{color:var(--toastify-text-color-warning);background:var(--toastify-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{color:var(--toastify-text-color-error);background:var(--toastify-color-error)}.Toastify__progress-bar-theme--light{background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error{background:var(--toastify-color-transparent)}.Toastify__close-button{color:#fff;position:absolute;top:6px;right:6px;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:.7;transition:.3s ease;z-index:1}.Toastify__toast--rtl .Toastify__close-button{left:6px;right:unset}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:hover,.Toastify__close-button:focus{opacity:1}@keyframes Toastify__trackProgress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:100%;z-index:1;opacity:.7;transform-origin:left}.Toastify__progress-bar--animated{animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:transform .2s}.Toastify__progress-bar--rtl{right:0;left:initial;transform-origin:right;border-bottom-left-radius:initial}.Toastify__progress-bar--wrp{position:absolute;overflow:hidden;bottom:0;left:0;width:100%;height:5px;border-bottom-left-radius:var(--toastify-toast-bd-radius);border-bottom-right-radius:var(--toastify-toast-bd-radius)}.Toastify__progress-bar--wrp[data-hidden=true]{opacity:0}.Toastify__progress-bar--bg{opacity:var(--toastify-color-progress-bgo);width:100%;height:100%}.Toastify__spinner{width:20px;height:20px;box-sizing:border-box;border:2px solid;border-radius:100%;border-color:var(--toastify-spinner-color-empty-area);border-right-color:var(--toastify-spinner-color);animation:Toastify__spin .65s linear infinite}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutRight{20%{opacity:1;transform:translate3d(-20px,var(--y),0)}to{opacity:0;transform:translate3d(2000px,var(--y),0)}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;transform:translate3d(20px,var(--y),0)}to{opacity:0;transform:translate3d(-2000px,var(--y),0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes Toastify__bounceOutUp{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes Toastify__bounceOutDown{20%{transform:translate3d(0,calc(var(--y) - 10px),0)}40%,45%{opacity:1;transform:translate3d(0,calc(var(--y) + 20px),0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--top-left,.Toastify__bounce-enter--bottom-left{animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--top-right,.Toastify__bounce-enter--bottom-right{animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--top-left,.Toastify__bounce-exit--bottom-left{animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--top-right,.Toastify__bounce-exit--bottom-right{animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{animation-name:Toastify__bounceOutDown}@keyframes Toastify__zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;transform:translate3d(0,var(--y),0) scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{animation-name:Toastify__zoomIn}.Toastify__zoom-exit{animation-name:Toastify__zoomOut}@keyframes Toastify__flipIn{0%{transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes Toastify__flipOut{0%{transform:translate3d(0,var(--y),0) perspective(400px)}30%{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(-20deg);opacity:1}to{transform:translate3d(0,var(--y),0) perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{animation-name:Toastify__flipIn}.Toastify__flip-exit{animation-name:Toastify__flipOut}@keyframes Toastify__slideInRight{0%{transform:translate3d(110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInLeft{0%{transform:translate3d(-110%,0,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInUp{0%{transform:translate3d(0,110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideInDown{0%{transform:translate3d(0,-110%,0);visibility:visible}to{transform:translate3d(0,var(--y),0)}}@keyframes Toastify__slideOutRight{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(110%,var(--y),0)}}@keyframes Toastify__slideOutLeft{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(-110%,var(--y),0)}}@keyframes Toastify__slideOutDown{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutUp{0%{transform:translate3d(0,var(--y),0)}to{visibility:hidden;transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--top-left,.Toastify__slide-enter--bottom-left{animation-name:Toastify__slideInLeft}.Toastify__slide-enter--top-right,.Toastify__slide-enter--bottom-right{animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{animation-name:Toastify__slideInUp}.Toastify__slide-exit--top-left,.Toastify__slide-exit--bottom-left{animation-name:Toastify__slideOutLeft;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--top-right,.Toastify__slide-exit--bottom-right{animation-name:Toastify__slideOutRight;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--top-center{animation-name:Toastify__slideOutUp;animation-timing-function:ease-in;animation-duration:.3s}.Toastify__slide-exit--bottom-center{animation-name:Toastify__slideOutDown;animation-timing-function:ease-in;animation-duration:.3s}@keyframes Toastify__spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n`);var L=t=>typeof t==\"number\"&&!isNaN(t),N=t=>typeof t==\"string\",P=t=>typeof t==\"function\",mt=t=>N(t)||L(t),B=t=>N(t)||P(t)?t:null,pt=(t,o)=>t===!1||L(t)&&t>0?t:o,z=t=>(0,external_React_.isValidElement)(t)||N(t)||P(t)||L(t);function Z(t,o,e=300){let{scrollHeight:r,style:s}=t;requestAnimationFrame(()=>{s.minHeight=\"initial\",s.height=r+\"px\",s.transition=`all ${e}ms`,requestAnimationFrame(()=>{s.height=\"0\",s.padding=\"0\",s.margin=\"0\",setTimeout(o,e)})})}function $({enter:t,exit:o,appendPosition:e=!1,collapse:r=!0,collapseDuration:s=300}){return function({children:a,position:d,preventExitTransition:c,done:T,nodeRef:g,isIn:v,playToast:x}){let C=e?`${t}--${d}`:t,S=e?`${o}--${d}`:o,E=(0,external_React_.useRef)(0);return (0,external_React_.useLayoutEffect)(()=>{let f=g.current,p=C.split(\" \"),b=n=>{n.target===g.current&&(x(),f.removeEventListener(\"animationend\",b),f.removeEventListener(\"animationcancel\",b),E.current===0&&n.type!==\"animationcancel\"&&f.classList.remove(...p))};(()=>{f.classList.add(...p),f.addEventListener(\"animationend\",b),f.addEventListener(\"animationcancel\",b)})()},[]),(0,external_React_.useEffect)(()=>{let f=g.current,p=()=>{f.removeEventListener(\"animationend\",p),r?Z(f,T,s):T()};v||(c?p():(()=>{E.current=1,f.className+=` ${S}`,f.addEventListener(\"animationend\",p)})())},[v]),external_React_.createElement(external_React_.Fragment,null,a)}}function J(t,o){return{content:tt(t.content,t.props),containerId:t.props.containerId,id:t.props.toastId,theme:t.props.theme,type:t.props.type,data:t.props.data||{},isLoading:t.props.isLoading,icon:t.props.icon,reason:t.removalReason,status:o}}function tt(t,o,e=!1){return Ut(t)&&!N(t.type)?Ft(t,{closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):P(t)?t({closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):t}function yt({closeToast:t,theme:o,ariaLabel:e=\"close\"}){return ot.createElement(\"button\",{className:`Toastify__close-button Toastify__close-button--${o}`,type:\"button\",onClick:r=>{r.stopPropagation(),t(!0)},\"aria-label\":e},ot.createElement(\"svg\",{\"aria-hidden\":\"true\",viewBox:\"0 0 14 16\"},ot.createElement(\"path\",{fillRule:\"evenodd\",d:\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"})))}function gt({delay:t,isRunning:o,closeToast:e,type:r=\"default\",hide:s,className:l,controlledProgress:a,progress:d,rtl:c,isIn:T,theme:g}){let v=s||a&&d===0,x={animationDuration:`${t}ms`,animationPlayState:o?\"running\":\"paused\"};a&&(x.transform=`scaleX(${d})`);let C=Tt(\"Toastify__progress-bar\",a?\"Toastify__progress-bar--controlled\":\"Toastify__progress-bar--animated\",`Toastify__progress-bar-theme--${g}`,`Toastify__progress-bar--${r}`,{[\"Toastify__progress-bar--rtl\"]:c}),S=P(l)?l({rtl:c,type:r,defaultClassName:C}):Tt(C,l),E={[a&&d>=1?\"onTransitionEnd\":\"onAnimationEnd\"]:a&&d<1?null:()=>{T&&e()}};return et.createElement(\"div\",{className:\"Toastify__progress-bar--wrp\",\"data-hidden\":v},et.createElement(\"div\",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${g}Toastify__progress-bar--${r}`}),et.createElement(\"div\",{role:\"progressbar\",\"aria-hidden\":v?\"true\":\"false\",\"aria-label\":\"notification timer\",className:S,style:x,...E}))}var Xt=1,at=()=>`${Xt++}`;function dist_t(t,o,e){let r=1,s=0,l=[],a=[],d=o,c=new Map,T=new Set,g=i=>(T.add(i),()=>T.delete(i)),v=()=>{a=Array.from(c.values()),T.forEach(i=>i())},x=({containerId:i,toastId:n,updateId:u})=>{let h=i?i!==t:t!==1,m=c.has(n)&&u==null;return h||m},C=(i,n)=>{c.forEach(u=>{var h;(n==null||n===u.props.toastId)&&((h=u.toggle)==null||h.call(u,i))})},S=i=>{var n,u;(u=(n=i.props)==null?void 0:n.onClose)==null||u.call(n,i.removalReason),i.isActive=!1},E=i=>{if(i==null)c.forEach(S);else{let n=c.get(i);n&&S(n)}v()},f=()=>{s-=l.length,l=[]},p=i=>{var m,_;let{toastId:n,updateId:u}=i.props,h=u==null;i.staleId&&c.delete(i.staleId),i.isActive=!0,c.set(n,i),v(),e(J(i,h?\"added\":\"updated\")),h&&((_=(m=i.props).onOpen)==null||_.call(m))};return{id:t,props:d,observe:g,toggle:C,removeToast:E,toasts:c,clearQueue:f,buildToast:(i,n)=>{if(x(n))return;let{toastId:u,updateId:h,data:m,staleId:_,delay:k}=n,M=h==null;M&&s++;let A={...d,style:d.toastStyle,key:r++,...Object.fromEntries(Object.entries(n).filter(([D,Y])=>Y!=null)),toastId:u,updateId:h,data:m,isIn:!1,className:B(n.className||d.toastClassName),progressClassName:B(n.progressClassName||d.progressClassName),autoClose:n.isLoading?!1:pt(n.autoClose,d.autoClose),closeToast(D){c.get(u).removalReason=D,E(u)},deleteToast(){let D=c.get(u);if(D!=null){if(e(J(D,\"removed\")),c.delete(u),s--,s<0&&(s=0),l.length>0){p(l.shift());return}v()}}};A.closeButton=d.closeButton,n.closeButton===!1||z(n.closeButton)?A.closeButton=n.closeButton:n.closeButton===!0&&(A.closeButton=z(d.closeButton)?d.closeButton:!0);let R={content:i,props:A,staleId:_};d.limit&&d.limit>0&&s>d.limit&&M?l.push(R):L(k)?setTimeout(()=>{p(R)},k):p(R)},setProps(i){d=i},setToggle:(i,n)=>{let u=c.get(i);u&&(u.toggle=n)},isToastActive:i=>{var n;return(n=c.get(i))==null?void 0:n.isActive},getSnapshot:()=>a}}var I=new Map,F=[],st=new Set,Vt=t=>st.forEach(o=>o(t)),bt=()=>I.size>0;function Qt(){F.forEach(t=>nt(t.content,t.options)),F=[]}var vt=(t,{containerId:o})=>{var e;return(e=I.get(o||1))==null?void 0:e.toasts.get(t)};function X(t,o){var r;if(o)return!!((r=I.get(o))!=null&&r.isToastActive(t));let e=!1;return I.forEach(s=>{s.isToastActive(t)&&(e=!0)}),e}function ht(t){if(!bt()){F=F.filter(o=>t!=null&&o.options.toastId!==t);return}if(t==null||mt(t))I.forEach(o=>{o.removeToast(t)});else if(t&&(\"containerId\"in t||\"id\"in t)){let o=I.get(t.containerId);o?o.removeToast(t.id):I.forEach(e=>{e.removeToast(t.id)})}})=>{I.forEach(o=>{o.props.limit&&(!t.containerId||o.id===t.containerId)&&o.clearQueue()})};function nt(t,o){z(t)&&(bt()||F.push({content:t,options:o}),I.forEach(e=>{e.buildToast(t,o)}))}function xt(t){var o;(o=I.get(t.containerId||1))==null||o.setToggle(t.id,t.fn)}function rt(t,o){I.forEach(e=>{(o==null||!(o!=null&&o.containerId)||(o==null?void 0:o.containerId)===e.id)&&e.toggle(t,o==null?void 0:o.id)})}function Et(t){let o=t.containerId||1;return{subscribe(e){let r=dist_t(o,t,Vt);I.set(o,r);let s=r.observe(e);return Qt(),()=>{s(),I.delete(o)}},setProps(e){var r;(r=I.get(o))==null||r.setProps(e)},getSnapshot(){var e;return(e=I.get(o))==null?void 0:e.getSnapshot()}}}function Pt(t){return st.add(t),()=>{st.delete(t)}}function Wt(t){return t&&(N(t.toastId)||L(t.toastId))?t.toastId:at()}function U(t,o){return nt(t,o),o.toastId}function V(t,o){return{...o,type:o&&o.type||t,toastId:Wt(o)}}function Q(t){return(o,e)=>U(o,V(t,e))}function y(t,o){return U(t,V(\"default\",o))}y.loading=(t,o)=>U(t,V(\"default\",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...o}));function Gt(t,{pending:o,error:e,success:r},s){let l;o&&(l=N(o)?y.loading(o,s):y.loading(o.render,{...s,...o}));let a={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},d=(T,g,v)=>{if(g==null){y.dismiss(l);return}let x={type:T,...a,...s,data:v},C=N(g)?{render:g}:g;return l?y.update(l,{...x,...C}):y(C.render,{...x,...C}),v},c=P(t)?t():t;return c.then(T=>d(\"success\",r,T)).catch(T=>d(\"error\",e,T)),c}y.promise=Gt;y.success=Q(\"success\");y.info=Q(\"info\");y.error=Q(\"error\");y.warning=Q(\"warning\");y.warn=y.warning;y.dark=(t,o)=>U(t,V(\"default\",{theme:\"dark\",...o}));function qt(t){ht(t)}y.dismiss=qt;y.clearWaitingQueue=Ct;y.isActive=X;)=>{let e=vt(t,o);if(e){let{props:r,content:s}=e,l={delay:100,...r,...o,toastId:o.toastId||t,updateId:at()};l.toastId!==t&&(l.staleId=t);let a=l.render||s;delete l.render,U(a,l)}};y.done=t=>{y.update(t,{progress:1})};y.onChange=Pt;y.play=t=>rt(!0,t);y.pause=t=>rt(!1,t);function It(t){var a;let{subscribe:o,getSnapshot:e,setProps:r}=Kt(Et(t)).current;r(t);let s=(a=Yt(o,e,e))==null?void 0:a.slice();function l(d){if(!s)return[];let c=new Map;return t.newestOnTop&&s.reverse(),s.forEach(T=>{let{position:g}=T.props;c.has(g)||c.set(g,[]),c.get(g).push(T)}),Array.from(c,T=>d(T[0],T[1]))}return{getToastToRender:l,isToastActive:X,count:s==null?void 0:s.length}}function At(t){let[o,e]=kt(!1),[r,s]=kt(!1),l=St(null),a=St({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:d,pauseOnHover:c,closeToast:T,onClick:g,closeOnClick:v}=t;xt({id:t.toastId,containerId:t.containerId,fn:e}),Zt(()=>{if(t.pauseOnFocusLoss)return x(),()=>{C()}},[t.pauseOnFocusLoss]);function x(){document.hasFocus()||p(),window.addEventListener(\"focus\",f),window.addEventListener(\"blur\",p)}function C(){window.removeEventListener(\"focus\",f),window.removeEventListener(\"blur\",p)}function S(m){if(t.draggable===!0||t.draggable===m.pointerType){b();let _=l.current;a.canCloseOnClick=!0,a.canDrag=!0,_.style.transition=\"none\",t.draggableDirection===\"x\"?(a.start=m.clientX,a.removalDistance=_.offsetWidth*(t.draggablePercent/100)):(a.start=m.clientY,a.removalDistance=_.offsetHeight*(t.draggablePercent===80?t.draggablePercent*1.5:t.draggablePercent)/100)}}function E(m){let{top:_,bottom:k,left:M,right:A}=l.current.getBoundingClientRect();m.nativeEvent.type!==\"touchend\"&&t.pauseOnHover&&m.clientX>=M&&m.clientX<=A&&m.clientY>=_&&m.clientY<=k?p():f()}function f(){e(!0)}function p(){e(!1)}function b(){a.didMove=!1,document.addEventListener(\"pointermove\",n),document.addEventListener(\"pointerup\",u)}function i(){document.removeEventListener(\"pointermove\",n),document.removeEventListener(\"pointerup\",u)}function n(m){let _=l.current;if(a.canDrag&&_){a.didMove=!0,o&&p(),t.draggableDirection===\"x\"?a.delta=m.clientX-a.start:a.delta=m.clientY-a.start,a.start!==m.clientX&&(a.canCloseOnClick=!1);let k=t.draggableDirection===\"x\"?`${a.delta}px,var(--y)`:`0,calc(${a.delt)}px+var(--y))`;_.style.transform=`translate3d(${k},0)`,_.style.opacity=`${1-Math.abs(a.delta/a.removalDistance)}`}}function u(){i();let m=l.current;if(a.canDrag&&a.didMove&&m){if(a.canDrag=!1,Math.abs(a.delta)>a.removalDistance){s(!0),t.closeToast(!0),t.collapseAll();return}m.style.transition=\"transform 0.2s,opacity 0.2s\",m.style.removeProperty(\"transform\"),m.style.removeProperty(\"opacity\")}}let h={onPointerDown:S,onPointerUp:E};return d&&c&&(h.onMouseEnter=p,t.stacked||(h.onMouseLeave=f)),v&&(h.onClick=m=>{g&&g(m),a.canCloseOnClick&&T(!0)}),{playToast:f,pauseToast:p,isRunning:o,preventExitTransition:r,toastRef:l,eventHandlers:h}}var Ot=typeof window!=\"undefined\"?external_React_.useLayoutEffect:external_React_.useEffect;var G=({theme:t,type:o,isLoading:e,...r})=>external_React_.createElement(\"svg\",{viewBox:\"0 0 24 24\",width:\"100%\",height:\"100%\",fill:t===\"colored\"?\"currentColor\":`var(--toastify-icon-color-${o})`,...r});function ao(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 0 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\"}))}function so(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\"}))}function no(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\"}))}function ro(t){return external_React_.createElement(G,{...t},external_React_.createElement(\"path\",{d:\"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 0 12.207 11.779 11.779 0 11.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 11.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 11.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\"}))}function io(){return external_React_.createElement(\"div\",{className:\"Toastify__spinner\"})}var W={info:so,warning:ao,success:no,error:ro,spinner:io},lo=t=>t in W;function Nt({theme:t,type:o,isLoading:e,icon:r}){let s=null,l={theme:t,type:o};return r===!1||(P(r)?s=r({...l,isLoading:e}):eo(r)?s=oo(r,l):e?s=W.spinner():lo(o)&&(s=W[o](l))),s}var wt=t=>{let{isRunning:o,preventExitTransition:e,toastRef:r,eventHandlers:s,playToast:l}=At(t),{closeButton:a,children:d,autoClose:c,onClick:T,type:g,hideProgressBar:v,closeToast:x,transition:C,position:S,className:E,style:f,progressClassName:p,updateId:b,role:i,progress:n,rtl:u,toastId:h,deleteToast:m,isIn:_,isLoading:k,closeOnClick:M,theme:A,ariaLabel:R}=t,D=it(\"Toastify__toast\",`Toastify__toast-theme--${A}`,`Toastify__toast--${g}`,{[\"Toastify__toast--rtl\"]:u},{[\"Toastify__toast--close-on-click\"]:M}),Y=P(E)?E({rtl:u,position:S,type:g,defaultClassName:D}):it(D,E),ft=Nt(t),dt=!!n||!c,j={closeToast:x,type:g,theme:A},H=null;return a===!1||(P(a)?H=a(j):fo(a)?H=co(a,j):H=yt(j)),q.createElement(C,{isIn:_,done:m,position:S,preventExitTransition:e,nodeRef:r,playToast:l},q.createElement(\"div\",{id:h,tabIndex:0,onClick:T,\"data-in\":_,className:Y,...s,style:f,ref:r,..._&&{role:i,\"aria-label\":R}},ft!=null&&q.createElement(\"div\",{className:it(\"Toastify__toast-icon\",{[\"Toastify--animate-icon Toastify__zoom-enter\"]:!k})},ft),tt(d,t,!o),H,!t.customProgressBar&&q.createElement(gt,{...b&&!dt?{key:`p-${b}`},rtl:u,theme:A,delay:c,isRunning:o,isIn:_,closeToast:x,hide:v,type:g,className:p,controlledProgress:dt,progress:n||0})))};var K=(t,o=!1)=>({enter:`Toastify--animate Toastify__${t}-enter`,exit:`Toastify--animate Toastify__${t}-exit`,appendPosition:o}),lt=$(K(\"bounce\",!0)),mo=$(K(\"slide\",!0)),po=$(K(\"zoom\")),uo=$(K(\"flip\"));var _o={position:\"top-right\",transition:lt,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:\"touch\",draggablePercent:80,draggableDirection:\"x\",role:\"alert\",theme:\"light\",\"aria-label\":\"Notifications Alt+T\",hotKeys:t=>t.altKey&&t.code===\"KeyT\"};function Lt(t){let o={..._o,...t},e=t.stacked,[r,s]=go(!0),l=To(null),{getToastToRender:a,isToastActive:d,count:c}=It(o),{className:T,style:g,rtl:v,containerId:x,hotKeys:C}=o;function S(f){let p=Dt(\"Toastify__toast-container\",`Toastify__toast-container--${f}`,{[\"Toastify__toast-container--rtl\"]:v});return P(T)?T({position:f,rtl:v,defaultClassName:p}):Dt(p,B(T))}function E(){e&&(s(!0),y.play())}return Ot(()=>{var f;if(e){let p=l.current.querySelectorAll('[data-in=\"true\"]'),b=12,i=(f=o.position)==null?void 0:f.includes(\"top\"),n=0,u=0;Array.from(p).reverse().forEach((h,m)=>{let _=h;_.classList.add(\"Toastify__toast--stacked\"),m>0&&(_.dataset.collapsed=`${r}`),_.dataset.pos||(_.dataset.pos=i?\"top\":\"bot\");let k=n*(r?.2:1)+(r?0:b*m);_.style.setProperty(\"--y\",`${i?k:k*-1}px`),_.style.setProperty(\"--g\",`${b}`),_.style.setProperty(\"--s\",`${1-(r?u:0)}`),n+=_.offsetHeight,u+=.025})}},[r,c,e]),yo(()=>{function f(p){var i;let b=l.current;C(p)&&((i=b.querySelector('[tabIndex=\"0\"]'))==null||i.focus(),s(!1),y.pause()),p.key===\"Escape\"&&(document.activeElement===b||b!=null&&b.contains(document.activeElement))&&(s(!0),y.play())}return document.addEventListener(\"keydown\",f),()=>{document.removeEventListener(\"keydown\",f)}},[C]),ct.createElement(\"section\",{ref:l,className:\"Toastify\",id:x,onMouseEnter:()=>{e&&(s(!1),y.pause())},onMouseLeave:E,\"aria-live\":\"polite\",\"aria-atomic\":\"false\",\"aria-relevant\":\"additions text\",\"aria-label\":o[\"aria-label\"]},a((f,p)=>{let b=p.length?{...g}:{...g,pointerEvents:\"none\"};return ct.createElement(\"div\",{tabIndex:-1,className:S(f),\"data-stacked\":e,style:b,key:`c-${f}`},p.map(({content:i,props:n})=>ct.createElement(wt,{...n,stacked:e,collapseAll:E,isIn:d(n.toastId,n.containerId),key:`t-${n.key}`},i)))}))}\n//# sourceMappingURL=index.mjs.map\n;// ./src/config.js\nconst isLocalhost=window.location.hostname==='localhost';\nconst BASE_URL=isLocalhost ? 'https://localhost/wordpress' :window.location.origin;\n\n// const API_BASE_URL=`${BASE_URL}/wp-json/ai-content/v1`;\n\n const src_config=(BASE_URL);\n;// ./src/redux/Slices/ChatbotSlice.js\n\n\n\nconst GetChatbotData=createAsyncThunk(\"chatbot/chatbot-data\",async ()=>{\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/get-chatbot-setting\",{\n method:\"GET\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce,\n \"Content-Type\":\"application/json\"\n}\n});\n const response_data=await response.json();\n return response_data;\n});\nconst SaveAppearanceSetting=createAsyncThunk(\"chatbot/save-chatbot-data\",async data=>{\n // Transform the data to match what the API expects\n const apiData={\n bg_color:data.primaryColor,\n text_color:data.secondaryColor,\n type:data.botIcon,\n icon:data.icon\n};\n const formData=new FormData();\n formData.append(\"bg_color\",data.BackgroundColor);\n formData.append(\"text_color\",data.textColor);\n formData.append(\"type\",data.botIconType);\n\n // Only append the file if it exists and botIconType is 'custom'\n if (data.botIconType===\"custom\" && data.customBotIcon && data.customBotIcon.length>0){\n formData.append(\"icon\",data.customBotIcon[0]);\n}\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/save-appearance-setting\",{\n method:\"POST\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce\n},\n body:formData\n});\n const response_data=await response.json();\n return response_data;\n});\nconst SaveMessageSettings=createAsyncThunk(\"chatbot/save-message-settings\",async data=>{\n const apiData={\n chat_bot_msg:data.welcomeMessage,\n placeholder_msg:data.placeholderText,\n chatbot_name:data.headerText\n};\n const response=await fetch(src_config+\"/wp-json/ai-content/v1/save-message-setting\",{\n method:\"POST\",\n headers:{\n \"X-WP-Nonce\":wpApiSettings.nonce,\n \"Content-Type\":\"application/json\"\n},\n body:JSON.stringify(apiData)\n});\n const response_data=await response.json();\n return response_data;\n});\nconst ChatbotSlice=createSlice({\n name:\"chatbot\",\n initialState:{\n is_loading:{\n load:false,\n appearance:false,\n message:false,\n mode:false\n},\n message:\"\"\n},\n extraReducers:builder=>{\n builder.addCase(GetChatbotData.pending,state=>{\n state.is_loading.load=true;\n state.error=null;\n}).addCase(GetChatbotData.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.ChatbotData=action.payload?.data?.data;\n state.message=action.payload?.data?.message;\n state.is_loading.load=false;\n}else if (action.payload?.success===false){\n state.error=action.payload?.data?.message;\n state.is_loading.load=false;\n}\n}).addCase(GetChatbotData.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while fetching chatbot data\";\n state.is_loading.load=false;\n})\n\n // Save Chatbot Data cases\n .addCase(SaveAppearanceSetting.pending,state=>{\n state.is_loading.appearance=true;\n state.error=null;\n}).addCase(SaveAppearanceSetting.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.ChatbotData=action.payload?.data?.data || state.ChatbotData;\n y.success(action.payload?.data?.message || \"Settings saved successfully\");\n state.message=action.payload?.data?.message || \"Settings saved successfully\";\n state.is_loading.appearance=false;\n}else if (action.payload?.success===false){\n state.error=action.payload?.data?.message || \"Failed to save settings\";\n y.error(action.payload?.data?.message || \"Failed to save settings\");\n state.is_loading.appearance=false;\n}\n}).addCase(SaveAppearanceSetting.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while saving chatbot data\";\n state.is_loading.appearance=false;\n})\n\n // Add these cases to your existing extraReducers in ChatbotSlice.js\n .addCase(SaveMessageSettings.pending,state=>{\n state.error=null;\n state.is_loading.message=true;\n}).addCase(SaveMessageSettings.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.message=action.payload?.message || \"Message settings saved successfully\";\n y.success(action.payload?.message || \"Message settings saved successfully\");\n state.is_loading.message=false;\n}else{\n state.error=action.payload?.data?.message || \"Failed to save message settings\";\n y.error(action.payload?.data?.message || \"Failed to save message settings\");\n state.is_loading.message=false;\n}\n}).addCase(SaveMessageSettings.rejected,(state,action)=>{\n state.error=action.error?.message || \"An error occurred while saving message settings\";\n state.is_loading.message=false;\n});\n}\n});\n const Slices_ChatbotSlice=(ChatbotSlice.reducer);\n;// ./src/utils/userClientStorage.js\n\n\nconst LS_KEYS=[\"wpai_auth_session_blob\",\"token\",\"user_data\",\"selectedLeads\",\"savedUrls\",\"wpai_agent_mode\",\"wpai_chatbot_visible\",\"wpai_sidebar_collapsed\",\"wpai_user_id\",\"wpai_push_device_id\",\"wpai_last_registered_fcm_token\",\"wpai_realtime_chat_enabled\",\"wpai_visitor_intelligence_enabled\",\"ChatbotAuthorization\"];;\nlet hydrated=false;\nlet inflightHydrate=null;\nlet saveTimer=null;\nconst pendingPatch=Object.create(null);\nfunction wpRestNonce(){\n if (typeof window===\"undefined\") return \"\";\n return window.wpApiSettings && window.wpApiSettings.nonce || window.wpaiSessionData && window.wpaiSessionData.nonce || \"\";\n}\nfunction restRoot(){\n if (typeof window===\"undefined\" || !window.wpApiSettings?.root) return \"\";\n return String(window.wpApiSettings.root).replace(/\\/+$/,\"\");\n}\nfunction userClientStorage_getUserClientStorageSync(key){\n const v=cache[key];\n if (v===undefined || v===null) return null;\n return String(v);\n}\nfunction userClientStorage_setUserClientStorageSync(key,value){\n const s=value==null ? null :typeof value===\"string\" ? value :String(value);\n if (s===null){\n delete cache[key];\n pendingPatch[key]=null;\n}else{\n cache[key]=s;\n pendingPatch[key]=s;\n}\n scheduleFlush();\n}\nfunction removeUserClientStorageSync(key){\n delete cache[key];\n pendingPatch[key]=null;\n scheduleFlush();\n}\nfunction scheduleFlush(){\n if (typeof window===\"undefined\") return;\n if (saveTimer) clearTimeout(saveTimer);\n saveTimer=window.setTimeout(()=>{\n saveTimer=null;\n void flushPending();\n},400);\n}\nasync function flushPending(){\n const keys=Object.keys(pendingPatch);\n if (keys.length===0) return;\n const patch={\n ...pendingPatch\n};\n for (const k of keys) delete pendingPatch[k];\n const root=restRoot();\n const nonce=wpRestNonce();\n if (!root || !nonce){\n Object.assign(pendingPatch,patch);\n return;\n}\n try{\n const res=await fetch(`${root}/autowp/v1/user-client-storage`,{\n method:\"POST\",\n credentials:\"same-origin\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":nonce\n},\n body:JSON.stringify({\n patch\n})\n});\n if (!res.ok){\n Object.assign(pendingPatch,patch);\n return;\n}\n const data=await res.json();\n if (data && typeof data===\"object\" && !Array.isArray(data)){\n cache={\n ...data\n};\n}\n purgeLegacyLocalStorage();\n}catch{\n Object.assign(pendingPatch,patch);\n}\n}\nfunction purgeLegacyLocalStorage(){\n if (typeof window===\"undefined\" || !window.localStorage) return;\n try{\n for (const k of LS_KEYS){\n try{\n window.localStorage.removeItem(k);\n}catch{\n \n}\n}\n}catch{\n \n}\n}\nfunction migrateLegacyLocalStorageToCache(){\n if (typeof window===\"undefined\" || !window.localStorage) return false;\n if (window.sessionStorage && window.sessionStorage.getItem(\"wpai_db_storage_migrated_v1\")){\n return false;\n}\n let changed=false;\n for (const k of LS_KEYS){\n try{\n const v=window.localStorage.getItem(k);\n if (v !=null && v !==\"\" && (cache[k]===undefined || cache[k]===null || cache[k]===\"\")){\n cache[k]=v;\n pendingPatch[k]=v;\n changed=true;\n}\n}catch{\n \n}\n}\n return changed;\n}\nasync function hydrateUserClientStorage(){\n if (typeof window===\"undefined\") return cache;\n if (hydrated) return cache;\n if (inflightHydrate) return inflightHydrate;\n inflightHydrate=(async ()=>{\n let serverOk=false;\n const root=restRoot();\n const nonce=wpRestNonce();\n if (root && nonce){\n try{\n const res=await fetch(`${root}/autowp/v1/user-client-storage`,{\n credentials:\"same-origin\",\n headers:{\n \"X-WP-Nonce\":nonce\n}\n});\n if (res.ok){\n const data=await res.json();\n if (data && typeof data===\"object\" && !Array.isArray(data)){\n cache={\n ...data\n};\n}\n serverOk=true;\n}\n}catch{\n \n}\n}\n const migrated=migrateLegacyLocalStorageToCache();\n if (migrated && Object.keys(pendingPatch).length>0){\n await flushPending();\n try{\n if (window.sessionStorage){\n window.sessionStorage.setItem(\"wpai_db_storage_migrated_v1\",\"1\");\n}\n}catch{\n \n}\n}\n if (serverOk){\n purgeLegacyLocalStorage();\n}\n hydrated=true;\n return cache;\n})();\n const out=await inflightHydrate;\n inflightHydrate=null;\n return out;\n}\nasync function flushUserClientStorageNow(){\n if (saveTimer && typeof window !==\"undefined\"){\n clearTimeout(saveTimer);\n saveTimer=null;\n}\n await flushPending();\n}\n;// ./src/utils/AuthToken.js\n\n\nconst WPAI_AUTH_SESSION_STORAGE_KEY=\"wpai_auth_session_blob\";\nfunction consumeBootstrapSessionBlob(){\n if (typeof window===\"undefined\" || !window.wpApiSettings){\n return null;\n}\n const boot=window.wpApiSettings.authSessionBlob;\n if (typeof boot !==\"string\" || boot.length===0){\n return null;\n}\n try{\n delete window.wpApiSettings.authSessionBlob;\n}catch{\n window.wpApiSettings.authSessionBlob=\"\";\n}\n return boot;\n}\nasync function clearAuthSessionInWordPressDb(){\n if (typeof window===\"undefined\" || !window.ajaxurl){\n return;\n}\n const nonce=window.wpApiSettings?.nonce;\n if (!nonce){\n return;\n}\n try{\n const body=new URLSearchParams();\n body.set(\"action\",\"wpai_clear_auth_session\");\n body.set(\"nonce\",nonce);\n await fetch(window.ajaxurl,{\n method:\"POST\",\n credentials:\"same-origin\",\n headers:{\n \"Content-Type\":\"application/x-www-form-urlencoded\"\n},\n body\n});\n}catch{\n // best-effort;local session is already cleared\n}\n}\nconst AuthToken_TokenHandle={\n apiError(error){\n let errorMessage=\"An unexpected error occurred\";\n if (error?.response){\n if (error.response.data && error.response.data.message){\n errorMessage=error.response.data.message;\n}else{\n errorMessage=`Server error:${error.response.status}`;\n}\n}else if (error?.request){\n errorMessage=\"No response from server. Please check your connection.\";\n}else if (error?.message){\n errorMessage=error.message;\n}\n return{\n success:false,\n error:errorMessage\n};\n},\n async createToken(token){\n try{\n if (typeof window===\"undefined\"){\n return{\n success:false,\n message:\"Browser context is not available.\"\n};\n}\n await hydrateUserClientStorage();\n userClientStorage_setUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY,token);\n await flushUserClientStorageNow();\n return{\n success:true,\n message:\"Session stored\"\n};\n}catch (error){\n throw this.apiError(error);\n}\n},\n async getToken(){\n try{\n if (typeof window===\"undefined\"){\n return{\n success:false,\n token:null\n};\n}\n await hydrateUserClientStorage();\n let blob=userClientStorage_getUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n if (!blob){\n const migrated=consumeBootstrapSessionBlob();\n if (migrated){\n userClientStorage_setUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY,migrated);\n await flushUserClientStorageNow();\n blob=userClientStorage_getUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n}\n}\n if (!blob){\n return{\n success:false,\n token:null\n};\n}\n return{\n success:true,\n token:{\n auth_token:blob\n}\n};\n}catch (error){\n throw this.apiError(error);\n}\n},\n async deleteToken(){\n try{\n if (typeof window !==\"undefined\"){\n await hydrateUserClientStorage();\n removeUserClientStorageSync(WPAI_AUTH_SESSION_STORAGE_KEY);\n removeUserClientStorageSync(\"ChatbotAuthorization\");\n await flushUserClientStorageNow();\n}\n await clearAuthSessionInWordPressDb();\n if (typeof window !==\"undefined\" && window.wpApiSettings){\n window.wpApiSettings.authSessionBlob=\"\";\n}\n return{\n success:true,\n message:\"Authentication token cleared successfully\"\n};\n}catch (error){\n throw this.apiError(error);\n}\n}\n};\n;// ./src/utils/index.js\n\n\n\n\nconst API_URLS={\n LOCALHOST:\"https://localhost:8000/api/v1/\",\n DEVELOPMENT:\"https://klizos.ddns.net:8000/api/v1/\",\n PRODUCTION:\"https://autowp.ai/api/v1/\"\n};\n\n\nconst getWpRestNonce=()=>{\n if (typeof window===\"undefined\") return \"\";\n return window.wpApiSettings && window.wpApiSettings.nonce || window.wpaiSessionData && window.wpaiSessionData.nonce || window.aiContentSettings && window.aiContentSettings.nonce || \"\";\n};\n\n\nconst getAutowpApiBaseUrl=()=>{\n if (typeof window !==\"undefined\" && window.wpaiPluginSettings?.directSaaSApiUrl){\n const u=String(window.wpaiPluginSettings.directSaaSApiUrl).trim();\n return u.endsWith(\"/\") ? u :`${u}/`;\n}\n if (typeof window !==\"undefined\" && window.wpApiSettings?.root){\n const root=String(window.wpApiSettings.root).replace(/\\/+$/,\"\");\n return `${root}/autowp/v1/`;\n}\n return API_URLS.LOCALHOST;\n};\nconst API_URL=getAutowpApiBaseurl(https://klizos.com/wp-content/plugins/seo-tool/build/);\nconst PLUGIN_INFO={\n name:\"wpai-wordpress-plugin\",\n version:window.wpApiSettings?.pluginVersion || window.wpaiPluginSettings?.version || \"1.0.0\"\n};\n\n\nconst REALTIME_CHAT_STORAGE_KEY=\"wpai_realtime_chat_enabled\";\nconst getRealtimeChatEnabled=()=>{\n if (typeof window===\"undefined\") return false;\n return getUserClientStorageSync(REALTIME_CHAT_STORAGE_KEY)===\"true\";\n};\nconst setRealtimeChatEnabled=enabled=>{\n if (typeof window===\"undefined\") return;\n setUserClientStorageSync(REALTIME_CHAT_STORAGE_KEY,enabled ? \"true\":\"false\");\n};\n\n\nconst VISITOR_INTELLIGENCE_STORAGE_KEY=\"wpai_visitor_intelligence_enabled\";\nconst getVisitorIntelligenceEnabled=()=>{\n if (typeof window===\"undefined\") return false;\n return getUserClientStorageSync(VISITOR_INTELLIGENCE_STORAGE_KEY)===\"true\";\n};\nconst setVisitorIntelligenceEnabled=enabled=>{\n if (typeof window===\"undefined\") return;\n setUserClientStorageSync(VISITOR_INTELLIGENCE_STORAGE_KEY,enabled ? \"true\":\"false\");\n};\n\n\nconst getRealtimeWsBaseUrl=()=>{\n if (typeof window===\"undefined\") return \"wss://controlcenter.autowp.ai\";\n return window.wpaiPluginSettings && window.wpaiPluginSettings.realtimeWsHost || \"wss://controlcenter.autowp.ai\";\n};\nconst getSessionID=()=>{\n if (typeof window !==\"undefined\" && window.wpaiSessionData){\n return window.wpaiSessionData.sessionID || null;\n}\n return null;\n};\nconst EncryptPayload=payload=>{\n const jsonData=JSON.stringify(payload);\n\n // Encode to UTF-8 before base64\n const encodedData=btoa(unescape(encodeURIComponent(jsonData)));\n return encodedData;\n};\nconst DecryptPayload=payload=>{\n try{\n if (!isBase64(payload)){\n return null;\n}\n const decodedData=atob(payload);\n const jsonData=JSON.parse(decodedData);\n return jsonData;\n}catch (error){\n // throw new Error('Failed to decode the data. Please check the data format.');\n return null;\n}\n};\nconst isBase64=str=>{\n try{\n return btoa(atob(str))===str;\n}catch (e){\n return false;\n}\n};\n\n\nconst normalizeEncodedDataForSession=encoded_data=>{\n if (encoded_data==null || encoded_data===\"\"){\n return{\n decoded:null,\n storagePayload:null\n};\n}\n if (typeof encoded_data===\"object\" && !Array.isArray(encoded_data)){\n return{\n decoded:encoded_data,\n storagePayload:EncryptPayload(encoded_data)\n};\n}\n if (typeof encoded_data===\"string\"){\n return{\n decoded:DecryptPayload(encoded_data),\n storagePayload:encoded_data\n};\n}\n return{\n decoded:null,\n storagePayload:null\n};\n};\nconst GetDataFromLocalStorage=async ()=>{\n const dataTokenResponse=await TokenHandle.getToken();\n const data=dataTokenResponse.token?.auth_token;\n if (data){\n const decryptedData=DecryptPayload(data);\n return decryptedData;\n}\n return null;\n};\nconst TimeDiff=date=>{\n const seconds=Math.floor((new Date() - new Date(date)) / 1000);\n const minutes=Math.floor(seconds / 60);\n if (minutes < 1) return \"Just now\";\n if (minutes < 60) return `${minutes}minute${minutes>1 ? \"s\":\"\"}ago`;\n const hours=Math.floor(minutes / 60);\n if (hours < 24) return `${hours}hour${hours>1 ? \"s\":\"\"}ago`;\n const days=Math.floor(hours / 24);\n return `${days}day${days>1 ? \"s\":\"\"}ago`;\n};\nconst WpAiPluginsPricing=[{\n title:\"Free Plan\",\n articlesPerMonth:15,\n chatbotResponses:5000,\n price:\"$0\",\n period:\"month\",\n description:\"Perfect for individuals or small projects just getting started.\",\n features:[\"Generate 15 articles per month\",\"5000 AI chatbot responses per month\",\"100 AI comments per month\",\"Basic chatbot features\",\"Basic SEO optimization\",\"Community support\",\"Basic AI model available for 15 times\",\"Knowledge Base Token Limit:50,0 tokens\"]\n},{\n title:\"Silver Plan\",\n articlesPerMonth:100,\n chatbotResponses:50000,\n price:\"$20\",\n period:\"month\",\n description:\"Great for growing businesses seeking to boost their digital footprint and engagement.\",\n features:[\"Generate 100 articles per month\",\"50,0 AI chatbot responses per month\",\"300 AI comments per month\",\"Custom chatbot personality\",\"Advanced SEO optimization\",\"Priority support\",\"Access to premium templates\",\"Custom content tone\",\"Keyword research tools\",\"Chat widget customization\",\"Knowledge Base Token Limit:100,0 tokens\",\"basic AI model available for 20 times\",\"Advanced AI model available for 50 times\",\"Ultra AI model available for 20 times\",\"Max AI model available for 10 times\"],\n popular:true\n},{\n title:\"Gold Plan\",\n articlesPerMonth:180,\n chatbotResponses:150000,\n price:\"$49\",\n period:\"month\",\n description:\"Ideal for small businesses looking to enhance their online presence.\",\n features:[\"Generate 180 articles per month\",\"1,50,0 AI chatbot responses per month\",\"800 AI comments per month\",\"Custom chatbot personality\",\"Advanced SEO optimization\",\"Priority support\",\"Access to premium templates\",\"Custom content tone\",\"Keyword research tools\",\"Chat widget customization\",\"Knowledge Base Token Limit:500,0 tokens\",\"basic AI model available for 35 times\",\"Advanced AI model available for 100 times\",\"Ultra AI model available for 30 times\",\"Max AI model available for 15 times\"],\n popular:true\n},{\n title:\"Platinum Plan\",\n articlesPerMonth:430,\n chatbotResponses:500000,\n price:\"$99\",\n period:\"month\",\n description:\"Best for agencies and large businesses needing extensive content generation.\",\n features:[\"Generate 430 articles per month\",\"5,0,0 AI chatbot responses per month\",\"3,0 AI comments per month\",\"Advanced chatbot analytics\",\"Multi-language support\",\"Expert SEO optimization\",\"24/7 Premium support\",\"All premium templates\",\"Advanced analytics\",\"API access\",\"Custom integrations\",\"Dedicated account manager\",\"Knowledge Base Token Limit:2,0,0 tokens\",\"basic AI model available for 65 times\",\"Advanced AI model available for 250 times\",\"Ultra AI model available for 90 times\",\"Max AI model available for 25 times\"]\n}];\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/KeyboardArrowDown.js\nvar KeyboardArrowDown=__webpack_require__(9483);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Check.js\nvar Check=__webpack_require__(4017);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/ErrorOutline.js\nvar ErrorOutline=__webpack_require__(1249);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/Refresh.js\nvar Refresh=__webpack_require__(2702);\n// EXTERNAL MODULE:./node_modules/@mui/icons-material/HourglassEmpty.js\nvar HourglassEmpty=__webpack_require__(1434);\n;// ./src/components/Chatbot/chatbotMarkdown.jsx\n\n\n\n\nfunction parseInline(text){\n if (!text) return null;\n const parts=[];\n let key=0;\n let i=0;\n const len=text.length;\n while (i < len){\n if (text.startsWith('**',i)){\n const end=text.indexOf('**',i+2);\n if (end !==-1){\n parts.push(external_React_default().createElement(\"strong\",{\n key:key++\n},text.slice(i+2,end)));\n i=end+2;\n continue;\n}\n}\n if (text[i]==='`'){\n const end=text.indexOf('`',i+1);\n if (end !==-1){\n parts.push(external_React_default().createElement(Box_Box,{\n component:\"code\",\n key:key++,\n sx:{\n px:.75,\n py:.125,\n borderRadius:.75,\n bgcolor:'rgba(15,23,42,.06)',\n fontFamily:'ui-monospace,SFMono-Regular,Menlo,monospace',\n fontSize:'0.84em'\n}\n},text.slice(i+1,end)));\n i=end+1;\n continue;\n}\n}\n let next=len;\n const boldAt=text.indexOf('**',i);\n const tickAt=text.indexOf('`',i);\n if (boldAt !==-1) next=Math.min(next, boldAt);\n if (tickAt !==-1) next=Math.min(next, tickAt);\n if (next>i){\n parts.push(external_React_default().createElement(\"span\",{\n key:key++\n},text.slice(i,next)));\n}\n i=next===i ? i+1:next;\n}\n return parts.length ? parts:text;\n}\nfunction ChatbotMarkdownContent({\n text,\n isUser,\n isStreaming\n}){\n if (text==null || text==='') return null;\n if (isStreaming){\n return external_React_default().createElement(Typography_Typography,{\n component:\"div\",\n variant:\"body1\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:400,\n letterSpacing:'0.02px'\n}\n},text);\n}\n const blocks=[];\n let rest=text;\n let bi=0;\n while (rest.length>0){\n const fence=rest.indexOf('```');\n if (fence===-1){\n blocks.push({\n type:'prose',\n content:rest\n});\n break;\n}\n if (fence>0){\n blocks.push({\n type:'prose',\n content:rest.slice(0,fence)\n});\n}\n rest=rest.slice(fence+3);\n const endFence=rest.indexOf('```');\n if (endFence===-1){\n blocks.push({\n type:'code',\n content:rest\n});\n break;\n}\n blocks.push({\n type:'code',\n content:rest.slice(0,endFence).replace(/^\\w*\\n/,'')\n});\n rest=rest.slice(endFence+3);\n}\n return external_React_default().createElement(Box_Box,{\n sx:{\n '&>*:not(:last-child)':{\n mb:1.25\n}\n}\n},blocks.map((block,idx)=>{\n if (block.type==='code'){\n return external_React_default().createElement(Box_Box,{\n key:`b-${bi++}`,\n component:\"pre\",\n sx:{\n m:0,\n p:1.5,\n borderRadius:2,\n overflow:'auto',\n maxWidth:'100%',\n bgcolor:isUser ? 'rgba(255,255,255,.12)':'rgba(15,23,42,.06)',\n border:'1px solid',\n borderColor:isUser ? 'rgba(255,255,255,.2)':'rgba(15,23,42,.08)',\n fontFamily:'ui-monospace,SFMono-Regular,Menlo,monospace',\n fontSize:'0.8125rem',\n lineHeight:1.5\n}\n},external_React_default().createElement(\"code\",null,block.content));\n}\n const lines=block.content.split('\\n');\n const nodes=[];\n let li=0;\n let listBuf=[];\n const flushList=()=>{\n if (!listBuf.length) return;\n nodes.push(external_React_default().createElement(Box_Box,{\n key:`ul-${li++}`,\n component:\"ul\",\n sx:{\n m:0,\n pl:2.25,\n color:'inherit',\n '& li':{\n mb:0.5\n}\n}\n},listBuf.map((item,j)=>external_React_default().createElement(Typography_Typography,{\n key:j,\n component:\"li\",\n variant:\"body1\",\n sx:{\n fontSize:'0.9375rem',\n lineHeight:1.65,\n display:'list-item'\n}\n},parseInline(item)))));\n listBuf=[];\n};\n for (const line of lines){\n const listMatch=line.match(/^\\s*[-*]\\s+(.*)$/);\n if (listMatch){\n listBuf.push(listMatch[1]);\n}else{\n flushList();\n if (line.trim()==='') continue;\n nodes.push(external_React_default().createElement(Typography_Typography,{\n key:`p-${idx}-${nodes.length}`,\n component:\"div\",\n variant:\"body1\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:400\n}\n},parseInline(line)));\n}\n}\n flushList();\n return external_React_default().createElement((external_React_default()).Fragment,{\n key:`frag-${idx}`\n},nodes);\n}));\n}\n;// ./src/components/Chatbot/ChatbotMessageBubble.jsx\n\n\n\n\n\n\n\n\n\nconst enterUp=(0,emotion_react_browser_esm.i7)`\n from{opacity:0;transform:translateY(10px)}\n to{opacity:1;transform:translateY(0)}\n`;\nconst streamGlow=(0,emotion_react_browser_esm.i7)`\n 0%{opacity:.35}\n 50%{opacity:1}\n 100%{opacity:.35}\n`;\nfunction InlineFormField(props){\n return external_React_default().createElement(TextField_TextField,(0,esm_extends.A)({},props,{\n sx:{\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#fff',\n border:'1px solid rgba(0,0,0,.08)',\n '& fieldset':{\n borderColor:'transparent'\n},\n '&.Mui-focused':{\n boxShadow:'0 2px 8px rgba(0,0,0,.05)'\n}\n},\n '& .MuiInputBase-input':{\n padding:'12px 16px',\n fontSize:'0.9375rem'\n}\n}\n}));\n}\nconst ChatbotMessageBubble=({\n message,\n primaryColor='#6366f1',\n secondaryColor='#ffffff',\n onStreamComplete,\n onRetry\n})=>{\n const [visibleLen,setVisibleLen]=(0,external_React_.useState)(()=>!message.isStreaming ? (message.text || '').length :0);\n const timerRef=(0,external_React_.useRef)(null);\n const streamNotifiedRef=(0,external_React_.useRef)(false);\n (0,external_React_.useEffect)(()=>{\n if (timerRef.current) window.clearTimeout(timerRef.current);\n streamNotifiedRef.current=false;\n if (!message.isStreaming){\n setVisibleLen((message.text || '').length);\n return undefined;\n}\n const full=message.text || '';\n if (!full.length){\n if (!streamNotifiedRef.current){\n streamNotifiedRef.current=true;\n onStreamComplete?.(message.id);\n}\n return undefined;\n}\n let len=0;\n setVisibleLen(0);\n const tick=()=>{\n len=Math.min(full.length, len + 1);\n setVisibleLen(len);\n if (len>=full.length){\n if (!streamNotifiedRef.current){\n streamNotifiedRef.current=true;\n onStreamComplete?.(message.id);\n}\n return;\n}\n const ch=full[len - 1];\n const delay=ch==='\\n' ? 26:/[\\s,.;:]/.test(ch) ? 12:16+Math.round(Math.random() * 12);\n timerRef.current=window.setTimeout(tick,delay);\n};\n timerRef.current=window.setTimeout(tick,45);\n return ()=>{\n if (timerRef.current) window.clearTimeout(timerRef.current);\n};\n},[message.id,message.isStreaming,message.text,onStreamComplete]);\n if (message.formField){\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n flexDirection:'column',\n alignItems:'flex-start',\n mb:2,\n ml:5,\n maxWidth:'85%'\n}\n},external_React_default().createElement(InlineFormField,{\n fullWidth:true,\n placeholder:message.placeholder,\n value:message.value,\n onChange:message.onChange,\n type:message.type || 'text',\n error:message.error,\n helperText:message.helperText,\n autoFocus:true,\n onKeyPress:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n message.onSubmit(e);\n}\n}\n}));\n}\n const isUser=message.isUser;\n const fullLen=(message.text || '').length;\n const displayText=(message.text || '').slice(0,visibleLen);\n const streamDone=!message.isStreaming || visibleLen>=fullLen;\n const showMd=!isUser && streamDone;\n const userBubbleBg=primaryColor || '#6366f1';\n const userText=secondaryColor || '#ffffff';\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n flexDirection:'column',\n alignItems:isUser ? 'flex-end' :'flex-start',\n mb:2,\n animation:`${enterUp}0.38s cubic-bezier(.22,1,.36,1) both`,\n '@media (prefers-reduced-motion:reduce)':{\n animation:'none'\n},\n '&:hover .wpai-msg-meta':{\n opacity:1\n}\n}\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n maxWidth:'88%',\n gap:1.25,\n width:'100%',\n justifyContent:isUser ? 'flex-end':'flex-start',\n alignItems:'flex-end'\n}\n},!isUser && external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:userBubbleBg,\n width:32,\n height:32,\n fontSize:'0.7rem',\n fontWeight:800,\n color:'#fff',\n boxShadow:'0 2px 8px rgba(15,23,42,.1)',\n border:'2px solid #fff'\n}\n},\"AI\"),external_React_default().createElement(Box_Box,{\n sx:{\n maxWidth:'calc(100% - 48px)',\n position:'relative'\n}\n},external_React_default().createElement(Paper_Paper,{\n elevation:0,\n sx:{\n p:'12px 16px',\n borderRadius:isUser ? '18px 18px 6px 18px' :'18px 18px 18px 6px',\n bgcolor:isUser ? userBubbleBg :'#f1f5f9',\n color:isUser ? userText :'#0f172a',\n boxShadow:isUser ? '0 4px 14px rgba(15,23,42,.12)' :'0 4px 14px rgba(15,23,42,.06)',\n border:'1px solid',\n borderColor:isUser ? 'transparent' :'rgba(15,23,42,.06)',\n position:'relative',\n transition:'box-shadow 0.2s ease',\n background:isUser ? userBubbleBg :'linear-gradient(180deg,#f8fafc 0%,#f1f5f9 100%)',\n ...(message.isStreaming && !isUser ?{\n boxShadow:'0 4px 20px rgba(99,102,241,.12)',\n '&::before':{\n content:'\"\"',\n position:'absolute',\n inset:0,\n borderRadius:'inherit',\n pointerEvents:'none',\n opacity:.5,\n background:`linear-gradient(110deg,transparent 0%,${userBubbleBg}22 45%,transparent 90%)`,\n animation:`${streamGlow}2s ease-in-out infinite`\n}\n})\n}\n},isUser ? external_React_default().createElement(Typography_Typography,{\n variant:\"body1\",\n component:\"div\",\n sx:{\n whiteSpace:'pre-wrap',\n wordBreak:'break-word',\n fontSize:'0.9375rem',\n lineHeight:1.65,\n fontWeight:450,\n color:userText\n}\n},message.text) :showMd ? external_React_default().createElement(ChatbotMarkdownContent,{\n text:message.text || '',\n isUser:false,\n isStreaming:false\n}) :external_React_default().createElement(ChatbotMarkdownContent,{\n text:displayText,\n isUser:false,\n isStreaming:true\n}),message.sources && message.sources.length>0 && external_React_default().createElement(Box_Box,{\n sx:{\n mt:2,\n pt:1.5,\n borderTop:'1px solid rgba(0,0,0,.06)'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n display:'block',\n mb:1,\n fontWeight:600,\n color:'inherit',\n opacity:0.75\n}\n},\"Sources\"),message.sources.map((source,index)=>external_React_default().createElement(Typography_Typography,{\n key:index,\n variant:\"caption\",\n sx:{\n display:'block',\n ml:.5,\n mb:.5,\n opacity:0.8\n}\n},\"\\u2022 \",source.source,\" (Relevance:\",source.relevance,\")\")))),external_React_default().createElement(Box_Box,{\n className:\"wpai-msg-meta\",\n sx:{\n display:'flex',\n alignItems:'center',\n justifyContent:isUser ? 'flex-end':'flex-start',\n gap:.75,\n mt:.5,\n opacity:.72,\n transition:'opacity 0.2s',\n flexWrap:'wrap'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n color:'#64748b',\n fontSize:'0.7rem'\n}\n},message.timestamp ? new Date(message.timestamp).toLocaleTimeString([],{\n hour:'2-digit',\n minute:'2-digit'\n}) :''),isUser && message.status==='sending' && external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Sending\"\n},external_React_default().createElement(HourglassEmpty.A,{\n sx:{\n fontSize:14,\n color:'#94a3b8'\n},\n \"aria-hidden\":true\n})),isUser && message.status==='delivered' && external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Delivered\"\n},external_React_default().createElement(Check.A,{\n sx:{\n fontSize:14,\n color:'#22c55e'\n},\n \"aria-hidden\":true\n})),isUser && message.status==='error' && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Failed to send\"\n},external_React_default().createElement(ErrorOutline.A,{\n sx:{\n fontSize:16,\n color:'#ef4444'\n},\n \"aria-hidden\":true\n})),external_React_default().createElement(Tooltip_Tooltip,{\n title:\"Retry\"\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n \"aria-label\":\"Retry sending message\",\n onClick:()=>onRetry?.(message),\n sx:{\n p:.25,\n color:'#ef4444'\n}\n},external_React_default().createElement(Refresh.A,{\n sx:{\n fontSize:18\n}\n})))))),isUser && external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:'secondary.main',\n width:32,\n height:32,\n fontSize:'0.75rem',\n fontWeight:700,\n boxShadow:'0 2px 8px rgba(15,23,42,.1)',\n border:'2px solid #fff'\n}\n},\"U\")));\n};\n const Chatbot_ChatbotMessageBubble=(external_React_default().memo(ChatbotMessageBubble));\n;// ./src/components/Chatbot/ChatbotTypingIndicator.jsx\n\n\n\nconst bounce=(0,emotion_react_browser_esm.i7)`\n 0%,80%,100%{transform:translateY(0);opacity:.35}\n 40%{transform:translateY(-6px);opacity:1}\n`;\nconst shimmer=(0,emotion_react_browser_esm.i7)`\n 0%{background-position:-120% 0}\n 100%{background-position:120% 0}\n`;\n\n\nfunction ChatbotTypingIndicator({\n primaryColor='#6366f1',\n ariaLabel='Assistant is typing',\n avatarLabel='AI'\n}){\n return external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'flex-end',\n gap:1.25,\n mb:2,\n maxWidth:'85%',\n animation:'wpaiFadeUp 0.35s ease-out both',\n '@keyframes wpaiFadeUp':{\n from:{\n opacity:0,\n transform:'translateY(8px)'\n},\n to:{\n opacity:1,\n transform:'translateY(0)'\n}\n}\n},\n role:\"status\",\n \"aria-live\":\"polite\",\n \"aria-label\":ariaLabel\n},external_React_default().createElement(Avatar_Avatar,{\n sx:{\n width:32,\n height:32,\n fontSize:'0.75rem',\n fontWeight:700,\n bgcolor:primaryColor,\n color:'#fff',\n boxShadow:'0 2px 8px rgba(15,23,42,.12)',\n border:'2px solid #fff'\n}\n},avatarLabel),external_React_default().createElement(Paper_Paper,{\n elevation:0,\n sx:{\n position:'relative',\n overflow:'hidden',\n px:2,\n py:1.5,\n borderRadius:'18px 18px 18px 6px',\n bgcolor:'#f1f5f9',\n border:'1px solid rgba(15,23,42,.06)',\n boxShadow:'0 4px 14px rgba(15,23,42,.06)',\n '&::before':{\n content:'\"\"',\n position:'absolute',\n inset:0,\n background:`linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%)`,\n backgroundSize:'200% 100%',\n animation:`${shimmer}1.4s ease-in-out infinite`,\n pointerEvents:'none',\n opacity:0.9\n}\n}\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center',\n gap:.75,\n position:'relative',\n zIndex:1\n}\n},[0,1,2].map(i=>external_React_default().createElement(Box_Box,{\n key:i,\n sx:{\n width:7,\n height:7,\n borderRadius:'50%',\n bgcolor:primaryColor,\n opacity:.85,\n animation:`${bounce}1s ease-in-out infinite`,\n animationDelay:`${i * .16}s`\n}\n})))));\n}\n const Chatbot_ChatbotTypingIndicator=(external_React_default().memo(ChatbotTypingIndicator));\n;// ./src/components/Chatbot/ChatbotMessageList.jsx\n\n\n\n\n\n\nconst MessageContainer=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n flex:1,\n padding:theme.spacing(2,2.25),\n overflowY:'auto',\n overflowX:'hidden',\n background:'linear-gradient(180deg,#ffffff 0%,#fafbfc 100%)',\n position:'relative',\n scrollBehavior:'smooth',\n '&::-webkit-scrollbar':{\n width:6\n},\n '&::-webkit-scrollbar-thumb':{\n backgroundColor:'#cbd5e1',\n borderRadius:3\n},\n '&::-webkit-scrollbar-track':{\n backgroundColor:'#f1f5f9'\n}\n}));\n\n\nfunction ChatbotMessageList({\n containerRef,\n bottomRef,\n onScroll,\n messages,\n primaryColor,\n secondaryColor,\n onStreamComplete,\n onRetry,\n childrenAboveEnd,\n isLoading,\n liveAgentTyping,\n showNewMessages,\n onJumpToLatest\n}){\n return external_React_default().createElement(MessageContainer,{\n ref:containerRef,\n onScroll:onScroll,\n className:\"wpai_messageContainer\",\n role:\"log\",\n \"aria-live\":\"polite\",\n \"aria-relevant\":\"additions\",\n \"aria-label\":\"Chat messages\"\n},messages.map((message,index)=>external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n key:message.id || `${message.timestamp}-${index}`,\n message:message,\n primaryColor:primaryColor,\n secondaryColor:secondaryColor,\n onStreamComplete:onStreamComplete,\n onRetry:onRetry\n})),childrenAboveEnd,isLoading ? external_React_default().createElement(Chatbot_ChatbotTypingIndicator,{\n primaryColor:primaryColor\n}) :null,liveAgentTyping ? external_React_default().createElement(Chatbot_ChatbotTypingIndicator,{\n primaryColor:primaryColor,\n ariaLabel:\"Agent is typing\",\n avatarLabel:\"A\"\n}) :null,external_React_default().createElement(\"div\",{\n ref:bottomRef\n}),external_React_default().createElement(Fade_Fade,{\n in:showNewMessages\n},external_React_default().createElement(Box_Box,{\n sx:{\n position:'sticky',\n bottom:12,\n left:0,\n right:0,\n display:'flex',\n justifyContent:'center',\n pointerEvents:'none',\n zIndex:2,\n mt:-6\n}\n},external_React_default().createElement(Button_Button,{\n variant:\"contained\",\n size:\"small\",\n onClick:onJumpToLatest,\n startIcon:external_React_default().createElement(KeyboardArrowDown.A,null),\n sx:{\n pointerEvents:'auto',\n textTransform:'none',\n fontWeight:700,\n borderRadius:999,\n px:2,\n py:.75,\n boxShadow:'0 8px 24px rgba(15,23,42,.18)',\n bgcolor:primaryColor || undefined\n},\n \"aria-label\":\"Jump to latest messages\"\n},\"New messages\"))));\n}\n const Chatbot_ChatbotMessageList=(external_React_default().memo(ChatbotMessageList));\n;// ./src/components/Chatbot/useSmartChatScroll.js\n\nconst BOTTOM_THRESHOLD_PX=80;\n\n\nfunction useSmartChatScroll(chatHistory,isLoading){\n const containerRef=(0,external_React_.useRef)(null);\n const bottomRef=(0,external_React_.useRef)(null);\n const stickToBottomRef=(0,external_React_.useRef)(true);\n const prevCountRef=(0,external_React_.useRef)(0);\n const [showNewMessages,setShowNewMessages]=(0,external_React_.useState)(false);\n const onScroll=(0,external_React_.useCallback)(()=>{\n const el=containerRef.current;\n if (!el) return;\n const dist=el.scrollHeight - el.scrollTop - el.clientHeight;\n stickToBottomRef.current=dist < BOTTOM_THRESHOLD_PX;\n if (stickToBottomRef.current){\n setShowNewMessages(false);\n}\n},[]);\n (0,external_React_.useEffect)(()=>{\n const grew=chatHistory.length>prevCountRef.current;\n prevCountRef.current=chatHistory.length;\n if (grew && !stickToBottomRef.current){\n setShowNewMessages(true);\n}\n if (stickToBottomRef.current){\n requestAnimationFrame(()=>{\n bottomRef.current?.scrollIntoView({\n behavior:'smooth',\n block:'end'\n});\n});\n}\n},[chatHistory,isLoading]);\n const scrollToBottom=(0,external_React_.useCallback)(()=>{\n stickToBottomRef.current=true;\n setShowNewMessages(false);\n requestAnimationFrame(()=>{\n bottomRef.current?.scrollIntoView({\n behavior:'smooth',\n block:'end'\n});\n});\n},[]);\n return{\n containerRef,\n bottomRef,\n onScroll,\n showNewMessages,\n scrollToBottom\n};\n}\n;// ./src/components/Chatbot/Chatbot.jsx\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction resolveChatbotWidgetVisible(){\n const fromCache=userClientStorage_getUserClientStorageSync('wpai_chatbot_visible');\n if (fromCache==='true'){\n return true;\n}\n if (fromCache==='false'){\n return false;\n}\n if (typeof window !=='undefined' && window.wpaiPluginSettings && window.wpaiPluginSettings.chatbotVisible !=null){\n const s=String(window.wpaiPluginSettings.chatbotVisible).toLowerCase();\n return s==='true' || s==='1';\n}\n return false;\n}\n\n\n\n\n// Define animations\nconst fadeIn=(0,emotion_react_browser_esm.i7)`\n from{opacity:0;transform:scale(.95)}\n to{opacity:1;transform:scale(1)}\n`;\nconst slideUp=(0,emotion_react_browser_esm.i7)`\n from{transform:translateY(20px);opacity:0}\n to{transform:translateY(0);opacity:1}\n`;\nconst pulseAnimation=(0,emotion_react_browser_esm.i7)`\n 0%{transform:scale(1)}\n 50%{transform:scale(1.1)}\n 100%{transform:scale(1)}\n`;\nconst ripple=(0,emotion_react_browser_esm.i7)`\n 0%{\n transform:scale(.8);\n opacity:1;\n}\n 100%{\n transform:scale(2.4);\n opacity:0;\n}\n`;\nconst ChatWindow=(0,styled.Ay)(Paper_Paper)(({\n theme\n})=>({\n position:'fixed',\n bottom:24,\n right:24,\n width:'min(360px, calc(100vw - 32px))',\n height:'min(640px, calc(100vh - 120px))',\n maxWidth:'calc(100vw - 16px)',\n maxHeight:'calc(100vh - 120px)',\n display:'flex',\n flexDirection:'column',\n zIndex:1000,\n overflow:'hidden',\n boxShadow:'0 5px 40px rgba(0,0,0,.16)',\n borderRadius:'16px',\n animation:`${fadeIn}0.4s cubic-bezier(.175,.885,.32,1.275)`,\n background:'#fff',\n className:'wpai_chatWindow',\n border:'1px solid rgba(0,0,0,.08)',\n [theme.breakpoints.down('sm')]:{\n width:'calc(100vw - 16px)',\n height:'min(520px, calc(100vh - 96px))',\n right:8,\n left:8,\n bottom:8,\n borderRadius:'12px'\n}\n}));\nconst ChatHeader=(0,styled.Ay)(Box_Box)(({\n theme,\n textcolor,\n bgcolor\n})=>({\n padding:theme.spacing(1.5,2),\n background:bgcolor || theme.palette.primary.main,\n color:textcolor || '#fff',\n display:'flex',\n alignItems:'center',\n justifyContent:'space-between',\n flexWrap:'wrap',\n gap:theme.spacing(1),\n borderTopLeftRadius:'16px',\n borderTopRightRadius:'16px',\n minHeight:'56px',\n position:'relative',\n zIndex:2,\n boxShadow:'0 1px 2px rgba(0,0,0,.1)',\n className:'wpai_chatHeader',\n '& .MuiTypography-subtitle1':{\n fontSize:'0.938rem',\n fontWeight:500,\n letterSpacing:'0.15px',\n color:textcolor || '#fff'\n},\n '& .MuiTypography-caption':{\n fontSize:'0.75rem',\n color:textcolor ? `${textcolor}99`:'rgba(255,255,255,.7)',\n letterSpacing:'0.4px',\n lineHeight:1.2\n},\n '& .MuiAvatar-root':{\n width:36,\n height:36,\n backgroundColor:'transparent',\n '& svg':{\n width:20,\n height:20,\n color:textcolor || '#fff'\n}\n},\n '& .MuiIconButton-root':{\n padding:'6px',\n marginLeft:'8px',\n '&:hover':{\n backgroundColor:'rgba(255,255,255,.1)'\n},\n '& svg':{\n fontSize:'20px'\n}\n},\n [theme.breakpoints.down('sm')]:{\n padding:theme.spacing(1.25,1.5),\n borderTopLeftRadius:'12px',\n borderTopRightRadius:'12px'\n}\n}));\nconst ChatInput=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n padding:theme.spacing(2.5,3),\n background:'#fff',\n borderTop:'1px solid rgba(0,0,0,.08)',\n className:'wpai_chatInput',\n [theme.breakpoints.down('sm')]:{\n padding:theme.spacing(1.5,1.5),\n borderTop:'1px solid rgba(0,0,0,.05)'\n}\n}));\n\n// Update the InputField styling\nconst InputField=(0,styled.Ay)(TextField_TextField)(({\n theme,\n primaryColor\n})=>({\n className:'wpai_inputField',\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#f9fafb',\n border:'1px solid rgba(0,0,0,.08)',\n transition:'all 0.2s ease',\n '&:hover':{\n backgroundColor:'#f3f4f6',\n borderColor:'rgba(0,0,0,.12)'\n},\n '& fieldset':{\n borderColor:'transparent'\n},\n '&:hover fieldset':{\n border:'none'\n},\n '&.Mui-focused':{\n backgroundColor:'#fff',\n borderColor:primaryColor || theme.palette.primary.main,\n boxShadow:'0 2px 8px rgba(0,0,0,.05)',\n '& fieldset':{\n border:'none'\n}\n},\n '& .MuiInputAdornment-root':{\n marginRight:theme.spacing(1),\n height:'100%',\n maxHeight:'none'\n}\n},\n '& .MuiInputBase-input':{\n padding:'14px 16px',\n fontSize:'0.9375rem',\n lineHeight:1.6,\n '&::placeholder':{\n color:'#9ca3af',\n opacity:1\n}\n}\n}));\nconst ChatToggle=(0,styled.Ay)(IconButton_IconButton)(({\n theme,\n bgcolor\n})=>({\n position:'fixed',\n bottom:28,\n right:28,\n width:56,\n height:56,\n background:bgcolor || theme.palette.primary.main,\n color:'#fff',\n boxShadow:'0 4px 20px rgba(0,0,0,.15)',\n borderRadius:'50%',\n '&:hover':{\n background:bgcolor || theme.palette.primary.dark,\n transform:'translateY(-2px)'\n},\n transition:'all 0.3s ease',\n animation:`${pulseAnimation}2s infinite`,\n zIndex:999,\n className:'wpai_chatToggle',\n '& svg':{\n width:24,\n height:24\n},\n [theme.breakpoints.down('sm')]:{\n bottom:16,\n right:16,\n width:52,\n height:52\n}\n}));\nconst FormResponse=(0,styled.Ay)(Box_Box)(({\n theme\n})=>({\n display:'flex',\n flexDirection:'column',\n gap:theme.spacing(2),\n maxWidth:'100%',\n animation:`${slideUp}0.3s ease-out`,\n marginLeft:theme.spacing(5),\n marginBottom:theme.spacing(2),\n className:'wpai_formResponse',\n [theme.breakpoints.down('sm')]:{\n marginLeft:0,\n marginRight:0,\n padding:theme.spacing(1,0),\n width:'100%'\n}\n}));\nconst FormField=(0,styled.Ay)(TextField_TextField)(({\n theme\n})=>({\n '& .MuiOutlinedInput-root':{\n borderRadius:'12px',\n backgroundColor:'#fff',\n border:'1px solid rgba(0,0,0,.08)',\n transition:'all 0.2s ease',\n '&:hover':{\n backgroundColor:'#f9fafb',\n borderColor:'rgba(0,0,0,.12)'\n},\n '& fieldset':{\n borderColor:'transparent'\n},\n '&.Mui-focused':{\n backgroundColor:'#fff',\n borderColor:theme.palette.primary.main,\n boxShadow:'0 2px 8px rgba(0,0,0,.05)',\n '& fieldset':{\n border:'none'\n}\n}\n},\n '& .MuiInputBase-input':{\n padding:'12px 16px',\n fontSize:'0.9375rem',\n '&::placeholder':{\n color:'#9ca3af',\n opacity:1\n}\n}\n}));\nconst MAX_RETRIES=2;\nconst TIMEOUT_DURATION=30000;// 30 seconds\n\nconst getBotIcon=(botIcon,customBotIcon)=>{\n if (botIcon==='custom' && customBotIcon){\n return external_React_default().createElement(\"img\",{\n src:customBotIcon,\n alt:\"Custom Bot Icon\",\n style:{\n width:'40px',\n height:'40px'\n}\n});\n}\n switch (botIcon){\n case 'robot':\n return external_React_default().createElement(SmartToy.A,null);\n case 'assistant':\n return external_React_default().createElement(icons_material_Person.A,null);\n default:\n return external_React_default().createElement(SmartToy.A,null);\n}\n};\nconst Chatbot=()=>{\n const [isOpen,setIsOpen]=(0,external_React_.useState)(false);\n const [input,setInput]=(0,external_React_.useState)('');\n const [chatHistory,setChatHistory]=(0,external_React_.useState)([]);\n const [isLoading,setIsLoading]=(0,external_React_.useState)(false);\n const{\n containerRef,\n bottomRef,\n onScroll,\n showNewMessages,\n scrollToBottom\n}=useSmartChatScroll(chatHistory,isLoading);\n const handleStreamComplete=(0,external_React_.useCallback)(msgId=>{\n setChatHistory(prev=>prev.map(m=>m.id===msgId ?{\n ...m,\n isStreaming:false\n}:m));\n},[]);\n const [userId]=(0,external_React_.useState)(`user_${Math.random().toString(36).substr(2,9)}`);\n const [showUserForm,setShowUserForm]=(0,external_React_.useState)(false);\n const [userFormData,setUserFormData]=(0,external_React_.useState)({\n name:'',\n email:'',\n phone:''\n});\n const [formStep,setFormStep]=(0,external_React_.useState)(0);\n const [responseCount,setResponseCount]=(0,external_React_.useState)(0);\n const [leadCaptureOffered,setLeadCaptureOffered]=(0,external_React_.useState)(false);\n const [leadCaptureDeclined,setLeadCaptureDeclined]=(0,external_React_.useState)(false);\n const [contactFormError,setContactFormError]=(0,external_React_.useState)('');\n const [showQuickReplies,setShowQuickReplies]=(0,external_React_.useState)(true);\n const theme=styles_useTheme_useTheme();\n const dispatch=useDispatch(););\n\n // Live chat with admin (realtime) – requires email to start;uses WebSocket API\n const [showLiveChatEmailForm,setShowLiveChatEmailForm]=(0,external_React_.useState)(false);\n const [liveChatEmail,setLiveChatEmail]=(0,external_React_.useState)('');\n const [liveChatEmailError,setLiveChatEmailError]=(0,external_React_.useState)('');\n const [liveChatRequested,setLiveChatRequested]=(0,external_React_.useState)(false);\n const [liveChatRequestId,setLiveChatRequestId]=(0,external_React_.useState)(null);\n const [liveChatAccepted,setLiveChatAccepted]=(0,external_React_.useState)(false);\n const [liveChatConnecting,setLiveChatConnecting]=(0,external_React_.useState)(false);\n const [liveAgentTyping,setLiveAgentTyping]=(0,external_React_.useState)(false);\n const wsLiveChatRef=(0,external_React_.useRef)(null);\n const liveChatAcceptedRef=(0,external_React_.useRef)(false);\n const customerTypingIdleTimerRef=(0,external_React_.useRef)(null);\n const customerTypingSentTrueRef=(0,external_React_.useRef)(false);\n (0,external_React_.useEffect)(()=>{\n liveChatAcceptedRef.current=liveChatAccepted;\n},[liveChatAccepted]);\n const clearCustomerTypingIdleTimer=()=>{\n if (customerTypingIdleTimerRef.current){\n clearTimeout(customerTypingIdleTimerRef.current);\n customerTypingIdleTimerRef.current=null;\n}\n};\n const sendCustomerTyping=typing=>{\n if (!liveChatAcceptedRef.current) return;\n const ws=wsLiveChatRef.current;\n if (!ws || ws.readyState !==WebSocket.OPEN) return;\n try{\n ws.send(JSON.stringify({\n type:'typing',\n typing\n}));\n}\n};\n const flushCustomerTypingStopped=(0,external_React_.useCallback)(()=>{\n clearCustomerTypingIdleTimer();\n if (customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=false;\n sendCustomerTyping(false);\n}\n},[]);\n const handleChatInputChange=(0,external_React_.useCallback)(e=>{\n const v=e.target.value;\n setInput(v);\n if (!liveChatRequested || !liveChatAcceptedRef.current) return;\n const ws=wsLiveChatRef.current;\n if (!ws || ws.readyState !==WebSocket.OPEN) return;\n if (!customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=true;\n sendCustomerTyping(true);\n}\n clearCustomerTypingIdleTimer();\n customerTypingIdleTimerRef.current=setTimeout(()=>{\n customerTypingIdleTimerRef.current=null;\n if (customerTypingSentTrueRef.current){\n customerTypingSentTrueRef.current=false;\n sendCustomerTyping(false);\n}\n},1700);\n},[liveChatRequested]);\n\n // Auth session comes from server-backed storage (TokenHandle / user meta)\n (0,external_React_.useEffect)(()=>{\n;\n (async ()=>{\n try{\n const dataTokenResponse=await AuthToken_TokenHandle.getToken();\n const dataToken=dataTokenResponse.token?.auth_token;\n if (!dataToken){\n return;\n}\n const decodedData=DecryptPayload(dataToken);\n if (decodedData?.data?.authorization?.token && decodedData?.data?.user){\n SetChatbotUserSetting({\n user:decodedData?.data?.user,\n token:decodedData?.data?.authorization?.token\n});\n}\n}\n})();\n},[]);\n const{\n ChatbotData,\n is_chatbot_load\n}=useSelector(state=>state.chatbot);\n const [chatbotStyles,setChatbotStyles]=(0,external_React_.useState)({\n primaryColor:'',\n secondaryColor:'',\n botIcon:'robot',\n welcomeMessage:'Hello! How can I help you today???',\n placeholderText:'Type a message...',\n headerText:'AI Assistant'\n});\n const [isVisible,setIsVisible]=(0,external_React_.useState)(()=>resolveChatbotWidgetVisible());\n (0,external_React_.useEffect)(()=>{\n const checkVisibility=()=>{\n setIsVisible(resolveChatbotWidgetVisible());\n};\n checkVisibility();\n const onCustom=()=>checkVisibility();\n window.addEventListener('storage',checkVisibility);\n document.addEventListener('wpai_chatbot_visibility_changed',onCustom);\n return ()=>{\n window.removeEventListener('storage',checkVisibility);\n document.removeEventListener('wpai_chatbot_visibility_changed',onCustom);\n};\n},[]);\n (0,external_React_.useEffect)(()=>{\n dispatch(GetChatbotData());\n},[dispatch]);\n (0,external_React_.useEffect)(()=>{\n if (responseCount>=3 && !leadCaptureOffered && !leadCaptureDeclined && !showUserForm && !userFormData.email){\n setLeadCaptureOffered(true);\n}\n},[responseCount,leadCaptureOffered,leadCaptureDeclined,showUserForm,userFormData.email]);\n (0,external_React_.useEffect)(()=>{\n if (chatHistory.length===0 && chatbotStyles.welcomeMessage){\n setChatHistory([{\n id:'welcome',\n text:chatbotStyles.welcomeMessage,\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n}\n},[chatbotStyles,ChatbotData,is_chatbot_load]);\n (0,external_React_.useEffect)(()=>{\n if (!is_chatbot_load && ChatbotData){\n const welcomeMsg=ChatbotData.init_msg || 'Hello! How can I help you today?';\n setChatbotStyles({\n primaryColor:ChatbotData.bot_bg_color,\n secondaryColor:ChatbotData.bot_text_color,\n botIcon:ChatbotData.bot_icon || 'robot',\n welcomeMessage:ChatbotData.init_msg || 'Hello! How can I help you today??',\n placeholderText:ChatbotData.placeholder_text || 'Type a message...',\n headerText:ChatbotData.bot_name || 'AI Assistant'\n});\n}\n},[is_chatbot_load,ChatbotData]);\n const handleStartLiveChatClick=()=>{\n setShowLiveChatEmailForm(true);\n setLiveChatEmailError('');\n};\n const connectLiveChatWs=(companyName,customerId,emailId)=>{\n console.log(\"company anme\",companyName);\n setLiveAgentTyping(false);\n clearCustomerTypingIdleTimer();\n customerTypingSentTrueRef.current=false;\n const base=getRealtimeWsBaseurl(https://klizos.com/wp-content/plugins/seo-tool/build/).replace(/\\/$/,');\n const wsUrl=`${base}/ws/customer?company_name=${encodeURIComponent(companyName)}&customer_id=${encodeURIComponent(customerId)}&email=${encodeURIComponent(emailId)}`;\n setLiveChatConnecting(true);\n try{\n const ws=new WebSocket(wsUrl);\n wsLiveChatRef.current=ws;\n ws.onopen=()=>{\n setLiveChatConnecting(false);\n ws.send(JSON.stringify({\n type:'request_chat'\n}));\n};\n ws.onmessage=event=>{\n try{\n const msg=JSON.parse(event.data);\n switch (msg.type){\n case 'request_sent':\n setLiveChatRequestId(msg.request_id || null);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:'Waiting for an agent to join…',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'chat_accepted':\n setLiveChatAccepted(true);\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:\"An agent has joined. You can chat now.\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'message':\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:msg.body || '',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n break;\n case 'typing':\n if (Object.prototype.hasOwnProperty.call(msg,'from_staff')){\n setLiveAgentTyping(!!msg.typing);\n}\n break;\n case 'message_sent':\n break;\n case 'error':\n if (msg.body){\n setChatHistory(prev=>[...prev,{\n text:`Error:${msg.body}`,\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n break;\n default:\n break;\n}\n}\n};\n ws.onclose=event=>{\n setLiveChatConnecting(false);\n setLiveAgentTyping(false);\n clearCustomerTypingIdleTimer();\n customerTypingSentTrueRef.current=false;\n if (event.code===4000 || event.code===4001){\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,\n text:event.code===4001 ? 'This company is not available for chat.':'Live chat is not configured.',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n};\n ws.onerror=()=>{\n setLiveChatConnecting(false);\n};\n}catch (err){\n setLiveChatConnecting(false);\n setChatHistory(prev=>[...prev,{\n text:'Could not connect to live chat. Please try again later.',\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n}\n};\n const handleStartLiveChat=e=>{\n e.preventDefault();\n const email=liveChatEmail.trim();\n const emailRegex=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!email){\n setLiveChatEmailError('Please enter your email address.');\n return;\n}\n if (!emailRegex.test(email)){\n setLiveChatEmailError('Please enter a valid email address.');\n return;\n}\n setLiveChatEmailError('');\n setLiveChatRequested(true);\n setShowLiveChatEmailForm(false);\n setLiveChatEmail('');\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-u`,\n text:`I've requested to talk live with the team. (${email})`,\n isUser:true,\n status:'delivered',\n timestamp:new Date().toISOString()\n}]);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-sys`,\n text:\"Connecting you to live chat…\",\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n scrollToBottom();\n const companyName=typeof window !=='undefined' && window.wpaiPluginSettings?.realtimeCompanyName || window.location.hostname || 'example.com';\n const customerId=userId;\n const emailId='md.moaj@klizos.com';\n connectLiveChatWs(companyName,customerId,emailId);\n if (typeof window !=='undefined' && window.dispatchEvent){\n window.dispatchEvent(new CustomEvent('wpai_live_chat_requested',{\n detail:{\n email,\n customerId\n}\n}));\n}\n};\n (0,external_React_.useEffect)(()=>{\n return ()=>{\n clearCustomerTypingIdleTimer();\n if (customerTypingSentTrueRef.current && wsLiveChatRef.current?.readyState===WebSocket.OPEN){\n try{\n wsLiveChatRef.current.send(JSON.stringify({\n type:'typing',\n typing:false\n}));\n}\n}\n customerTypingSentTrueRef.current=false;\n if (wsLiveChatRef.current){\n try{\n wsLiveChatRef.current.close();\n}\n wsLiveChatRef.current=null;\n}\n};\n},[]);\n const handleSubmit=async (e,retryCount=0,forcedText=null,retryUserId=null)=>{\n e.preventDefault();\n const textToSend=(forcedText !=null ? forcedText :input).trim();\n if (!textToSend) return;\n\n // Live chat:send via WebSocket when agent has accepted\n if (liveChatRequested && liveChatAccepted && wsLiveChatRef.current?.readyState===WebSocket.OPEN){\n flushCustomerTypingStopped();\n setLiveAgentTyping(false);\n setChatHistory(prev=>[...prev,{\n id:`lc-${Date.now()}-um`,\n text:textToSend,\n isUser:true,\n status:'delivered',\n timestamp:new Date().toISOString()\n}]);\n setInput('');\n scrollToBottom();\n try{\n wsLiveChatRef.current.send(JSON.stringify({\n type:'message',\n body:textToSend\n}));\n}\n return;\n}\n let userMsgId=retryUserId;\n if (!userMsgId){\n userMsgId=`u-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;\n setChatHistory(prev=>[...prev,{\n id:userMsgId,\n text:textToSend,\n isUser:true,\n status:'sending',\n timestamp:new Date().toISOString()\n}]);\n setInput('');\n scrollToBottom();\n}\n const userMessage={\n text:textToSend,\n isUser:true,\n timestamp:new Date().toISOString()\n};\n setIsLoading(true);\n const controller=new AbortController();\n const timeoutId=setTimeout(()=>controller.abort(),TIMEOUT_DURATION);\n try{\n const nonce=window?.wpApiSettings?.nonce;\n if (!nonce){\n throw new Error('Authentication error. Please refresh the page and try again.');\n}\n\n // Create the authentication payload\n const authPayload={\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n\n // Create the request data\n const requestData={\n message:userMessage.text,\n conversation_id:null,\n context:''\n};\n\n // Encrypt both payloads\n const encryptedAuthData=EncryptPayload(authPayload);\n const encryptedRequestData=EncryptPayload(requestData);\n // Make the API request\n const response=await fetch(`${API_URL}chatbot/chat`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':nonce,\n // 'X-Encrypted-Payload':encryptedAuthData,\n 'X-Encrypted-Payload':\"eyJqd3RfdG9rZW4iOiJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpJVXpJMU5pSjkuZXlKcGMzTWlPaUpvZEhSd09pOHZNVEkzTGpBdU1DNHhPamd3TURBdllYQnBMM1l4TDNWelpYSXRiRzluYVc0aUxDSnBZWFFpT2pFM056VTBPRFE0TXpZc0ltVjRjQ0k2TVRjM05qYzRNRGd6Tml3aWJtSm1Jam94TnpjMU5EZzBPRE0yTENKcWRHa2lPaUpvU25STWNIb3hUMk5xTUdGdGFrTjJJaXdpYzNWaUlqb2lOamd4T0dFd05UZ3dNbUUxTXpnM05XUTRNRFEyTVRZeUlpd2ljSEoySWpvaU1qTmlaRFZqT0RrME9XWTJNREJoWkdJek9XVTNNREZqTkRBd09EY3laR0kzWVRVNU56Wm1OeUo5LnpyZU1vMGVpMkFhNFZ3cVVRbi0ydkNQU21IY1hXLXdZRTVZdW5MY05sN3MiLCJsaWNlbnNlX2tleSI6IjdFNDM3MjE1OUMzNDZCREUiLCJkb21haW5OYW1lIjoiZ29vZ2xlLmNvbSJ9\",\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n query:userMessage.text,\n encrypted_data:encryptedRequestData,\n session_id:getSessionID()\n}),\n signal:controller.signal\n});\n clearTimeout(timeoutId);\n if (!response.ok){\n throw new Error(`Server responded with status:${response.status}`);\n}\n let rawResponse=await response.text();\n let data;\n try{\n // Parse the response as JSON first\n const parsedResponse=JSON.parse(rawResponse);\n console.log(parsedResponse);\n\n // Check for validation errors\n if (!parsedResponse.success){\n if (parsedResponse.errors && parsedResponse.errors.message){\n const errorMsg=Array.isArray(parsedResponse.errors.message) ? parsedResponse.errors.message[0]:parsedResponse.errors.message;\n throw new Error(errorMsg);\n}\n throw new Error(parsedResponse.message || 'Request failed');\n}\n\n // Try to decrypt the response if needed\n if (parsedResponse.data && typeof parsedResponse.data==='string'){\n try{\n const decryptedData=parsedResponse.data;\n data=decryptedData;\n console.log(\"data\",data);\n}catch (decryptError){\n // If decryption fails,try to use the parsed response directly\n data=parsedResponse;\n}\n}else{\n data=parsedResponse;\n}\n // Check if we have a valid response after decryption\n if (!data.response && !data.matches && !parsedResponse.response){\n throw new Error('Invalid response format from server');\n}\n let botResponseText='';\n\n // Try to get response from decrypted data first\n if (data.response){\n botResponseText=data.response;\n}\n // Then try to get from matches if available\n else if (data.matches && data.matches.length>0){\n botResponseText=\"Here's what I found:\\n\\n\";\n data.matches.forEach(match=>{\n botResponseText+=`Relevance:${match.relevance}\\n${match.text}\\n\\n`;\n});\n}\n // If not in decrypted data,check the original parsed response\n else if (parsedResponse.response){\n botResponseText=parsedResponse.response;\n}\n // Default fallback message\n else{\n botResponseText=\"I couldn't find specific information about that. Would you like to try rephrasing your question?\";\n}\n const botId=`b-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;\n const derivedSources=(data.matches || parsedResponse.matches || []).map(m=>({\n source:typeof m.text==='string' ? m.text.slice(0,120):'Reference',\n relevance:m.relevance\n}));\n const botMessage={\n id:botId,\n text:botResponseText,\n isUser:false,\n isStreaming:true,\n timestamp:new Date().toISOString(),\n matches:data.matches || parsedResponse.matches,\n content:data.content || parsedResponse.content,\n conversation_id:data.conversation_id || parsedResponse.conversation_id,\n sources:data.sources || parsedResponse.sources || (derivedSources.length ? derivedSources:undefined)\n};\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'delivered'\n}:m));\n setChatHistory(prev=>[...prev,botMessage]);\n setResponseCount(prev=>prev+1);\n}catch (error){\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'error'\n}:m));\n const errorMessage={\n id:`b-err-${Date.now()}`,\n text:error.message || \"I'm sorry,I couldn't process your request.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,errorMessage]);\n}\n}catch (error){\n setChatHistory(prev=>prev.map(m=>m.id===userMsgId ?{\n ...m,\n status:'error'\n}:m));\n // Handle aborted requests\n if (error.name==='AbortError'){\n const timeoutMessage={\n id:`b-err-${Date.now()}`,\n text:\"The request took too long to complete. Please try again.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,timeoutMessage]);\n}else{\n const errorMessage={\n id:`b-err-${Date.now()}`,\n text:error.message || \"I couldn't find relevant information. Please try rephrasing your question.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,errorMessage]);\n}\n\n // If we haven't exceeded max retries and it's a network error,retry\n if (retryCount < MAX_RETRIES && (error.message.includes('network') || error.message.includes('failed to fetch'))){\n setTimeout(()=>{\n const retryMessage={\n id:`b-sys-${Date.now()}`,\n text:\"Reconnecting... Please wait.\",\n isUser:false,\n timestamp:new Date().toISOString()\n};\n setChatHistory(prev=>[...prev,retryMessage]);\n handleSubmit(e,retryCount+1,textToSend,userMsgId);\n},2000 * (retryCount+1));// Exponential backoff\n}\n}finally{\n setIsLoading(false);\n}\n};\n const handleRetry=msg=>{\n setChatHistory(prev=>prev.map(m=>m.id===msg.id ?{\n ...m,\n status:'sending'\n}:m));\n handleSubmit({\n preventDefault(){}\n},0,msg.text,msg.id);\n};\n const quickReplyOptions=[{\n label:'Pricing',\n text:'Can you explain your pricing and plans?'\n},{\n label:'Features',\n text:'What features does the chatbot support?'\n},{\n label:'Support',\n text:'I need help from support.'\n},{\n label:'Demo',\n text:'Can I book a demo or talk to sales?'\n}];\n const handleQuickReply=qr=>{\n setShowQuickReplies(false);\n handleSubmit({\n preventDefault(){}\n},0,qr.text,null);\n};\n const openContactForm=()=>{\n setShowUserForm(true);\n setFormStep(0);\n setContactFormError('');\n setLeadCaptureOffered(true);\n};\n const closeContactForm=()=>{\n setShowUserForm(false);\n setFormStep(0);\n setContactFormError('');\n setLeadCaptureDeclined(true);\n};\n const completeContactCapture=successMessage=>{\n setShowUserForm(false);\n setFormStep(0);\n setContactFormError('');\n setLeadCaptureDeclined(true);\n if (successMessage){\n setChatHistory(prev=>[...prev,{\n id:`c-${Date.now()}`,\n text:successMessage,\n isUser:false,\n timestamp:new Date().toISOString()\n}]);\n}\n};\n const handleContactFieldSubmit=async fieldType=>{\n setContactFormError('');\n const rawValue=(userFormData[fieldType] || '').trim();\n if (!rawValue){\n setContactFormError('Please enter a value to continue.');\n return false;\n}\n let value=rawValue;\n if (fieldType==='email'){\n const emailRegex=/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value.toLowerCase())){\n setContactFormError('That email looks off. Please try again.');\n return false;\n}\n value=value.toLowerCase();\n}\n if (fieldType==='name'){\n if (value.length < 2 || /\\d/.test(value)){\n setContactFormError('Please provide a valid name without numbers.');\n return false;\n}\n}\n if (fieldType==='phone'){\n const normalizedValue=value.replace(/\\s+/g,'').replace(/[()-]/g,'');\n const phoneRegex=/^\\+?[\\d-]{10,}$/;\n if (!phoneRegex.test(normalizedValue)){\n setContactFormError('Please provide a valid phone number with at least 10 digits.');\n return false;\n}\n value=normalizedValue;\n}\n const success=await storeFormData(fieldType,value);\n if (!success){\n setContactFormError('Could not save your details right now. Please try again later.');\n return false;\n}\n setUserFormData(prev=>({\n ...prev,\n [fieldType]:value\n}));\n if (fieldType==='email'){\n setFormStep(1);\n return true;\n}\n if (fieldType==='name'){\n setFormStep(2);\n return true;\n}\n completeContactCapture('Thanks! We’ve saved your contact details so our team can follow up if needed.');\n return true;\n};\n const handleKeyPress=e=>{\n if (e.key==='Enter' && !e.shiftKey){\n e.preventDefault();\n if (input.trim()){\n handleSubmit(e);\n}\n}\n};\n const storeFormData=async (fieldType,fieldValue)=>{\n try{\n const nonce=window?.wpApiSettings?.nonce;\n if (!nonce){\n return false;\n}\n const payload={\n user_id:userId,\n name:fieldType==='name' ? fieldValue:userFormData.name,\n email:fieldType==='email' ? fieldValue:userFormData.email,\n phone:fieldType==='phone' ? fieldValue:userFormData.phone,\n session_id:getSessionID(),\n jwt_token:chatbotUserSetting?.token || null,\n license_key:chatbotUserSetting?.user?.license_key || '75282BBE2D526D0D',\n domainName:chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n};\n\n // Encrypt the payload\n const encryptedPayload=EncryptPayload(payload);\n const response=await fetch(`${API_URL}lead/leads-store`,{\n method:'POST',\n headers:{\n 'Content-Type':'application/json',\n 'X-WP-Nonce':nonce,\n 'X-Encrypted-Payload':encryptedPayload,\n 'domain_name':chatbotUserSetting?.user?.domain_name || window.location.hostname || 'example.com'\n},\n body:JSON.stringify({\n field_type:fieldType,\n field_value:fieldValue,\n encrypted_data:encryptedPayload\n})\n});\n const data=await response.json();\n if (!response.ok){\n return false;\n}\n return true;\n}catch (error){\n return false;\n}\n};\n if (!isVisible){\n return null;\n}\n return external_React_default().createElement(\"div\",{\n className:\"wpai_chatbotWrapper\"\n},!isOpen && external_React_default().createElement(ChatToggle,{\n onClick:()=>setIsOpen(true),\n bgcolor:chatbotStyles.primaryColor,\n className:\"wpai_chatToggleButton\"\n},external_React_default().createElement(ChatBubbleOutline.A,null)),isOpen && external_React_default().createElement(ChatWindow,{\n elevation:0,\n bgcolor:chatbotStyles.primaryColor,\n className:\"wpai_chatWindowOpen\"\n},external_React_default().createElement(ChatHeader,{\n textcolor:chatbotStyles.secondaryColor,\n bgcolor:chatbotStyles.primaryColor\n},external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center',\n gap:1.5\n}\n},external_React_default().createElement(Badge_Badge,{\n overlap:\"circular\",\n anchorOrigin:{\n vertical:'bottom',\n horizontal:'right'\n},\n variant:\"dot\",\n sx:{\n '& .MuiBadge-badge':{\n width:8,\n height:8,\n borderRadius:'50%',\n backgroundColor:isLoading ? '#fbbf24' :'#22c55e',\n border:'2px solid',\n borderColor:chatbotStyles.primaryColor || theme.palette.primary.main,\n '&::after':{\n position:'absolute',\n top:0,\n left:0,\n width:'100%',\n height:'100%',\n borderRadius:'50%',\n animation:'ripple 1.2s infinite ease-in-out',\n border:'1px solid currentColor',\n content:'\"\"'\n}\n}\n}\n},external_React_default().createElement(Avatar_Avatar,{\n sx:{\n bgcolor:'rgba(255,255,255,.1)',\n backdropFilter:'blur(8px)'\n}\n},getBotIcon(chatbotStyles.botIcon,chatbotStyles.customBotIcon))),external_React_default().createElement(Box_Box,null,external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle1\"\n},chatbotStyles.headerText),external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n component:\"div\"\n},isLoading ? 'Processing...' :'Online'))),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n alignItems:'center'\n}\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n onClick:()=>setIsOpen(false),\n sx:{\n color:chatbotStyles.secondaryColor || '#fff',\n '&:hover':{\n backgroundColor:'rgba(255,255,255,.1)'\n}\n}\n},external_React_default().createElement(Close.A,null)))),external_React_default().createElement(Chatbot_ChatbotMessageList,{\n containerRef:containerRef,\n bottomRef:bottomRef,\n onScroll:onScroll,\n messages:chatHistory,\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n onStreamComplete:handleStreamComplete,\n onRetry:handleRetry,\n isLoading:isLoading,\n liveAgentTyping:liveChatAccepted && liveAgentTyping,\n showNewMessages:showNewMessages,\n onJumpToLatest:scrollToBottom,\n childrenAboveEnd:external_React_default().createElement((external_React_default()).Fragment,null,!showUserForm && showQuickReplies && responseCount>0 && external_React_default().createElement(FormResponse,null,external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle2\",\n sx:{\n fontWeight:700,\n color:'#1e293b'\n}\n},\"Quick actions\"),external_React_default().createElement(Typography_Typography,{\n variant:\"body2\",\n sx:{\n color:'#475569'\n}\n},\"Tap one to ask faster or refine your request.\"),external_React_default().createElement(Stack_Stack,{\n direction:\"row\",\n flexWrap:\"wrap\",\n gap:1,\n sx:{\n mt:1\n}\n},quickReplyOptions.map(reply=>external_React_default().createElement(Chip_Chip,{\n key:reply.label,\n label:reply.label,\n clickable:true,\n onClick:()=>handleQuickReply(reply),\n variant:\"outlined\",\n sx:{\n borderRadius:'999px',\n borderColor:'#cbd5e1',\n color:'#334155',\n '&:hover':{\n bgcolor:'#e2e8f0'\n}\n}\n})))),showUserForm ? external_React_default().createElement(FormResponse,null,formStep===0 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Want a quick follow-up? Enter your email and I’ll make sure our team can reach out if needed.\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n type:\"email\",\n placeholder:\"your@email.com\",\n value:userFormData.email,\n error:!!contactFormError,\n helperText:contactFormError,\n onChange:e=>{\n setContactFormError('');\n setUserFormData({\n ...userFormData,\n email:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n handleContactFieldSubmit('email');\n}\n},\n autoFocus:true\n}),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end',\n mt:1\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:closeContactForm\n},\"Maybe later\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n onClick:()=>handleContactFieldSubmit('email'),\n sx:{\n borderRadius:'10px'\n}\n},\"Save email\"))),formStep===1 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Thanks! What name should we use when we follow up?\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n placeholder:\"Your name\",\n value:userFormData.name,\n error:!!contactFormError,\n helperText:contactFormError,\n onChange:e=>{\n setContactFormError('');\n setUserFormData({\n ...userFormData,\n name:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n handleContactFieldSubmit('name');\n}\n},\n autoFocus:true\n}),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end',\n mt:1\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:closeContactForm\n},\"Skip\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n onClick:()=>handleContactFieldSubmit('name'),\n sx:{\n borderRadius:'10px'\n}\n},\"Save name\"))),formStep===2 && external_React_default().createElement((external_React_default()).Fragment,null,external_React_default().createElement(Chatbot_ChatbotMessageBubble,{\n primaryColor:chatbotStyles.primaryColor,\n secondaryColor:chatbotStyles.secondaryColor,\n message:{\n text:\"Optional:if you'd like a callback,enter your phone number.\",\n isUser:false,\n timestamp:new Date().toISOString()\n}\n}),external_React_default().createElement(FormField,{\n fullWidth:true,\n placeholder:\"Your phone number\",\n value:userFormData.phone,\n error:!!contactFormError,\n helperText:contactFormError,\n onChange:e=>{\n setContactFormError('');\n setUserFormData({\n ...userFormData,\n phone:e.target.value\n});\n},\n onKeyDown:e=>{\n if (e.key==='Enter'){\n e.preventDefault();\n e.stopPropagation();\n handleContactFieldSubmit('phone');\n}\n},\n autoFocus:true\n}),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end',\n mt:1\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:closeContactForm\n},\"Skip\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n onClick:()=>handleContactFieldSubmit('phone'),\n sx:{\n borderRadius:'10px'\n}\n},\"Save phone\")))):null)\n}),external_React_default().createElement(ChatInput,null,(()=>{\n if (liveChatRequested){\n return external_React_default().createElement(Box_Box,{\n sx:{\n mb:1.5,\n px:0.5\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"caption\",\n sx:{\n color:liveChatAccepted ? '#10b981':'#64748b',\n display:'flex',\n alignItems:'center',\n gap:0.5\n}\n},external_React_default().createElement(RecordVoiceOver.A,{\n sx:{\n fontSize:14\n}\n}),liveChatConnecting ? 'Connecting…':liveChatAccepted ? 'Agent joined. You can chat now.':'Waiting for an agent to join…'));\n}\n if (showLiveChatEmailForm){\n return external_React_default().createElement(Box_Box,{\n component:\"form\",\n onSubmit:handleStartLiveChat,\n sx:{\n mb:1.5,\n p:1.5,\n borderRadius:2,\n bgcolor:'#f8fafc',\n border:'1px solid #e2e8f0'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle2\",\n sx:{\n mb:1,\n color:'#475569',\n fontWeight:600\n}\n},\"Enter your email to start live chat\"),external_React_default().createElement(TextField_TextField,{\n fullWidth:true,\n size:\"small\",\n type:\"email\",\n placeholder:\"your@email.com\",\n value:liveChatEmail,\n onChange:e=>{\n setLiveChatEmail(e.target.value);\n if (liveChatEmailError) setLiveChatEmailError('');\n},\n error:!!liveChatEmailError,\n helperText:liveChatEmailError,\n InputProps:{\n startAdornment:external_React_default().createElement(InputAdornment_InputAdornment,{\n position:\"start\"\n},external_React_default().createElement(Email.A,{\n sx:{\n color:'#64748b',\n fontSize:20\n}\n}))\n},\n sx:{\n mb:1,\n '& .MuiOutlinedInput-root':{\n borderRadius:'10px',\n bgcolor:'#fff'\n}\n}\n}),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end'\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:()=>{\n setShowLiveChatEmailForm(false);\n setLiveChatEmail('');\n setLiveChatEmailError('');\n}\n},\"Cancel\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n type:\"submit\",\n startIcon:external_React_default().createElement(RecordVoiceOver.A,null),\n sx:{\n borderRadius:'10px'\n}\n},\"Start live chat\")));\n}\n return external_React_default().createElement(Box_Box,{\n sx:{\n mb:1.5,\n px:0.5\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"outlined\",\n startIcon:external_React_default().createElement(RecordVoiceOver.A,null),\n onClick:handleStartLiveChatClick,\n sx:{\n borderRadius:'10px',\n textTransform:'none',\n borderColor:'#cbd5e1',\n color:'#475569',\n '&:hover':{\n borderColor:'#3b82f6',\n color:'#3b82f6',\n bgcolor:'rgba(59,130,246,.04)'\n}\n}\n},\"Talk live with admin\"));\n})(),!showUserForm && leadCaptureOffered && !leadCaptureDeclined && !userFormData.email && external_React_default().createElement(Box_Box,{\n sx:{\n mb:1.5,\n p:1.5,\n borderRadius:2,\n bgcolor:'#f8fafc',\n border:'1px solid #e2e8f0'\n}\n},external_React_default().createElement(Typography_Typography,{\n variant:\"subtitle2\",\n sx:{\n mb:1,\n color:'#475569',\n fontWeight:600\n}\n},\"Want a follow-up?\"),external_React_default().createElement(Typography_Typography,{\n variant:\"body2\",\n sx:{\n mb:1,\n color:'#64748b'\n}\n},\"Enter your email and I\\u2019ll make sure our team can follow up if needed.\"),external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n justifyContent:'flex-end'\n}\n},external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"text\",\n onClick:closeContactForm\n},\"Not now\"),external_React_default().createElement(Button_Button,{\n size:\"small\",\n variant:\"contained\",\n onClick:openContactForm,\n sx:{\n borderRadius:'10px'\n}\n},\"Share contact\"))),external_React_default().createElement(Box_Box,{\n component:\"form\",\n onSubmit:handleSubmit,\n sx:{\n display:'flex',\n alignItems:'center',\n width:'100%'\n}\n},external_React_default().createElement(InputField,{\n className:\"wpai_chatInputField\",\n fullWidth:true,\n variant:\"outlined\",\n placeholder:chatbotStyles.placeholderText,\n value:input,\n onChange:handleChatInputChange,\n onBlur:flushCustomerTypingStopped,\n onKeyPress:handleKeyPress,\n autoComplete:\"off\",\n autoCorrect:\"off\",\n autoCapitalize:\"off\",\n spellCheck:\"false\",\n inputProps:{\n 'aria-label':'Type your message to the assistant',\n autoComplete:'off',\n form:{\n autoComplete:'off'\n}\n},\n InputProps:{\n endAdornment:external_React_default().createElement(Box_Box,{\n sx:{\n display:'flex',\n gap:1,\n alignItems:'center',\n height:'100%'\n}\n},external_React_default().createElement(Tooltip_Tooltip,{\n title:\"File Attachment - Coming Soon!\",\n placement:\"top\",\n arrow:true\n},external_React_default().createElement(\"span\",{\n style:{\n display:'flex',\n alignItems:'center'\n}\n},external_React_default().createElement(IconButton_IconButton,{\n size:\"small\",\n disabled:true,\n sx:{\n color:'rgba(107,114,128,.5)',\n '&.Mui-disabled':{\n color:'rgba(107,114,128,.5)'\n},\n padding:'8px'\n}\n},external_React_default().createElement(AttachFile.A,{\n sx:{\n fontSize:'20px'\n}\n})))),external_React_default().createElement(IconButton_IconButton,{\n color:\"primary\",\n type:\"submit\",\n disabled:isLoading || !input.trim(),\n \"aria-label\":\"Send message\",\n sx:{\n color:chatbotStyles.primaryColor,\n padding:'8px',\n transition:'transform 0.2s ease,box-shadow 0.2s ease',\n '&:not(:disabled):hover':{\n transform:'scale(1.08)'\n},\n '&:not(:disabled):active':{\n transform:'scale(.96)'\n}\n}\n},external_React_default().createElement(Send.A,{\n sx:{\n fontSize:'20px'\n}\n})))\n},\n primaryColor:chatbotStyles.primaryColor\n})))));\n};\n const Chatbot_Chatbot=(Chatbot);\n;// ./src/redux/Slices/UserSlice.js\n\n\n\n\nfunction normalizeUserInfoData(raw){\n if (raw==null || raw===\"\") return{};\n if (typeof raw===\"object\" && !Array.isArray(raw)) return raw;\n if (typeof raw===\"string\"){\n try{\n const parsed=JSON.parse(raw);;\n}catch{\n return{};\n}\n};\n}\nconst initialState={\n userData:{},\n isLoggedIn:false,\n GetUserLoader:false,\n error:null,\n isVerify:false,\n auth_token:null,\n hasInitLoad:false\n};\n\n// Async thunk for fetching user data\nconst fetchUserData=createAsyncThunk(\"user/fetchUserData\",async (encode,{\n rejectWithValue\n})=>{\n if (encode?.key===undefined || encode?.payload===undefined){\n return false;\n}\n try{\n // Example of how you might fetch user data from your API\n // Replace with your actual API endpoint\n const response=await fetch(API_URL+\"user/user-info\",{\n method:\"POST\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":getWpRestNonce(),\n \"X-Encrypted-Payload\":encode?.key\n},\n body:JSON.stringify({\n encrypted_payload:encode?.payload\n})\n});\n \n\n const data=await response.json();\n if (response.status===200){\n return data;\n}else{\n return rejectWithValue(data);\n}\n}catch (error){\n return rejectWithValue(error);\n}\n});\n\n// Initial state\n\n// User slice\nconst userSlice=createSlice({\n name:\"user\",\n initialState,\n reducers:{\n setUserData:(state,action)=>{\n state.userData=action.payload;\n},\n \n mergeUserFields:(state,action)=>{\n const patch=action.payload ||{};\n state.userData=state.userData && typeof state.userData===\"object\" ?{\n ...state.userData,\n ...patch\n}:{\n ...patch\n};\n},\n setIsLoggedIn:(state,action)=>{\n state.isLoggedIn=action.payload;\n},\n LoginUser:(state,action)=>{\n state.isLoggedIn=true;\n state.userData=action.payload?.user;\n state.auth_token=action.payload?.token;\n state.isVerify=action.payload?.verified;\n},\n logoutUser:state=>{\n state.isLoggedIn=false;\n state.userData=false || initialState.userData;\n state.auth_token=null;\n},\n setAuthToken:(state,action)=>{\n state.auth_token=action.payload.token;\n},\n setInitLoad:(state,action)=>{\n state.hasInitLoad=true;\n}\n},\n extraReducers:builder=>{\n builder.addCase(fetchUserData.pending,state=>{\n state.GetUserLoader=true;\n state.isLoggedIn=false;\n state.error=null;\n}).addCase(fetchUserData.fulfilled,(state,action)=>{\n state.isLoggedIn=true;\n state.userData=normalizeUserInfoData(action.payload?.data);\n state.isVerify=Boolean(state.userData?.verified);\n state.messages=action.payload?.message;\n state.GetUserLoader=false;\n}).addCase(fetchUserData.rejected,(state,action)=>{\n state.error=action.payload;\n state.GetUserLoader=false;\n});\n}\n});\n\n// Export actions and reducer\nconst{\n setUserData,\n mergeUserFields,\n setIsLoggedIn,\n LoginUser,\n setAuthToken,\n logoutUser,\n setInitLoad\n}=userSlice.actions;\n const UserSlice=(userSlice.reducer);\n;// ./src/redux/Slices/SubscriptionSlice.js\n\n\n\nfunction deriveSubscriptionFromUser(raw){\n const user=normalizeUserInfoData(raw);\n const ms=user.membership_status;\n const subscribed=user.is_subscribed===true || user.is_subscribed===1 || user.subscription_active===true || ms===true || ms===1 || Number(ms)===1 || String(ms || \"\").toLowerCase()===\"active\";\n return{\n isSubscribed:Boolean(subscribed),\n message:user.subscription_message || user.membership_message || \"\",\n SubscribeUser:user.subscription_details && typeof user.subscription_details===\"object\" ? user.subscription_details :subscribed ?{\n membership_status:user.membership_status || \"Active\",\n plan_name:user.plan_name || user.current_plan || user.subscription_tier\n}\n};\n}\nconst checkSubscription=createAsyncThunk(\"subscription/checkSubscription\",async (token,{\n rejectWithValue,\n getState\n})=>{\n try{\n // const token=localStorage.getItem('auth_token');\n const state=getState();\n const userState=state.user;\n const Varification=userState?.isVerify;\n if (!Varification){\n return;\n}\n const encryptedPayload=EncryptPayload({\n token:token\n});\n const response=await fetch(`${API_URL}user-subscription-check`,{\n method:\"POST\",\n headers:{\n \"Content-Type\":\"application/json\",\n \"X-WP-Nonce\":getWpRestNonce()\n},\n body:JSON.stringify({\n encrypted_payload:encryptedPayload\n})\n});\n if (!response.ok){\n throw new Error(\"Network response was not ok\");\n}\n const encryptedResponse=await response.json();\n\n // const response_data=await response.json();\n\n // if (!response_data.success){\n // return rejectWithValue(response_data.data?.message || 'Subscription check failed');\n //}\n\n // return DecryptPayload(response_data);\n //}\n\n if (!encryptedResponse.success){\n return rejectWithValue(encryptedResponse.message || \"Subscription check failed\");\n}\n\n // Check if data field exists and is encrypted\n if (encryptedResponse.data && typeof encryptedResponse.data===\"string\"){\n try{\n // Decrypt the data field\n const decryptedUserData=DecryptPayload(encryptedResponse.data);\n\n // Create a new response object with the decrypted data\n const fullResponse={\n success:encryptedResponse.success,\n message:encryptedResponse.message\n // data:{\n // user_data:decryptedUserData\n //}\n};\n return fullResponse;\n}catch (error){\n // If decryption fails,return the original response\n return encryptedResponse;\n}\n}else{\n // If data is not encrypted or doesn't exist,return the original response\n return encryptedResponse;\n}\n}catch (error){\n return rejectWithValue(error.message || \"Failed to check subscription\");\n}\n});\nconst subscriptionSlice=createSlice({\n name:\"subscription\",\n initialState:{\n isSubscribed:false,\n isLoading:false,\n error:null,\n SubscribeUser:{},\n message:\"\"\n},\n reducers:{\n clearError:state=>{\n state.error=null;\n},\n resetLoading:state=>{\n state.isLoading=false;\n},\n resetSubscribe:state=>{\n state.isSubscribed=false;;\n state.message=\"\";\n}\n},\n extraReducers:builder=>{\n builder.addCase(fetchUserData.fulfilled,(state,action)=>{\n const next=deriveSubscriptionFromUser(action.payload?.data);\n state.isSubscribed=next.isSubscribed;\n state.message=next.message;\n state.SubscribeUser=next.SubscribeUser;\n state.isLoading=false;\n state.error=null;\n}).addCase(LoginUser,(state,action)=>{\n const next=deriveSubscriptionFromUser(action.payload?.user);\n state.isSubscribed=next.isSubscribed;\n state.message=next.message;\n state.SubscribeUser=next.SubscribeUser;\n state.error=null;\n}).addCase(checkSubscription.pending,state=>{\n state.isLoading=true;\n state.error=null;\n})\n // .addCase(checkSubscription.fulfilled,(state,action)=>{\n // if (action.payload?.success===true){\n // state.message=action.payload?.data?.message;\n // const{stripe_payment_url,stripe_customer_id,is_subscribed,...filteredData}=action.payload?.data?.user_data;\n // state.isSubscribed=Number(is_subscribed)===1;\n // state.SubscribeUser=filteredData;\n //}else{\n // state.error='Invalid response format';\n //}\n // state.isLoading=false;\n //})\n .addCase(checkSubscription.fulfilled,(state,action)=>{\n if (action.payload?.success===true){\n state.message=action.payload.message;\n if (action.payload.message.toLowerCase().includes(\"member\")){\n state.isSubscribed=true;\n state.SubscribeUser=action.payload.data?.user_data ||{\n membership_status:\"Active\",\n message:action.payload.message\n};\n}else{\n state.isSubscribed=false;;\n}\n}else{\n state.error=\"Invalid response format\";\n state.isSubscribed=false;\n}\n state.isLoading=false;\n}).addCase(checkSubscription.rejected,(state,action)=>{\n state.error=action.payload || \"Failed to check subscription\";\n state.isLoading=false;\n state.isSubscribed=false;\n});\n}\n});\nconst{\n clearError,\n resetLoading,\n resetSubscribe\n}=subscriptionSlice.actions;\n const SubscriptionSlice=(subscriptionSlice.reducer);\n;// ./src/redux/Slices/WebBotSlice.js\n\nconst WebBotSlice_initialState={\n is_chat_open:false,\n screenPage:\"homeTab\",\n chatScreen:{\n header:false,\n name:null\n},\n messages:[],\n chatBotSetting:null,\n chatBotAdmin:{\n user:null,\n Token:null\n},\n is_Query_Submit:false,\n load_chat_history:false,\n isRecording:false\n};\nconst WebBot=createSlice({\n name:\"chatbot-web\",\n initialState:WebBotSlice_initialState,\n reducers:{\n setChatOpen:state=>{\n state.is_chat_open=!state.is_chat_open;\n},\n setScreenPage:(state,action)=>{\n state.screenPage=action.payload?.currentScreen;\n},\n setChatScreen:(state,action)=>{\n state.chatScreen.header=true;\n state.chatScreen.name=action.payload?.name;\n},\n deleteChatScreen:state=>{\n state.chatScreen.header=false;\n state.chatScreen.name=null;\n},\n setMessages:(state,action)=>{\n state.messages.push(...action.payload);\n},\n setChatbotSetting:(state,action)=>{\n state.chatBotSetting=action.payload?.data;\n},\n setChatbotAdmin:(state,action)=>{\n state.chatBotAdmin.user=action.payload?.user;\n state.chatBotAdmin.Token=action.payload?.Token;\n},\n setSubmit:(state,action)=>{\n state.is_Query_Submit=action.payload;\n},\n loadHistoy:(state,action)=>{\n state.load_chat_history=action.payload;\n},\n setRecording:(state,action)=>{\n state.isRecording=action.payload;\n}\n}\n});\nconst{\n setChatOpen,\n setScreenPage,\n setChatScreen,\n deleteChatScreen,\n setMessages,\n setChatbotSetting,\n setChatbotAdmin,\n setSubmit,\n loadHistoy,\n setRecording\n}=WebBot.actions;\n const WebBotSlice=(WebBot.reducer);\n;// ./src/redux/Store/store.js\n\n\n\n\n\nconst store=configureStore({\n reducer:{\n subscription:SubscriptionSlice,\n chatbot:Slices_ChatbotSlice,\n user:UserSlice,\n webBot:WebBotSlice\n}\n});\n const Store_store=(store);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag=__webpack_require__(5072);\nvar injectStylesIntoStyleTag_default=__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI=__webpack_require__(7825);\nvar styleDomAPI_default=__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector=__webpack_require__(7659);\nvar insertBySelector_default=__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes=__webpack_require__(5056);\nvar setAttributesWithoutAttributes_default=__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement=__webpack_require__(540);\nvar insertStyleElement_default=__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE:./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform=__webpack_require__(1113);\nvar styleTagTransform_default=__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE:./node_modules/css-loader/dist/cjs.js!./src/assets/css/global.css\nvar global=__webpack_require__(3256);\n;;\n\noptions.styleTagTransform=(styleTagTransform_default());\noptions.setAttributes=(setAttributesWithoutAttributes_default());\n\n options.insert=insertBySelector_default().bind(null,\"head\");\n \noptions.domAPI=(styleDomAPI_default());\noptions.insertStyleElement=(insertStyleElement_default());\n\nvar update=injectStylesIntoStyleTag_default()(global.A,options);\n\n\n\n\n const css_global=(global.A && global.A.locals ? global.A.locals :undefined);\n\n;// ./src/entries/chatbot.jsx\n\n\n\n// import Chatbot from '@/features/chatbot/ChatbotEntryPoint';\n\n\n\n// Console logging for debugging\n\n// Function to check if chatbot should be rendered (value from DB via wp_localize_script)\nconst shouldRenderChatbot=()=>{\n const w=typeof window !==\"undefined\" ? window.wpaiPluginSettings:null;\n const storedValue=w && w.chatbotVisible !=null ? String(w.chatbotVisible):\"false\";\n const s=storedValue.toLowerCase();\n return s===\"true\" || s===\"1\";\n};\n\n// Function to safely render with error handling\nconst renderChatbot=container=>{\n try{\n // Check if we should render the chatbot\n if (!shouldRenderChatbot()){\n return;\n}\n if (!container){\n return;\n}\n (0,external_wp_element_namespaceObject.render)(React.createElement(components_Provider,{\n store:Store_store\n},React.createElement(Chatbot_Chatbot,null)),container);\n}\n};\n\n// Handler for mode changes\nconst handleAgentModeChange=event=>{\n if (event.detail.mode===\"chatbot\" || !event.detail.mode){\n // Find and render in existing containers\n const chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\n if (chatbotRoot){\n renderChatbot(chatbotRoot);\n}\n const containers=document.querySelectorAll(\".wp-ai-chatbot-container\");\n containers.forEach(container=>renderChatbot(container));\n}else{\n // Code to remove chatbot if needed\n const chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\n if (chatbotRoot){\n (0,external_wp_element_namespaceObject.render)(null,chatbotRoot);\n}\n}\n};\n\n// Listen for agent mode changes\ndocument.addEventListener(\"wpai_agent_mode_changed\",handleAgentModeChange);\n\n// Render to the main container\nconst chatbotRoot=document.getElementById(\"wpai_ai-chatbot-root\");\nif (chatbotRoot){\n renderChatbot(chatbotRoot);\n}\n\n// Find all chatbot containers on the page\ndocument.addEventListener(\"DOMContentLoaded\",()=>{\n const chatbotContainers=document.querySelectorAll(\".wp-ai-chatbot-container\");\n if (chatbotContainers.length>0 && shouldRenderChatbot()){\n chatbotContainers.forEach((container,index)=>{\n renderChatbot(container);\n});\n}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQU87QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFvRTtBQUMxRSxJQUFJO0FBQUEsRUFBTztBQUNYLE1BQU0sYUFBTztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxhQUFPO0FBQ2Y7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJ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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE1BQU0sSUFBSTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FB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QUFDQSxNQUFNLEtBQXVELEVBQUU7QUFBQSxFQUU1RDtBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQzhDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsMkJBQU07QUFDUjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsMkJBQU07QUFDUjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDJCQUFNLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsS0FBcUMsR0FBRywyQ0FBc0IsT0FBTyxDQUEyRDtBQUN4SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUM0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFD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QUMsSUFBSWtzQixtQkFBbUIsQ0FBQyxDQUFDLEVBQUU7SUFDekRVLGlCQUFpQixDQUFDakosT0FBTyxDQUFDLENBQUMySSxTQUFTLEVBQUV2WixLQUFLLEtBQUs7TUFDOUNzWixhQUFhLENBQUNDLFNBQVMsQ0FBQztJQUMxQixDQUFDLENBQUM7RUFDSixDQUFDLE1BQU0sQ0FDUDtBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luL2V4dGVybmFsIHZhciBcIndwLmVsZW1lbnRcIj8xYzMyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luL2V4dGVybmFsIHZhciBcIlJlYWN0RE9NXCI/ODUzYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzP2Y1ZjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanM/NGRmMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL0NvbnRleHQuanM/OGU4NyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanM/OTgyNSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZS5qcz9iNDgwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzPzMzOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvU3Vic2NyaXB0aW9uLmpzPzc5ZDYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdC5qcz81N2U2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcz9jOGRhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanM/MTFmOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VTdG9yZS5qcz9jYjg3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZURpc3BhdGNoLmpzP2VlMjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvZXhwb3J0cy5qcz80YTcxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2luZGV4LmpzP2ZjYzIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhLmpzPzUzMDYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9wYXBlckNsYXNzZXMuanM/OWVkYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzPzFiOGQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lV2l0aG91dERlZmF1bHQuanM/OGYyNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanM/NmE4MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlQm94LmpzPzI3YTQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Cb3gvYm94Q2xhc3Nlcy5qcz84NmRmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm94L0JveC5qcz8zNTkwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzSG9zdENvbXBvbmVudC9pc0hvc3RDb21wb25lbnQuanM/ODE0ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRhcmVhQXV0b3NpemUvVGV4dGFyZWFBdXRvc2l6ZS5qcz8yMDI2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcz9kNGUwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2xDb250ZXh0LmpzPzhiYzEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcz9lYzQzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzPzM4N2UiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzPzlmYTgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanM/MDBlOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QmFzZS9pbnB1dEJhc2VDbGFzc2VzLmpzPzFiOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvSW5wdXRCYXNlLmpzPzkyNjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanM/NjZhYyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0L0lucHV0LmpzPzU5ZDEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9maWxsZWRJbnB1dENsYXNzZXMuanM/NWQ4OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzPzdjOWUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L05vdGNoZWRPdXRsaW5lLmpzPzYyZDEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzP2NiZDQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L091dGxpbmVkSW5wdXQuanM/MDMzNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9mb3JtTGFiZWxDbGFzc2VzLmpzP2UxMGIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtTGFiZWwvRm9ybUxhYmVsLmpzPzU0NGEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzPzc4YTIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL0lucHV0TGFiZWwuanM/OTEwMSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcz81ZDFkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvRm9ybUNvbnRyb2wuanM/MTYwZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5qcz81NmZkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanM/YjFiOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZXRSZWFjdEVsZW1lbnRSZWYvZ2V0UmVhY3RFbGVtZW50UmVmLmpzPzcwZmQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1J0bFByb3ZpZGVyL2luZGV4LmpzPzRhZGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vYXBwZW5kT3duZXJTdGF0ZS9hcHBlbmRPd25lclN0YXRlLmpzP2ZjNGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZXh0cmFjdEV2ZW50SGFuZGxlcnMvZXh0cmFjdEV2ZW50SGFuZGxlcnMuanM/M2FiMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9vbWl0RXZlbnRIYW5kbGVycy9vbWl0RXZlbnRIYW5kbGVycy5qcz8wYjE1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL21lcmdlU2xvdFByb3BzL21lcmdlU2xvdFByb3BzLmpzPzUzOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vcmVzb2x2ZUNvbXBvbmVudFByb3BzL3Jlc29sdmVDb21wb25lbnRQcm9wcy5qcz83NWRmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZVNsb3RQcm9wcy91c2VTbG90UHJvcHMuanM/ZDE4NyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdENvbnRleHQuanM/NzMwOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvbGlzdENsYXNzZXMuanM/YjBhZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdC5qcz8xZmQ5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dldFNjcm9sbGJhclNpemUvZ2V0U2Nyb2xsYmFyU2l6ZS5qcz8zYTZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZS5qcz8wMmQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudUxpc3QvTWVudUxpc3QuanM/Y2NhZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz83OTZlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanM/YTg0MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanM/MmE0MiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzP2QwZjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzP2I1N2YiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcz83NTFiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lLmpzPzUyNzQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC90cmFuc2l0aW9ucy91dGlscy5qcz8wMjIxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3Jvdy9Hcm93LmpzPzUxNTAiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9VbnN0YWJsZV9UcmFwRm9jdXMvRm9jdXNUcmFwLmpzP2E5MjAiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3J0YWwvUG9ydGFsLmpzPzA5Y2UiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GYWRlL0ZhZGUuanM/ODQ2OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhY2tkcm9wL2JhY2tkcm9wQ2xhc3Nlcy5qcz9mY2IyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQmFja2Ryb3AvQmFja2Ryb3AuanM/NGE0ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsTWFuYWdlci5qcz83YzQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvdXNlTW9kYWwuanM/ODFmYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL21vZGFsQ2xhc3Nlcy5qcz82YzQxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWwuanM/MGEzOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanM/MzczYyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvUG9wb3Zlci5qcz8xNTkwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcz85M2Y1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9NZW51LmpzP2UxZTkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcz8xN2Y5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0LmpzP2YzNjIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3Qvc2VsZWN0Q2xhc3Nlcy5qcz9iNGQ3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdElucHV0LmpzPzBhMzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQXJyb3dEcm9wRG93bi5qcz9iMjZjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdC5qcz9hZDNkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanM/OWRkMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1RleHRGaWVsZC9UZXh0RmllbGQuanM/MzA2MiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanM/OTM4YiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanM/MjBjOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanM/NTVlMCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzPzI1YWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcz8wNzNkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9Ub3VjaFJpcHBsZS5qcz8yZTI3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcz83ZjJlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzPzljYjkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uL2ljb25CdXR0b25DbGFzc2VzLmpzP2U2MjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uL0ljb25CdXR0b24uanM/Mzg2MCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VQcmV2aW91c1Byb3BzL3VzZVByZXZpb3VzUHJvcHMuanM/NTQ2NiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhZGdlL3VzZUJhZGdlLmpzPzRmMDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CYWRnZS9iYWRnZUNsYXNzZXMuanM/OTM3ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JhZGdlL0JhZGdlLmpzPzI4NWEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUGVyc29uLmpzPzdjNzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9BdmF0YXIvYXZhdGFyQ2xhc3Nlcy5qcz9mZmQ1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlU2xvdC5qcz8wMWNiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQXZhdGFyL0F2YXRhci5qcz8zZDBjIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcz9jY2Q3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzPzFhYTgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVN0eWxlZC5qcz9jNmViIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZWQuanM/NjllOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWVQcm9wcy9nZXRUaGVtZVByb3BzLmpzPzNkZjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcz9iMWRhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9TdGFjay9jcmVhdGVTdGFjay5qcz8yOWMwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanM/OWU2ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9DYW5jZWwuanM/ZDNkMyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoaXAvY2hpcENsYXNzZXMuanM/YzI2NiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NoaXAvQ2hpcC5qcz9jYTExIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL2J1dHRvbkNsYXNzZXMuanM/ZDAwMyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcz82ZGE5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0LmpzP2ViM2UiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b24vQnV0dG9uLmpzP2U0OGYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEFkb3JubWVudC9pbnB1dEFkb3JubWVudENsYXNzZXMuanM/NGJkOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QWRvcm5tZW50L0lucHV0QWRvcm5tZW50LmpzPzExZmMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanM/MWZjMCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanM/Mjc2NyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcz84NGM2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91c2VyQWdlbnQuanM/MTJkOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanM/NzRhZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcz8wZjg4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzP2EzMjEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcz81ZmU2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcz8xOTlhIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanM/NTc4OCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcz9lZjUyIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcz82MTI1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcz9iNTE5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanM/YWU2YyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanM/ZDExNiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanM/ZTJlOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanM/MjhiZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcz85ZDBlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanM/ZWExYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzP2I0NTEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanM/YjYyYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanM/NzdmOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanM/YjllNiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanM/YjFlMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanM/MmEzNSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzPzZjZWUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcz9hZDZlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzP2I1MGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcz8zZDhkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanM/YWQ5ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZU9mZnNldHMuanM/NWQ3ZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanM/MTM0YSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanM/N2NkYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzPzBhYjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanM/OTgzNSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanM/NTIzMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanM/NTAwYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcz83YzczIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzPzNlNzkiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcz83ZjM3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzPzdiY2YiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanM/OWRlMCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzPzM1ZjYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcz9kMzliIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanM/OTg1MiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanM/YjYxNyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanM/NDNjZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanM/ZWNiMiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcz9mMmUwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanM/ZTQzZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcz85NDM1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanM/MDkyOSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanM/MWQ2YyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzPzM5YzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Qb3BwZXIvcG9wcGVyQ2xhc3Nlcy5qcz9jYzU3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wcGVyL0Jhc2VQb3BwZXIuanM/NjMzYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcHBlci9Qb3BwZXIuanM/YjQwMyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2x0aXAvdG9vbHRpcENsYXNzZXMuanM/OTg5ZSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2x0aXAvVG9vbHRpcC5qcz9iYzdmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvbm9kZV9tb2R1bGVzL3JlZHV4L2Rpc3QvcmVkdXgubWpzPzg5YjciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9ub2RlX21vZHVsZXMvcmVkdXgtdGh1bmsvZGlzdC9yZWR1eC10aHVuay5tanM/MGYwNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9pbW1lci9kaXN0L2ltbWVyLm1qcz9kN2Y3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvZGlzdC9yZWR1eC10b29sa2l0Lm1vZGVybi5tanM/NWUyOCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC10b2FzdGlmeS9kaXN0L2luZGV4Lm1qcz8zNTQ2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL2NvbmZpZy5qcz9kYjQ5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3JlZHV4L1NsaWNlcy9DaGF0Ym90U2xpY2UuanM/Mzc0ZiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy91dGlscy91c2VyQ2xpZW50U3RvcmFnZS5qcz9hNjhmIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3V0aWxzL0F1dGhUb2tlbi5qcz9lMjI3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3V0aWxzL2luZGV4LmpzP2VkMDgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvY29tcG9uZW50cy9DaGF0Ym90L2NoYXRib3RNYXJrZG93bi5qc3g/NGVkZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvQ2hhdGJvdE1lc3NhZ2VCdWJibGUuanN4Pzk1NzEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvY29tcG9uZW50cy9DaGF0Ym90L0NoYXRib3RUeXBpbmdJbmRpY2F0b3IuanN4PzYyYmYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvY29tcG9uZW50cy9DaGF0Ym90L0NoYXRib3RNZXNzYWdlTGlzdC5qc3g/YjdiYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL3NyYy9jb21wb25lbnRzL0NoYXRib3QvdXNlU21hcnRDaGF0U2Nyb2xsLmpzPzkyNGMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvY29tcG9uZW50cy9DaGF0Ym90L0NoYXRib3QuanN4PzQ2M2QiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvcmVkdXgvU2xpY2VzL1VzZXJTbGljZS5qcz80MGU4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3JlZHV4L1NsaWNlcy9TdWJzY3JpcHRpb25TbGljZS5qcz8yMGI3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3JlZHV4L1NsaWNlcy9XZWJCb3RTbGljZS5qcz80OTZlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vc3JjL3JlZHV4L1N0b3JlL3N0b3JlLmpzPzE4ZjQiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvYXNzZXRzL2Nzcy9nbG9iYWwuY3NzPzI1ZGYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvZW50cmllcy9jaGF0Ym90LmpzeD9mODk1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSB3cC5lbGVtZW50OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBSZWFjdERPTTsiLCJleHBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7IiwiLy8gRGVmYXVsdCB0byBhIGR1bW15IFwiYmF0Y2hcIiBpbXBsZW1lbnRhdGlvbiB0aGF0IGp1c3QgcnVucyB0aGUgY2FsbGJhY2tcbmZ1bmN0aW9uIGRlZmF1bHROb29wQmF0Y2goY2FsbGJhY2spIHtcbiAgY2FsbGJhY2soKTtcbn1cblxubGV0IGJhdGNoID0gZGVmYXVsdE5vb3BCYXRjaDsgLy8gQWxsb3cgaW5qZWN0aW5nIGFub3RoZXIgYmF0Y2hpbmcgZnVuY3Rpb24gbGF0ZXJcblxuZXhwb3J0IGNvbnN0IHNldEJhdGNoID0gbmV3QmF0Y2ggPT4gYmF0Y2ggPSBuZXdCYXRjaDsgLy8gU3VwcGx5IGEgZ2V0dGVyIGp1c3QgdG8gc2tpcCBkZWFsaW5nIHdpdGggRVNNIGJpbmRpbmdzXG5cbmV4cG9ydCBjb25zdCBnZXRCYXRjaCA9ICgpID0+IGJhdGNoOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IENvbnRleHRLZXkgPSBTeW1ib2wuZm9yKGByZWFjdC1yZWR1eC1jb250ZXh0YCk7XG5jb25zdCBnVCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6XG4vKiBmYWxsIGJhY2sgdG8gYSBwZXItbW9kdWxlIHNjb3BlIChwcmUtOC4xIGJlaGF2aW91cikgaWYgYGdsb2JhbFRoaXNgIGlzIG5vdCBhdmFpbGFibGUgKi9cbnt9O1xuXG5mdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICB2YXIgX2dUJENvbnRleHRLZXk7XG5cbiAgaWYgKCFSZWFjdC5jcmVhdGVDb250ZXh0KSByZXR1cm4ge307XG4gIGNvbnN0IGNvbnRleHRNYXAgPSAoX2dUJENvbnRleHRLZXkgPSBnVFtDb250ZXh0S2V5XSkgIT0gbnVsbCA/IF9nVCRDb250ZXh0S2V5IDogZ1RbQ29udGV4dEtleV0gPSBuZXcgTWFwKCk7XG4gIGxldCByZWFsQ29udGV4dCA9IGNvbnRleHRNYXAuZ2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQpO1xuXG4gIGlmICghcmVhbENvbnRleHQpIHtcbiAgICByZWFsQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmVhbENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmVhY3RSZWR1eCc7XG4gICAgfVxuXG4gICAgY29udGV4dE1hcC5zZXQoUmVhY3QuY3JlYXRlQ29udGV4dCwgcmVhbENvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlYWxDb250ZXh0O1xufVxuXG5leHBvcnQgY29uc3QgUmVhY3RSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovZ2V0Q29udGV4dCgpO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3RSZWR1eENvbnRleHQ7IiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVkdXhDb250ZXh0SG9vaygpOyIsImV4cG9ydCBjb25zdCBub3RJbml0aWFsaXplZCA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCd1U0VTIG5vdCBpbml0aWFsaXplZCEnKTtcbn07IiwiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2ssIHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuT3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHksXG4gICAgICBzdGFiaWxpdHlDaGVjayA9IHVuZGVmaW5lZCxcbiAgICAgIG5vb3BDaGVjayA9IHVuZGVmaW5lZFxuICAgIH0gPSB0eXBlb2YgZXF1YWxpdHlGbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgIGVxdWFsaXR5Rm46IGVxdWFsaXR5Rm5Pck9wdGlvbnNcbiAgICB9IDogZXF1YWxpdHlGbk9yT3B0aW9ucztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVxdWFsaXR5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gZXF1YWxpdHkgZnVuY3Rpb24gdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlLFxuICAgICAgc3RhYmlsaXR5Q2hlY2s6IGdsb2JhbFN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrOiBnbG9iYWxOb29wQ2hlY2tcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3QgZmlyc3RSdW4gPSB1c2VSZWYodHJ1ZSk7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gdXNlQ2FsbGJhY2soe1xuICAgICAgW3NlbGVjdG9yLm5hbWVdKHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxTdGFiaWxpdHlDaGVjayA9IHR5cGVvZiBzdGFiaWxpdHlDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxTdGFiaWxpdHlDaGVjayA6IHN0YWJpbGl0eUNoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b0NvbXBhcmUgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxpdHlGbihzZWxlY3RlZCwgdG9Db21wYXJlKSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHN1Y2ggYXMgYW4gb2JqZWN0IG9yIGFuIGFycmF5KSBzaG91bGQgYmUgbWVtb2l6ZWQ6IGh0dHBzOi8vcmVkdXguanMub3JnL3VzYWdlL2Rlcml2aW5nLWRhdGEtc2VsZWN0b3JzI29wdGltaXppbmctc2VsZWN0b3JzLXdpdGgtbWVtb2l6YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQyOiB0b0NvbXBhcmUsXG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxOb29wQ2hlY2sgPSB0eXBlb2Ygbm9vcENoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbE5vb3BDaGVjayA6IG5vb3BDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbE5vb3BDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxOb29wQ2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIHRoZSByb290IHN0YXRlIHdoZW4gY2FsbGVkLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiB0aGUgZW50aXJlIHN0YXRlIGFyZSBhbG1vc3QgY2VydGFpbmx5IGEgbWlzdGFrZSwgYXMgdGhleSB3aWxsIGNhdXNlIGEgcmVyZW5kZXIgd2hlbmV2ZXIgKmFueXRoaW5nKiBpbiBzdGF0ZSBjaGFuZ2VzLicsIHtcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4uY3VycmVudCkgZmlyc3RSdW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgfVtzZWxlY3Rvci5uYW1lXSwgW3NlbGVjdG9yLCBnbG9iYWxTdGFiaWxpdHlDaGVjaywgc3RhYmlsaXR5Q2hlY2tdKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCB3cmFwcGVkU2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCJpbXBvcnQgeyBnZXRCYXRjaCB9IGZyb20gJy4vYmF0Y2gnOyAvLyBlbmNhcHN1bGF0ZXMgdGhlIHN1YnNjcmlwdGlvbiBsb2dpYyBmb3IgY29ubmVjdGluZyBhIGNvbXBvbmVudCB0byB0aGUgcmVkdXggc3RvcmUsIGFzXG4vLyB3ZWxsIGFzIG5lc3Rpbmcgc3Vic2NyaXB0aW9ucyBvZiBkZXNjZW5kYW50IGNvbXBvbmVudHMsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSB0aGVcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xuXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IGJhdGNoID0gZ2V0QmF0Y2goKTtcbiAgbGV0IGZpcnN0ID0gbnVsbDtcbiAgbGV0IGxhc3QgPSBudWxsO1xuICByZXR1cm4ge1xuICAgIGNsZWFyKCkge1xuICAgICAgZmlyc3QgPSBudWxsO1xuICAgICAgbGFzdCA9IG51bGw7XG4gICAgfSxcblxuICAgIG5vdGlmeSgpIHtcbiAgICAgIGJhdGNoKCgpID0+IHtcbiAgICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgICAgd2hpbGUgKGxpc3RlbmVyKSB7XG4gICAgICAgICAgbGlzdGVuZXIuY2FsbGJhY2soKTtcbiAgICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXQoKSB7XG4gICAgICBsZXQgbGlzdGVuZXJzID0gW107XG4gICAgICBsZXQgbGlzdGVuZXIgPSBmaXJzdDtcblxuICAgICAgd2hpbGUgKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgIH0sXG5cbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIGxldCBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgbGV0IGxpc3RlbmVyID0gbGFzdCA9IHtcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIHByZXY6IGxhc3RcbiAgICAgIH07XG5cbiAgICAgIGlmIChsaXN0ZW5lci5wcmV2KSB7XG4gICAgICAgIGxpc3RlbmVyLnByZXYubmV4dCA9IGxpc3RlbmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlyc3QgPSBsaXN0ZW5lcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAoIWlzU3Vic2NyaWJlZCB8fCBmaXJzdCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAobGlzdGVuZXIubmV4dCkge1xuICAgICAgICAgIGxpc3RlbmVyLm5leHQucHJldiA9IGxpc3RlbmVyLnByZXY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdCA9IGxpc3RlbmVyLnByZXY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICAgIGxpc3RlbmVyLnByZXYubmV4dCA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlyc3QgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICB9O1xufVxuXG5jb25zdCBudWxsTGlzdGVuZXJzID0ge1xuICBub3RpZnkoKSB7fSxcblxuICBnZXQ6ICgpID0+IFtdXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgcGFyZW50U3ViKSB7XG4gIGxldCB1bnN1YnNjcmliZTtcbiAgbGV0IGxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7IC8vIFJlYXNvbnMgdG8ga2VlcCB0aGUgc3Vic2NyaXB0aW9uIGFjdGl2ZVxuXG4gIGxldCBzdWJzY3JpcHRpb25zQW1vdW50ID0gMDsgLy8gSXMgdGhpcyBzcGVjaWZpYyBzdWJzY3JpcHRpb24gc3Vic2NyaWJlZCAob3Igb25seSBuZXN0ZWQgb25lcz8pXG5cbiAgbGV0IHNlbGZTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XG4gICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgY29uc3QgY2xlYW51cExpc3RlbmVyID0gbGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7IC8vIGNsZWFudXAgbmVzdGVkIHN1YlxuXG4gICAgbGV0IHJlbW92ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKCFyZW1vdmVkKSB7XG4gICAgICAgIHJlbW92ZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwTGlzdGVuZXIoKTtcbiAgICAgICAgdHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3VicygpIHtcbiAgICBsaXN0ZW5lcnMubm90aWZ5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VXcmFwcGVyKCkge1xuICAgIGlmIChzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSkge1xuICAgICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N1YnNjcmliZWQoKSB7XG4gICAgcmV0dXJuIHNlbGZTdWJzY3JpYmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJ5U3Vic2NyaWJlKCkge1xuICAgIHN1YnNjcmlwdGlvbnNBbW91bnQrKztcblxuICAgIGlmICghdW5zdWJzY3JpYmUpIHtcbiAgICAgIHVuc3Vic2NyaWJlID0gcGFyZW50U3ViID8gcGFyZW50U3ViLmFkZE5lc3RlZFN1YihoYW5kbGVDaGFuZ2VXcmFwcGVyKSA6IHN0b3JlLnN1YnNjcmliZShoYW5kbGVDaGFuZ2VXcmFwcGVyKTtcbiAgICAgIGxpc3RlbmVycyA9IGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xuICAgIHN1YnNjcmlwdGlvbnNBbW91bnQtLTtcblxuICAgIGlmICh1bnN1YnNjcmliZSAmJiBzdWJzY3JpcHRpb25zQW1vdW50ID09PSAwKSB7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgdW5zdWJzY3JpYmUgPSB1bmRlZmluZWQ7XG4gICAgICBsaXN0ZW5lcnMuY2xlYXIoKTtcbiAgICAgIGxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5U3Vic2NyaWJlU2VsZigpIHtcbiAgICBpZiAoIXNlbGZTdWJzY3JpYmVkKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICB0cnlTdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKHNlbGZTdWJzY3JpYmVkKSB7XG4gICAgICBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgdHJ5VW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgYWRkTmVzdGVkU3ViLFxuICAgIG5vdGlmeU5lc3RlZFN1YnMsXG4gICAgaGFuZGxlQ2hhbmdlV3JhcHBlcixcbiAgICBpc1N1YnNjcmliZWQsXG4gICAgdHJ5U3Vic2NyaWJlOiB0cnlTdWJzY3JpYmVTZWxmLFxuICAgIHRyeVVuc3Vic2NyaWJlOiB0cnlVbnN1YnNjcmliZVNlbGYsXG4gICAgZ2V0TGlzdGVuZXJzOiAoKSA9PiBsaXN0ZW5lcnNcbiAgfTtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLiBXZSBuZWVkIHVzZUxheW91dEVmZmVjdCB0byBlbnN1cmUgdGhlIHN0b3JlXG4vLyBzdWJzY3JpcHRpb24gY2FsbGJhY2sgYWx3YXlzIGhhcyB0aGUgc2VsZWN0b3IgZnJvbSB0aGUgbGF0ZXN0IHJlbmRlciBjb21taXRcbi8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgc3RvcmUgdXBkYXRlIG1heSBoYXBwZW4gYmV0d2VlbiByZW5kZXIgYW5kIHRoZSBlZmZlY3QsXG4vLyB3aGljaCBtYXkgY2F1c2UgbWlzc2VkIHVwZGF0ZXM7IHdlIGFsc28gbXVzdCBlbnN1cmUgdGhlIHN0b3JlIHN1YnNjcmlwdGlvblxuLy8gaXMgY3JlYXRlZCBzeW5jaHJvbm91c2x5LCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IG9jY3VyIGJlZm9yZSB0aGVcbi8vIHN1YnNjcmlwdGlvbiBpcyBjcmVhdGVkIGFuZCBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgbWF5IGJlIG9ic2VydmVkXG4vLyBNYXRjaGVzIGxvZ2ljIGluIFJlYWN0J3MgYHNoYXJlZC9FeGVjdXRpb25FbnZpcm9ubWVudGAgZmlsZVxuXG5leHBvcnQgY29uc3QgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5leHBvcnQgY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGNhblVzZURPTSA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUsIGlzQ29udGV4dENvbnN1bWVyIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29ubmVjdC9zZWxlY3RvckZhY3RvcnknO1xuaW1wb3J0IHsgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgeyBtZXJnZVByb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWVyZ2VQcm9wcyc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVDb25uZWN0ID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZuO1xufTsgLy8gRGVmaW5lIHNvbWUgY29uc3RhbnQgYXJyYXlzIGp1c3QgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlc2VcblxuY29uc3QgRU1QVFlfQVJSQVkgPSBbbnVsbCwgMF07XG5jb25zdCBOT19TVUJTQ1JJUFRJT05fQVJSQVkgPSBbbnVsbCwgbnVsbF07IC8vIEF0dGVtcHRzIHRvIHN0cmluZ2lmeSB3aGF0ZXZlciBub3QtcmVhbGx5LWEtY29tcG9uZW50IHZhbHVlIHdlIHdlcmUgZ2l2ZW5cbi8vIGZvciBsb2dnaW5nIGluIGFuIGVycm9yIG1lc3NhZ2VcblxuY29uc3Qgc3RyaW5naWZ5Q29tcG9uZW50ID0gQ29tcCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KENvbXApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nKENvbXApO1xuICB9XG59O1xuXG4vLyBUaGlzIGlzIFwianVzdFwiIGEgYHVzZUxheW91dEVmZmVjdGAsIGJ1dCB3aXRoIHR3byBtb2RpZmljYXRpb25zOlxuLy8gLSB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBgdXNlRWZmZWN0YCBpbiBTU1IgdG8gYXZvaWQgYW5ub3lpbmcgd2FybmluZ3Ncbi8vIC0gd2UgZXh0cmFjdCB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgY2xvc2luZyBvdmVyIHZhbHVlc1xuLy8gICBhbmQgY2F1c2luZyBtZW1vcnkgbGVha3NcbmZ1bmN0aW9uIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhlZmZlY3RGdW5jLCBlZmZlY3RBcmdzLCBkZXBlbmRlbmNpZXMpIHtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiBlZmZlY3RGdW5jKC4uLmVmZmVjdEFyZ3MpLCBkZXBlbmRlbmNpZXMpO1xufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogYXNzaWduIHRoZSBsYXRlc3QgcHJvcHMgdmFsdWVzIHRvIHJlZnMgZm9yIGxhdGVyIHVzYWdlXG5cblxuZnVuY3Rpb24gY2FwdHVyZVdyYXBwZXJQcm9wcyhsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgLy8gYWN0dWFsQ2hpbGRQcm9wczogdW5rbm93bixcbmNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMpIHtcbiAgLy8gV2Ugd2FudCB0byBjYXB0dXJlIHRoZSB3cmFwcGVyIHByb3BzIGFuZCBjaGlsZCBwcm9wcyB3ZSB1c2VkIGZvciBsYXRlciBjb21wYXJpc29uc1xuICBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQgPSB3cmFwcGVyUHJvcHM7XG4gIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIHJlbmRlciB3YXMgZnJvbSBhIHN0b3JlIHVwZGF0ZSwgY2xlYXIgb3V0IHRoYXQgcmVmZXJlbmNlIGFuZCBjYXNjYWRlIHRoZSBzdWJzY3JpYmVyIHVwZGF0ZVxuXG4gIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQpIHtcbiAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBudWxsO1xuICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgfVxufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogc3Vic2NyaWJlIHRvIHRoZSBSZWR1eCBzdG9yZSBvciBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvcixcbi8vIGNoZWNrIGZvciB1cGRhdGVzIGFmdGVyIGRpc3BhdGNoZWQgYWN0aW9ucywgYW5kIHRyaWdnZXIgcmUtcmVuZGVycy5cblxuXG5mdW5jdGlvbiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgLy8gZm9yY2VDb21wb25lbnRVcGRhdGVEaXNwYXRjaDogUmVhY3QuRGlzcGF0Y2g8YW55PixcbmFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcikge1xuICAvLyBJZiB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgc3RvcmUsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuICgpID0+IHt9OyAvLyBDYXB0dXJlIHZhbHVlcyBmb3IgY2hlY2tpbmcgaWYgYW5kIHdoZW4gdGhpcyBjb21wb25lbnQgdW5tb3VudHNcblxuICBsZXQgZGlkVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUaHJvd25FcnJvciA9IG51bGw7IC8vIFdlJ2xsIHJ1biB0aGlzIGNhbGxiYWNrIGV2ZXJ5IHRpbWUgYSBzdG9yZSBzdWJzY3JpcHRpb24gdXBkYXRlIHByb3BhZ2F0ZXMgdG8gdGhpcyBjb21wb25lbnRcblxuICBjb25zdCBjaGVja0ZvclVwZGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGRpZFVuc3Vic2NyaWJlIHx8ICFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgLy8gRG9uJ3QgcnVuIHN0YWxlIGxpc3RlbmVycy5cbiAgICAgIC8vIFJlZHV4IGRvZXNuJ3QgZ3VhcmFudGVlIHVuc3Vic2NyaXB0aW9ucyBoYXBwZW4gdW50aWwgbmV4dCBkaXNwYXRjaC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRPRE8gV2UncmUgY3VycmVudGx5IGNhbGxpbmcgZ2V0U3RhdGUgb3Vyc2VsdmVzIGhlcmUsIHJhdGhlciB0aGFuIGxldHRpbmcgYHVTRVNgIGRvIGl0XG5cblxuICAgIGNvbnN0IGxhdGVzdFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGxldCBuZXdDaGlsZFByb3BzLCBlcnJvcjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3R1YWxseSBydW4gdGhlIHNlbGVjdG9yIHdpdGggdGhlIG1vc3QgcmVjZW50IHN0b3JlIHN0YXRlIGFuZCB3cmFwcGVyIHByb3BzXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlXG4gICAgICBuZXdDaGlsZFByb3BzID0gY2hpbGRQcm9wc1NlbGVjdG9yKGxhdGVzdFN0b3JlU3RhdGUsIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgbGFzdFRocm93bkVycm9yID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH0gLy8gSWYgdGhlIGNoaWxkIHByb3BzIGhhdmVuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyBoZXJlIC0gY2FzY2FkZSB0aGUgc3Vic2NyaXB0aW9uIHVwZGF0ZVxuXG5cbiAgICBpZiAobmV3Q2hpbGRQcm9wcyA9PT0gbGFzdENoaWxkUHJvcHMuY3VycmVudCkge1xuICAgICAgaWYgKCFyZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50KSB7XG4gICAgICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHRoZSBuZXcgY2hpbGQgcHJvcHMuICBOb3RlIHRoYXQgd2UgdHJhY2sgdGhlIFwiY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGVcIlxuICAgICAgLy8gYXMgYSByZWYgaW5zdGVhZCBvZiBhIHVzZVN0YXRlL3VzZVJlZHVjZXIgYmVjYXVzZSB3ZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IHZhbHVlIGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQuICBJZiB0aGlzIHdlbnQgaW50byB1c2VTdGF0ZS91c2VSZWR1Y2VyLCB3ZSBjb3VsZG4ndCBjbGVhciBvdXQgdGhlIHZhbHVlIHdpdGhvdXRcbiAgICAgIC8vIGZvcmNpbmcgYW5vdGhlciByZS1yZW5kZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gdHJ1ZTsgLy8gVE9ETyBUaGlzIGlzIGhhY2t5IGFuZCBub3QgaG93IGB1U0VTYCBpcyBtZWFudCB0byBiZSB1c2VkXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBSZWFjdCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIHN1YnNjcmliZXJcblxuICAgICAgYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9OyAvLyBBY3R1YWxseSBzdWJzY3JpYmUgdG8gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yIChvciBzdG9yZSlcblxuXG4gIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gY2hlY2tGb3JVcGRhdGVzO1xuICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7IC8vIFB1bGwgZGF0YSBmcm9tIHRoZSBzdG9yZSBhZnRlciBmaXJzdCByZW5kZXIgaW4gY2FzZSB0aGUgc3RvcmUgaGFzXG4gIC8vIGNoYW5nZWQgc2luY2Ugd2UgYmVnYW4uXG5cbiAgY2hlY2tGb3JVcGRhdGVzKCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVXcmFwcGVyID0gKCkgPT4ge1xuICAgIGRpZFVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IG51bGw7XG5cbiAgICBpZiAobGFzdFRocm93bkVycm9yKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2F1Z2h0IGFuIGVycm9yIGR1ZSB0byBhIGJhZCBtYXBTdGF0ZSBmdW5jdGlvbiwgYnV0IHRoZVxuICAgICAgLy8gcGFyZW50IHJlLXJlbmRlcmVkIHdpdGhvdXQgdGhpcyBjb21wb25lbnQgYW5kIHdlJ3JlIGFib3V0IHRvIHVubW91bnQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgbG9uZyBhcyB3ZSBkbyB0b3AtZG93biBzdWJzY3JpcHRpb25zIGNvcnJlY3RseSwgYnV0XG4gICAgICAvLyBpZiB3ZSBldmVyIGRvIHRob3NlIHdyb25nLCB0aGlzIHRocm93IHdpbGwgc3VyZmFjZSB0aGUgZXJyb3IgaW4gb3VyIHRlc3RzLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aHJvdyB0aGUgZXJyb3IgZnJvbSBoZXJlIHNvIGl0IGRvZXNuJ3QgZ2V0IGxvc3QuXG4gICAgICB0aHJvdyBsYXN0VGhyb3duRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1bnN1YnNjcmliZVdyYXBwZXI7XG59IC8vIFJlZHVjZXIgaW5pdGlhbCBzdGF0ZSBjcmVhdGlvbiBmb3Igb3VyIHVwZGF0ZSByZWR1Y2VyXG5cblxuY29uc3QgaW5pdFN0YXRlVXBkYXRlcyA9ICgpID0+IEVNUFRZX0FSUkFZO1xuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuLyoqXHJcbiAqIEluZmVycyB0aGUgdHlwZSBvZiBwcm9wcyB0aGF0IGEgY29ubmVjdG9yIHdpbGwgaW5qZWN0IGludG8gYSBjb21wb25lbnQuXHJcbiAqL1xuXG5cbmxldCBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gZmFsc2U7XG4vKipcclxuICogQ29ubmVjdHMgYSBSZWFjdCBjb21wb25lbnQgdG8gYSBSZWR1eCBzdG9yZS5cclxuICpcclxuICogLSBXaXRob3V0IGFyZ3VtZW50cywganVzdCB3cmFwcyB0aGUgY29tcG9uZW50LCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvciAvIHByb3BzXHJcbiAqXHJcbiAqIC0gSWYgMiBwYXJhbXMgYXJlIHBhc3NlZCAoM3JkIHBhcmFtLCBtZXJnZVByb3BzLCBpcyBza2lwcGVkKSwgZGVmYXVsdCBiZWhhdmlvclxyXG4gKiBpcyB0byBvdmVycmlkZSBvd25Qcm9wcyAoYXMgc3RhdGVkIGluIHRoZSBkb2NzKSwgc28gd2hhdCByZW1haW5zIGlzIGV2ZXJ5dGhpbmcgdGhhdCdzXHJcbiAqIG5vdCBhIHN0YXRlIG9yIGRpc3BhdGNoIHByb3BcclxuICpcclxuICogLSBXaGVuIDNyZCBwYXJhbSBpcyBwYXNzZWQsIHdlIGRvbid0IGtub3cgaWYgb3duUHJvcHMgcHJvcGFnYXRlIGFuZCB3aGV0aGVyIHRoZXlcclxuICogc2hvdWxkIGJlIHZhbGlkIGNvbXBvbmVudCBwcm9wcywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIG1lcmdlUHJvcHMgaW1wbGVtZW50YXRpb24uXHJcbiAqIEFzIHN1Y2gsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZXh0ZW5kIG93blByb3BzIGludGVyZmFjZSBmcm9tIHN0YXRlIG9yXHJcbiAqIGRpc3BhdGNoIHByb3BzIG9yIGJvdGggd2hlbiBhcHBsaWNhYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXBTdGF0ZVRvUHJvcHMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHZhbHVlcyBmcm9tIHN0YXRlXHJcbiAqIEBwYXJhbSBtYXBEaXNwYXRjaFRvUHJvcHMgU2V0dXAgZm9yIGRpc3BhdGNoaW5nIGFjdGlvbnNcclxuICogQHBhcmFtIG1lcmdlUHJvcHMgT3B0aW9uYWwgY2FsbGJhY2sgdG8gbWVyZ2Ugc3RhdGUgYW5kIGRpc3BhdGNoIHByb3BzIHRvZ2V0aGVyXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uXHJcbiAqXHJcbiAqL1xuXG5mdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCB7XG4gIC8vIFRoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHNvIFRTIGRvZXNuJ3QgbGlrZSB1cyBkZXN0cnVjdHVyaW5nIHRoaXMgdG8gY2hlY2sgaXRzIGV4aXN0ZW5jZS5cbiAgLy8gQHRzLWlnbm9yZVxuICBwdXJlLFxuICBhcmVTdGF0ZXNFcXVhbCA9IHN0cmljdEVxdWFsLFxuICBhcmVPd25Qcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIC8vIHVzZSBSZWFjdCdzIGZvcndhcmRSZWYgdG8gZXhwb3NlIGEgcmVmIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudFxuICBmb3J3YXJkUmVmID0gZmFsc2UsXG4gIC8vIHRoZSBjb250ZXh0IGNvbnN1bWVyIHRvIHVzZVxuICBjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHRcbn0gPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChwdXJlICE9PSB1bmRlZmluZWQgJiYgIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24pIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSB0cnVlO1xuICAgICAgd2FybmluZygnVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gYGNvbm5lY3RgIGlzIG5vdyBhbHdheXMgYSBcInB1cmUvbWVtb2l6ZWRcIiBjb21wb25lbnQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBDb250ZXh0ID0gY29udGV4dDtcbiAgY29uc3QgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkobWFwU3RhdGVUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkobWFwRGlzcGF0Y2hUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1lcmdlUHJvcHMgPSBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKTtcbiAgY29uc3Qgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpO1xuXG4gIGNvbnN0IHdyYXBXaXRoQ29ubmVjdCA9IFdyYXBwZWRDb21wb25lbnQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc1ZhbGlkRWxlbWVudFR5cGUoV3JhcHBlZENvbXBvbmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAke3N0cmluZ2lmeUNvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gYENvbm5lY3QoJHt3cmFwcGVkQ29tcG9uZW50TmFtZX0pYDtcbiAgICBjb25zdCBzZWxlY3RvckZhY3RvcnlPcHRpb25zID0ge1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzLFxuICAgICAgYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0RnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgIGNvbnN0IFtwcm9wc0NvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhY3R1YWwgXCJkYXRhXCIgcHJvcHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIGFuZCB2YWx1ZXMgbmVlZGVkIHRvIGNvbnRyb2wgYmVoYXZpb3IgKGZvcndhcmRlZCByZWZzLCBhbHRlcm5hdGUgY29udGV4dCBpbnN0YW5jZXMpLlxuICAgICAgICAvLyBUbyBtYWludGFpbiB0aGUgd3JhcHBlclByb3BzIG9iamVjdCByZWZlcmVuY2UsIG1lbW9pemUgdGhpcyBkZXN0cnVjdHVyaW5nLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICB9ID0gcHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBwZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHJldHVybiBbcHJvcHMuY29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXTtcbiAgICAgIH0sIFtwcm9wc10pO1xuICAgICAgY29uc3QgQ29udGV4dFRvVXNlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFVzZXJzIG1heSBvcHRpb25hbGx5IHBhc3MgaW4gYSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBvdXIgUmVhY3RSZWR1eENvbnRleHQuXG4gICAgICAgIC8vIE1lbW9pemUgdGhlIGNoZWNrIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBjb250ZXh0IGluc3RhbmNlIHdlIHNob3VsZCB1c2UuXG4gICAgICAgIHJldHVybiBwcm9wc0NvbnRleHQgJiYgcHJvcHNDb250ZXh0LkNvbnN1bWVyICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaXNDb250ZXh0Q29uc3VtZXIoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KHByb3BzQ29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gcHJvcHNDb250ZXh0IDogQ29udGV4dDtcbiAgICAgIH0sIFtwcm9wc0NvbnRleHQsIENvbnRleHRdKTsgLy8gUmV0cmlldmUgdGhlIHN0b3JlIGFuZCBhbmNlc3RvciBzdWJzY3JpcHRpb24gdmlhIGNvbnRleHQsIGlmIGF2YWlsYWJsZVxuXG4gICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHRUb1VzZSk7IC8vIFRoZSBzdG9yZSBfbXVzdF8gZXhpc3QgYXMgZWl0aGVyIGEgcHJvcCBvciBpbiBjb250ZXh0LlxuICAgICAgLy8gV2UnbGwgY2hlY2sgdG8gc2VlIGlmIGl0IF9sb29rc18gbGlrZSBhIFJlZHV4IHN0b3JlIGZpcnN0LlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyB0aHJvdWdoIGEgYHN0b3JlYCBwcm9wIHRoYXQgaXMganVzdCBhIHBsYWluIHZhbHVlLlxuXG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPSBCb29sZWFuKHByb3BzLnN0b3JlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmdldFN0YXRlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID0gQm9vbGVhbihjb250ZXh0VmFsdWUpICYmIEJvb2xlYW4oY29udGV4dFZhbHVlLnN0b3JlKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRpZFN0b3JlQ29tZUZyb21Qcm9wcyAmJiAhZGlkU3RvcmVDb21lRnJvbUNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBcInN0b3JlXCIgaW4gdGhlIGNvbnRleHQgb2YgYCArIGBcIiR7ZGlzcGxheU5hbWV9XCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIGAgKyBgb3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgUmVhY3QgY29udGV4dCBjb25zdW1lciB0byAke2Rpc3BsYXlOYW1lfSBpbiBjb25uZWN0IG9wdGlvbnMuYCk7XG4gICAgICB9IC8vIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjaGVjaywgb25lIG9mIHRoZXNlIG11c3QgYmUgdHJ1ZVxuXG5cbiAgICAgIGNvbnN0IHN0b3JlID0gZGlkU3RvcmVDb21lRnJvbVByb3BzID8gcHJvcHMuc3RvcmUgOiBjb250ZXh0VmFsdWUuc3RvcmU7XG4gICAgICBjb25zdCBnZXRTZXJ2ZXJTdGF0ZSA9IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID8gY29udGV4dFZhbHVlLmdldFNlcnZlclN0YXRlIDogc3RvcmUuZ2V0U3RhdGU7XG4gICAgICBjb25zdCBjaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNoaWxkIHByb3BzIHNlbGVjdG9yIG5lZWRzIHRoZSBzdG9yZSByZWZlcmVuY2UgYXMgYW4gaW5wdXQuXG4gICAgICAgIC8vIFJlLWNyZWF0ZSB0aGlzIHNlbGVjdG9yIHdoZW5ldmVyIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeShzdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICB9LCBbc3RvcmVdKTtcbiAgICAgIGNvbnN0IFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gTk9fU1VCU0NSSVBUSU9OX0FSUkFZOyAvLyBUaGlzIFN1YnNjcmlwdGlvbidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzID8gdW5kZWZpbmVkIDogY29udGV4dFZhbHVlLnN1YnNjcmlwdGlvbik7IC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIFRoaXMgY2FuXG4gICAgICAgIC8vIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3MgbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8gbm90IGNhbGwgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGUgIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG5cbiAgICAgICAgY29uc3Qgbm90aWZ5TmVzdGVkU3VicyA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdO1xuICAgICAgfSwgW3N0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZV0pOyAvLyBEZXRlcm1pbmUgd2hhdCB7c3RvcmUsIHN1YnNjcmlwdGlvbn0gdmFsdWUgc2hvdWxkIGJlIHB1dCBpbnRvIG5lc3RlZCBjb250ZXh0LCBpZiBuZWNlc3NhcnksXG4gICAgICAvLyBhbmQgbWVtb2l6ZSB0aGF0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgdXBkYXRlcy5cblxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlkU3RvcmVDb21lRnJvbVByb3BzKSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgZGlyZWN0bHkgc3Vic2NyaWJlZCB0byBhIHN0b3JlIGZyb20gcHJvcHMuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZXNjZW5kYW50cyByZWFkaW5nIGZyb20gdGhpcyBzdG9yZSAtIHBhc3MgZG93biB3aGF0ZXZlclxuICAgICAgICAgIC8vIHRoZSBleGlzdGluZyBjb250ZXh0IHZhbHVlIGlzIGZyb20gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLlxuICAgICAgICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwdXQgdGhpcyBjb21wb25lbnQncyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgaW50byBjb250ZXh0LCBzbyB0aGF0XG4gICAgICAgIC8vIGNvbm5lY3RlZCBkZXNjZW5kYW50cyB3b24ndCB1cGRhdGUgdW50aWwgYWZ0ZXIgdGhpcyBjb21wb25lbnQgaXMgZG9uZVxuXG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0VmFsdWUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9LCBbZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWUsIHN1YnNjcmlwdGlvbl0pOyAvLyBTZXQgdXAgcmVmcyB0byBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRoZSBzdWJzY3JpcHRpb24gZWZmZWN0IGFuZCB0aGUgcmVuZGVyIGxvZ2ljXG5cbiAgICAgIGNvbnN0IGxhc3RDaGlsZFByb3BzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCBsYXN0V3JhcHBlclByb3BzID0gUmVhY3QudXNlUmVmKHdyYXBwZXJQcm9wcyk7XG4gICAgICBjb25zdCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCByZW5kZXJJc1NjaGVkdWxlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc1Byb2Nlc3NpbmdEaXNwYXRjaCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc01vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvciA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFRyaWNreSBsb2dpYyBoZXJlOlxuICAgICAgICAgIC8vIC0gVGhpcyByZW5kZXIgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYnkgYSBSZWR1eCBzdG9yZSB1cGRhdGUgdGhhdCBwcm9kdWNlZCBuZXcgY2hpbGQgcHJvcHNcbiAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdlIG1heSBoYXZlIGdvdHRlbiBuZXcgd3JhcHBlciBwcm9wcyBhZnRlciB0aGF0XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBuZXcgY2hpbGQgcHJvcHMsIGFuZCB0aGUgc2FtZSB3cmFwcGVyIHByb3BzLCB3ZSBrbm93IHdlIHNob3VsZCB1c2UgdGhlIG5ldyBjaGlsZCBwcm9wcyBhcy1pcy5cbiAgICAgICAgICAvLyBCdXQsIGlmIHdlIGhhdmUgbmV3IHdyYXBwZXIgcHJvcHMsIHRob3NlIG1pZ2h0IGNoYW5nZSB0aGUgY2hpbGQgcHJvcHMsIHNvIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpbmdzLlxuICAgICAgICAgIC8vIFNvLCB3ZSdsbCB1c2UgdGhlIGNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlIG9ubHkgaWYgdGhlIHdyYXBwZXIgcHJvcHMgYXJlIHRoZSBzYW1lIGFzIGxhc3QgdGltZS5cbiAgICAgICAgICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ICYmIHdyYXBwZXJQcm9wcyA9PT0gbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50O1xuICAgICAgICAgIH0gLy8gVE9ETyBXZSdyZSByZWFkaW5nIHRoZSBzdG9yZSBkaXJlY3RseSBpbiByZW5kZXIoKSBoZXJlLiBCYWQgaWRlYT9cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IGNhdXNlIEJhZCBUaGluZ3MgKFRNKSB0byBoYXBwZW4gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlY2F1c2Ugb24gcmVuZGVycyBfbm90XyBjYXVzZWQgYnkgc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0aGUgbGF0ZXN0IHN0b3JlIHN0YXRlXG4gICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZS5cblxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNTZWxlY3RvcihzdG9yZS5nZXRTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgIH0sIFtzdG9yZSwgd3JhcHBlclByb3BzXSk7IC8vIFdlIG5lZWQgdGhpcyB0byBleGVjdXRlIHN5bmNocm9ub3VzbHkgZXZlcnkgdGltZSB3ZSByZS1yZW5kZXIuIEhvd2V2ZXIsIFJlYWN0IHdhcm5zXG4gICAgICAvLyBhYm91dCB1c2VMYXlvdXRFZmZlY3QgaW4gU1NSLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IGVudmlyb25tZW50IGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGp1c3QgdXNlRWZmZWN0IGluc3RlYWQgdG8gYXZvaWQgdGhlIHdhcm5pbmcsIHNpbmNlIG5laXRoZXIgd2lsbCBydW4gYW55d2F5LlxuXG4gICAgICBjb25zdCBzdWJzY3JpYmVGb3JSZWFjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSByZWFjdExpc3RlbmVyID0+IHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIHJlYWN0TGlzdGVuZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpYmU7XG4gICAgICB9LCBbc3Vic2NyaXB0aW9uXSk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoY2FwdHVyZVdyYXBwZXJQcm9wcywgW2xhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzXSk7XG4gICAgICBsZXQgYWN0dWFsQ2hpbGRQcm9wcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wcyA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKCAvLyBUT0RPIFdlJ3JlIHBhc3NpbmcgdGhyb3VnaCBhIGJpZyB3cmFwcGVyIHRoYXQgZG9lcyBhIGJ1bmNoIG9mIGV4dHJhIHNpZGUgZWZmZWN0cyBiZXNpZGVzIHN1YnNjcmliaW5nXG4gICAgICAgIHN1YnNjcmliZUZvclJlYWN0LCAvLyBUT0RPIFRoaXMgaXMgaW5jcmVkaWJseSBoYWNreS4gV2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIHN0b3JlIHVwZGF0ZSBhbmQgY2FsY3VsYXRlZCBuZXcgY2hpbGQgcHJvcHMsXG4gICAgICAgIC8vIFRPRE8gYW5kIHdlJ3JlIGp1c3QgcGFzc2luZyB0aGF0IHRocm91Z2ggc28gaXQgdHJpZ2dlcnMgYSByZS1yZW5kZXIgZm9yIHVzIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYHVTRVNgLlxuICAgICAgICBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IsIGdldFNlcnZlclN0YXRlID8gKCkgPT4gY2hpbGRQcm9wc1NlbGVjdG9yKGdldFNlcnZlclN0YXRlKCksIHdyYXBwZXJQcm9wcykgOiBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQpIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgKz0gYFxcblRoZSBlcnJvciBtYXkgYmUgY29ycmVsYXRlZCB3aXRoIHRoaXMgcHJldmlvdXMgZXJyb3I6XFxuJHtsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQuc3RhY2t9XFxuXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gYWN0dWFsQ2hpbGRQcm9wcztcbiAgICAgIH0pOyAvLyBOb3cgdGhhdCBhbGwgdGhhdCdzIGRvbmUsIHdlIGNhbiBmaW5hbGx5IHRyeSB0byBhY3R1YWxseSByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgIC8vIFdlIG1lbW9pemUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcmVuZGVyZWQgY2hpbGQgY29tcG9uZW50IGFzIGFuIG9wdGltaXphdGlvbi5cblxuICAgICAgY29uc3QgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBhY3R1YWxDaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH0sIFtyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCBXcmFwcGVkQ29tcG9uZW50LCBhY3R1YWxDaGlsZFByb3BzXSk7IC8vIElmIFJlYWN0IHNlZXMgdGhlIGV4YWN0IHNhbWUgZWxlbWVudCByZWZlcmVuY2UgYXMgbGFzdCB0aW1lLCBpdCBiYWlscyBvdXQgb2YgcmUtcmVuZGVyaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkLCBzYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIFJlYWN0Lm1lbW8oKSBvciByZXR1cm5lZCBmYWxzZSBmcm9tIHNob3VsZENvbXBvbmVudFVwZGF0ZS5cblxuICAgICAgY29uc3QgcmVuZGVyZWRDaGlsZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgc3Vic2NyaWJlZCB0byBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRvIHBhc3MgaXRzIG93blxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBkb3duIHRvIG91ciBkZXNjZW5kYW50cy4gVGhhdCBtZWFucyByZW5kZXJpbmcgdGhlIHNhbWVcbiAgICAgICAgICAvLyBDb250ZXh0IGluc3RhbmNlLCBhbmQgcHV0dGluZyBhIGRpZmZlcmVudCB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0LlxuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0VG9Vc2UuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBvdmVycmlkZGVuQ29udGV4dFZhbHVlXG4gICAgICAgICAgfSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9LCBbQ29udGV4dFRvVXNlLCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQsIG92ZXJyaWRkZW5Db250ZXh0VmFsdWVdKTtcbiAgICAgIHJldHVybiByZW5kZXJlZENoaWxkO1xuICAgIH1cblxuICAgIGNvbnN0IF9Db25uZWN0ID0gUmVhY3QubWVtbyhDb25uZWN0RnVuY3Rpb24pO1xuXG4gICAgLy8gQWRkIGEgaGFja3kgY2FzdCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCB0eXBlXG4gICAgY29uc3QgQ29ubmVjdCA9IF9Db25uZWN0O1xuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFtZSA9IENvbm5lY3RGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuXG4gICAgaWYgKGZvcndhcmRSZWYpIHtcbiAgICAgIGNvbnN0IF9mb3J3YXJkZWQgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIGZvcndhcmRDb25uZWN0UmVmKHByb3BzLCByZWYpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3J3YXJkZWQgPSBfZm9yd2FyZGVkO1xuICAgICAgZm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICBmb3J3YXJkZWQuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gaG9pc3RTdGF0aWNzKGZvcndhcmRlZCwgV3JhcHBlZENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gd3JhcFdpdGhDb25uZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCB7IGNyZWF0ZVN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL3V0aWxzL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vdXRpbHMvdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCc7XG5cbmZ1bmN0aW9uIFByb3ZpZGVyKHtcbiAgc3RvcmUsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICBzZXJ2ZXJTdGF0ZSxcbiAgc3RhYmlsaXR5Q2hlY2sgPSAnb25jZScsXG4gIG5vb3BDaGVjayA9ICdvbmNlJ1xufSkge1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUpO1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlOiBzZXJ2ZXJTdGF0ZSA/ICgpID0+IHNlcnZlclN0YXRlIDogdW5kZWZpbmVkLFxuICAgICAgc3RhYmlsaXR5Q2hlY2ssXG4gICAgICBub29wQ2hlY2tcbiAgICB9O1xuICB9LCBbc3RvcmUsIHNlcnZlclN0YXRlLCBzdGFiaWxpdHlDaGVjaywgbm9vcENoZWNrXSk7XG4gIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHN0b3JlLmdldFN0YXRlKCksIFtzdG9yZV0pO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzdWJzY3JpcHRpb25cbiAgICB9ID0gY29udGV4dFZhbHVlO1xuICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnM7XG4gICAgc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHByZXZpb3VzU3RhdGUgIT09IHN0b3JlLmdldFN0YXRlKCkpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfSwgW2NvbnRleHRWYWx1ZSwgcHJldmlvdXNTdGF0ZV0pO1xuICBjb25zdCBDb250ZXh0ID0gY29udGV4dCB8fCBSZWFjdFJlZHV4Q29udGV4dDsgLy8gQHRzLWlnbm9yZSAnQW55QWN0aW9uJyBpcyBhc3NpZ25hYmxlIHRvIHRoZSBjb25zdHJhaW50IG9mIHR5cGUgJ0EnLCBidXQgJ0EnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgfSwgY2hpbGRyZW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQcm92aWRlcjsiLCJpbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgYXMgdXNlRGVmYXVsdFJlZHV4Q29udGV4dCwgY3JlYXRlUmVkdXhDb250ZXh0SG9vayB9IGZyb20gJy4vdXNlUmVkdXhDb250ZXh0Jztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlU3RvcmVgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmVIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvLyBAdHMtaWdub3JlXG4gIGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFJlZHV4Q29udGV4dCA6IC8vIEB0cy1pZ25vcmVcbiAgY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVN0b3JlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlXG4gICAgfSA9IHVzZVJlZHV4Q29udGV4dCgpOyAvLyBAdHMtaWdub3JlXG5cbiAgICByZXR1cm4gc3RvcmU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSByZWR1eCBzdG9yZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBFeGFtcGxlQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoKVxyXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5nZXRTdGF0ZSgpfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3RvcmUgPSAvKiNfX1BVUkVfXyovY3JlYXRlU3RvcmVIb29rKCk7IiwiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsImltcG9ydCBQcm92aWRlciBmcm9tICcuL2NvbXBvbmVudHMvUHJvdmlkZXInO1xuaW1wb3J0IGNvbm5lY3QgZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3QnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgY3JlYXRlRGlzcGF0Y2hIb29rIH0gZnJvbSAnLi9ob29rcy91c2VEaXNwYXRjaCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciwgY3JlYXRlU2VsZWN0b3JIb29rIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyB1c2VTdG9yZSwgY3JlYXRlU3RvcmVIb29rIH0gZnJvbSAnLi9ob29rcy91c2VTdG9yZSc7XG5pbXBvcnQgc2hhbGxvd0VxdWFsIGZyb20gJy4vdXRpbHMvc2hhbGxvd0VxdWFsJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgUHJvdmlkZXIsIFJlYWN0UmVkdXhDb250ZXh0LCBjb25uZWN0LCB1c2VEaXNwYXRjaCwgY3JlYXRlRGlzcGF0Y2hIb29rLCB1c2VTZWxlY3RvciwgY3JlYXRlU2VsZWN0b3JIb29rLCB1c2VTdG9yZSwgY3JlYXRlU3RvcmVIb29rLCBzaGFsbG93RXF1YWwgfTsiLCIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsIi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtaW9zL2Jsb2IvYmNhMzYxMDc0MDU1OTRkNWI3YjE2MjY1YTViMGVkNjk4Zjg1YTVlZS9jb21wb25lbnRzL0VsZXZhdGlvbi9zcmMvVUlDb2xvciUyQk1hdGVyaWFsRWxldmF0aW9uLm0jTDYxXG5jb25zdCBnZXRPdmVybGF5QWxwaGEgPSBlbGV2YXRpb24gPT4ge1xuICBsZXQgYWxwaGFWYWx1ZTtcbiAgaWYgKGVsZXZhdGlvbiA8IDEpIHtcbiAgICBhbHBoYVZhbHVlID0gNS4xMTkxNiAqIGVsZXZhdGlvbiAqKiAyO1xuICB9IGVsc2Uge1xuICAgIGFscGhhVmFsdWUgPSA0LjUgKiBNYXRoLmxvZyhlbGV2YXRpb24gKyAxKSArIDI7XG4gIH1cbiAgcmV0dXJuIChhbHBoYVZhbHVlIC8gMTAwKS50b0ZpeGVkKDIpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldE92ZXJsYXlBbHBoYTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJlbGV2YXRpb25cIiwgXCJzcXVhcmVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGludGVnZXJQcm9wVHlwZSBmcm9tICdAbXVpL3V0aWxzL2ludGVnZXJQcm9wVHlwZSc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBnZXRPdmVybGF5QWxwaGEgZnJvbSAnLi4vc3R5bGVzL2dldE92ZXJsYXlBbHBoYSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFBhcGVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wYXBlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBzcXVhcmUsXG4gICAgZWxldmF0aW9uLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgIXNxdWFyZSAmJiAncm91bmRlZCcsIHZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIGBlbGV2YXRpb24ke2VsZXZhdGlvbn1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBhcGVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBQYXBlclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVBhcGVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYgc3R5bGVzLnJvdW5kZWQsIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgc3R5bGVzW2BlbGV2YXRpb24ke293bmVyU3RhdGUuZWxldmF0aW9ufWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzJG92ZXJsYXlzO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlcixcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm94LXNoYWRvdycpXG4gIH0sICFvd25lclN0YXRlLnNxdWFyZSAmJiB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zaGFwZS5ib3JkZXJSYWRpdXNcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5kaXZpZGVyfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBfZXh0ZW5kcyh7XG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSwgIXRoZW1lLnZhcnMgJiYgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnZGFyaycgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogYGxpbmVhci1ncmFkaWVudCgke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9LCAke2FscGhhKCcjZmZmJywgZ2V0T3ZlcmxheUFscGhhKG93bmVyU3RhdGUuZWxldmF0aW9uKSl9KWBcbiAgfSwgdGhlbWUudmFycyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiAoX3RoZW1lJHZhcnMkb3ZlcmxheXMgPSB0aGVtZS52YXJzLm92ZXJsYXlzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHZhcnMkb3ZlcmxheXNbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG4gIH0pKTtcbn0pO1xuY29uc3QgUGFwZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQYXBlcihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZWxldmF0aW9uID0gMSxcbiAgICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdlbGV2YXRpb24nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZWxldmF0aW9uLFxuICAgIHNxdWFyZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICAgIGlmICh0aGVtZS5zaGFkb3dzW2VsZXZhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGVsZXZhdGlvbiBwcm92aWRlZCA8UGFwZXIgZWxldmF0aW9uPXske2VsZXZhdGlvbn19PiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB0aGVtZS5gLCBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IFxcYHRoZW1lLnNoYWRvd3NbJHtlbGV2YXRpb259XVxcYCBpcyBkZWZpbmVkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBhcGVyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBhcGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTaGFkb3cgZGVwdGgsIGNvcnJlc3BvbmRzIHRvIGBkcGAgaW4gdGhlIHNwZWMuXG4gICAqIEl0IGFjY2VwdHMgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjQgaW5jbHVzaXZlLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBlbGV2YXRpb246IGNoYWluUHJvcFR5cGVzKGludGVnZXJQcm9wVHlwZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHZhcmlhbnRcbiAgICB9ID0gcHJvcHM7XG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcm91bmRlZCBjb3JuZXJzIGFyZSBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNxdWFyZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdlbGV2YXRpb24nXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2VsZXZhdGlvbicsICdvdXRsaW5lZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXI7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gbnVsbCkge1xuICBjb25zdCBjb250ZXh0VGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gIHJldHVybiAhY29udGV4dFRoZW1lIHx8IGlzT2JqZWN0RW1wdHkoY29udGV4dFRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IGNvbnRleHRUaGVtZTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lLFxuICAgIGRlZmF1bHRDbGFzc05hbWUgPSAnTXVpQm94LXJvb3QnLFxuICAgIGdlbmVyYXRlQ2xhc3NOYW1lXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBCb3hSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcydcbiAgfSkoc3R5bGVGdW5jdGlvblN4KTtcbiAgY29uc3QgQm94ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQm94KGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgICBjb25zdCBfZXh0ZW5kU3hQcm9wID0gZXh0ZW5kU3hQcm9wKGluUHJvcHMpLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbXBvbmVudCA9ICdkaXYnXG4gICAgICB9ID0gX2V4dGVuZFN4UHJvcCxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX2V4dGVuZFN4UHJvcCwgX2V4Y2x1ZGVkKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQm94Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgZ2VuZXJhdGVDbGFzc05hbWUgPyBnZW5lcmF0ZUNsYXNzTmFtZShkZWZhdWx0Q2xhc3NOYW1lKSA6IGRlZmF1bHRDbGFzc05hbWUpLFxuICAgICAgdGhlbWU6IHRoZW1lSWQgPyB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZSA6IHRoZW1lXG4gICAgfSwgb3RoZXIpKTtcbiAgfSk7XG4gIHJldHVybiBCb3g7XG59IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmNvbnN0IGJveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCb3gnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBib3hDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciBhcyBDbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICcuLi9jbGFzc05hbWUnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICcuLi9zdHlsZXMnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCBib3hDbGFzc2VzIGZyb20gJy4vYm94Q2xhc3Nlcyc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgQm94ID0gY3JlYXRlQm94KHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgZGVmYXVsdENsYXNzTmFtZTogYm94Q2xhc3Nlcy5yb290LFxuICBnZW5lcmF0ZUNsYXNzTmFtZTogQ2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJveC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJveDsiLCIvKipcbiAqIERldGVybWluZXMgaWYgYSBnaXZlbiBlbGVtZW50IGlzIGEgRE9NIGVsZW1lbnQgbmFtZSAoaS5lLiBub3QgYSBSZWFjdCBjb21wb25lbnQpLlxuICovXG5mdW5jdGlvbiBpc0hvc3RDb21wb25lbnQoZWxlbWVudCkge1xuICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0IGRlZmF1bHQgaXNIb3N0Q29tcG9uZW50OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJzdHlsZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2RlYm91bmNlIGFzIGRlYm91bmNlLCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2ssIHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCAwO1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICBzaGFkb3c6IHtcbiAgICAvLyBWaXNpYmlsaXR5IG5lZWRlZCB0byBoaWRlIHRoZSBleHRyYSB0ZXh0IGFyZWEgb24gaVBhZHNcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY29udGVudCBmbG93XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgLy8gSWdub3JlIHRoZSBzY3JvbGxiYXIgd2lkdGhcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgaGVpZ2h0OiAwLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC8vIENyZWF0ZSBhIG5ldyBsYXllciwgaW5jcmVhc2UgdGhlIGlzb2xhdGlvbiBvZiB0aGUgY29tcHV0ZWQgdmFsdWVzXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSdcbiAgfVxufTtcbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqZWN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBmb3IgKGNvbnN0IF8gaW4gb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIGlzT2JqZWN0RW1wdHkob2JqKSB8fCBvYmoub3V0ZXJIZWlnaHRTdHlsZSA9PT0gMCAmJiAhb2JqLm92ZXJmbG93aW5nO1xufVxuXG4vKipcbiAqXG4gKiBEZW1vczpcbiAqXG4gKiAtIFtUZXh0YXJlYSBBdXRvc2l6ZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbVGV4dGFyZWFBdXRvc2l6ZSBBUEldKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9hcGkvdGV4dGFyZWEtYXV0b3NpemUvKVxuICovXG5jb25zdCBUZXh0YXJlYUF1dG9zaXplID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVGV4dGFyZWFBdXRvc2l6ZShwcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MgPSAxLFxuICAgICAgc3R5bGUsXG4gICAgICB2YWx1ZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IHRleHRhcmVhUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGZvcndhcmRlZFJlZiwgdGV4dGFyZWFSZWYpO1xuICBjb25zdCBoZWlnaHRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhpZGRlblRleHRhcmVhUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjYWxjdWxhdGVUZXh0YXJlYVN0eWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IHRleHRhcmVhUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaGlkZGVuVGV4dGFyZWEgPSBoaWRkZW5UZXh0YXJlYVJlZi5jdXJyZW50O1xuICAgIGlmICghdGV4dGFyZWEgfHwgIWhpZGRlblRleHRhcmVhKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyh0ZXh0YXJlYSk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGNvbnRhaW5lcldpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRhcmVhKTtcblxuICAgIC8vIElmIGlucHV0J3Mgd2lkdGggaXMgc2hydW5rIGFuZCBpdCdzIG5vdCB2aXNpYmxlLCBkb24ndCBzeW5jIGhlaWdodC5cbiAgICBpZiAoY29tcHV0ZWRTdHlsZS53aWR0aCA9PT0gJzBweCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dGVySGVpZ2h0U3R5bGU6IDAsXG4gICAgICAgIG92ZXJmbG93aW5nOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgaGlkZGVuVGV4dGFyZWEuc3R5bGUud2lkdGggPSBjb21wdXRlZFN0eWxlLndpZHRoO1xuICAgIGhpZGRlblRleHRhcmVhLnZhbHVlID0gdGV4dGFyZWEudmFsdWUgfHwgcHJvcHMucGxhY2Vob2xkZXIgfHwgJ3gnO1xuICAgIGlmIChoaWRkZW5UZXh0YXJlYS52YWx1ZS5zbGljZSgtMSkgPT09ICdcXG4nKSB7XG4gICAgICAvLyBDZXJ0YWluIGZvbnRzIHdoaWNoIG92ZXJmbG93IHRoZSBsaW5lIGhlaWdodCB3aWxsIGNhdXNlIHRoZSB0ZXh0YXJlYVxuICAgICAgLy8gdG8gcmVwb3J0IGEgZGlmZmVyZW50IHNjcm9sbEhlaWdodCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFzdCBsaW5lXG4gICAgICAvLyBpcyBlbXB0eS4gTWFrZSBpdCBub24tZW1wdHkgdG8gYXZvaWQgdGhpcyBpc3N1ZS5cbiAgICAgIGhpZGRlblRleHRhcmVhLnZhbHVlICs9ICcgJztcbiAgICB9XG4gICAgY29uc3QgYm94U2l6aW5nID0gY29tcHV0ZWRTdHlsZS5ib3hTaXppbmc7XG4gICAgY29uc3QgcGFkZGluZyA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSArIGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKTtcbiAgICBjb25zdCBib3JkZXIgPSBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpICsgZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKTtcblxuICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIGlubmVyIGNvbnRlbnRcbiAgICBjb25zdCBpbm5lckhlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDtcblxuICAgIC8vIE1lYXN1cmUgaGVpZ2h0IG9mIGEgdGV4dGFyZWEgd2l0aCBhIHNpbmdsZSByb3dcbiAgICBoaWRkZW5UZXh0YXJlYS52YWx1ZSA9ICd4JztcbiAgICBjb25zdCBzaW5nbGVSb3dIZWlnaHQgPSBoaWRkZW5UZXh0YXJlYS5zY3JvbGxIZWlnaHQ7XG5cbiAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBvdXRlciBjb250ZW50XG4gICAgbGV0IG91dGVySGVpZ2h0ID0gaW5uZXJIZWlnaHQ7XG4gICAgaWYgKG1pblJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5tYXgoTnVtYmVyKG1pblJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuICAgIGlmIChtYXhSb3dzKSB7XG4gICAgICBvdXRlckhlaWdodCA9IE1hdGgubWluKE51bWJlcihtYXhSb3dzKSAqIHNpbmdsZVJvd0hlaWdodCwgb3V0ZXJIZWlnaHQpO1xuICAgIH1cbiAgICBvdXRlckhlaWdodCA9IE1hdGgubWF4KG91dGVySGVpZ2h0LCBzaW5nbGVSb3dIZWlnaHQpO1xuXG4gICAgLy8gVGFrZSB0aGUgYm94IHNpemluZyBpbnRvIGFjY291bnQgZm9yIGFwcGx5aW5nIHRoaXMgdmFsdWUgYXMgYSBzdHlsZS5cbiAgICBjb25zdCBvdXRlckhlaWdodFN0eWxlID0gb3V0ZXJIZWlnaHQgKyAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcgPyBwYWRkaW5nICsgYm9yZGVyIDogMCk7XG4gICAgY29uc3Qgb3ZlcmZsb3dpbmcgPSBNYXRoLmFicyhvdXRlckhlaWdodCAtIGlubmVySGVpZ2h0KSA8PSAxO1xuICAgIHJldHVybiB7XG4gICAgICBvdXRlckhlaWdodFN0eWxlLFxuICAgICAgb3ZlcmZsb3dpbmdcbiAgICB9O1xuICB9LCBbbWF4Um93cywgbWluUm93cywgcHJvcHMucGxhY2Vob2xkZXJdKTtcbiAgY29uc3QgZGlkSGVpZ2h0Q2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSB0ZXh0YXJlYVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMoKTtcbiAgICBpZiAoIXRleHRhcmVhIHx8ICF0ZXh0YXJlYVN0eWxlcyB8fCBpc0VtcHR5KHRleHRhcmVhU3R5bGVzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvdXRlckhlaWdodFN0eWxlID0gdGV4dGFyZWFTdHlsZXMub3V0ZXJIZWlnaHRTdHlsZTtcbiAgICByZXR1cm4gaGVpZ2h0UmVmLmN1cnJlbnQgIT0gbnVsbCAmJiBoZWlnaHRSZWYuY3VycmVudCAhPT0gb3V0ZXJIZWlnaHRTdHlsZTtcbiAgfSk7XG4gIGNvbnN0IHN5bmNIZWlnaHQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSB0ZXh0YXJlYVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMoKTtcbiAgICBpZiAoIXRleHRhcmVhIHx8ICF0ZXh0YXJlYVN0eWxlcyB8fCBpc0VtcHR5KHRleHRhcmVhU3R5bGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXRlckhlaWdodFN0eWxlID0gdGV4dGFyZWFTdHlsZXMub3V0ZXJIZWlnaHRTdHlsZTtcbiAgICBpZiAoaGVpZ2h0UmVmLmN1cnJlbnQgIT09IG91dGVySGVpZ2h0U3R5bGUpIHtcbiAgICAgIGhlaWdodFJlZi5jdXJyZW50ID0gb3V0ZXJIZWlnaHRTdHlsZTtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke291dGVySGVpZ2h0U3R5bGV9cHhgO1xuICAgIH1cbiAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvdyA9IHRleHRhcmVhU3R5bGVzLm92ZXJmbG93aW5nID8gJ2hpZGRlbicgOiAnJztcbiAgfSwgW2NhbGN1bGF0ZVRleHRhcmVhU3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lUmVmID0gUmVhY3QudXNlUmVmKC0xKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGRlYm91bmNlZEhhbmRsZVJlc2l6ZSA9IGRlYm91bmNlKHN5bmNIZWlnaHQpO1xuICAgIGNvbnN0IHRleHRhcmVhID0gdGV4dGFyZWFSZWYgPT0gbnVsbCA/IHZvaWQgMCA6IHRleHRhcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCF0ZXh0YXJlYSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3codGV4dGFyZWEpO1xuICAgIGNvbnRhaW5lcldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBkZWJvdW5jZWRIYW5kbGVSZXNpemUpO1xuICAgIGxldCByZXNpemVPYnNlcnZlcjtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoZGlkSGVpZ2h0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9uc1wiIGVycm9yXG4gICAgICAgICAgLy8gYnkgdGVtcG9yYXJpbHkgdW5vYnNlcnZpbmcgdGhlIHRleHRhcmVhIGVsZW1lbnQgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBoZWlnaHRcbiAgICAgICAgICAvLyBhbmQgcmVvYnNlcnZpbmcgb25lIGZyYW1lIGxhdGVyXG4gICAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRleHRhcmVhKTtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZVJlZi5jdXJyZW50KTtcbiAgICAgICAgICBzeW5jSGVpZ2h0KCk7XG4gICAgICAgICAgZnJhbWVSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRleHRhcmVhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHRleHRhcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRlYm91bmNlZEhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnJhbWVSZWYuY3VycmVudCk7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkSGFuZGxlUmVzaXplKTtcbiAgICAgIGlmIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2NhbGN1bGF0ZVRleHRhcmVhU3R5bGVzLCBzeW5jSGVpZ2h0LCBkaWRIZWlnaHRDaGFuZ2VdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIHN5bmNIZWlnaHQoKTtcbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc3luY0hlaWdodCgpO1xuICAgIH1cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwgX2V4dGVuZHMoe1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICAvLyBBcHBseSB0aGUgcm93cyBwcm9wIHRvIGdldCBhIFwiY29ycmVjdFwiIGZpcnN0IFNTUiBwYWludFxuICAgICAgLFxuICAgICAgcm93czogbWluUm93cyxcbiAgICAgIHN0eWxlOiBzdHlsZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFwidGV4dGFyZWFcIiwge1xuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsXG4gICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgIHJlZjogaGlkZGVuVGV4dGFyZWFSZWYsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBzdHlsZTogX2V4dGVuZHMoe30sIHN0eWxlcy5zaGFkb3csIHN0eWxlLCB7XG4gICAgICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgICAgIHBhZGRpbmdCb3R0b206IDBcbiAgICAgIH0pXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0YXJlYUF1dG9zaXplLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dGFyZWFBdXRvc2l6ZTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBGb3JtQ29udHJvbENvbnRleHQuZGlzcGxheU5hbWUgPSAnRm9ybUNvbnRyb2xDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sQ29udGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ybUNvbnRyb2woKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250cm9sQ29udGV4dCk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIE11aUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyh7XG4gIHN0eWxlcyxcbiAgdGhlbWVJZCxcbiAgZGVmYXVsdFRoZW1lID0ge31cbn0pIHtcbiAgY29uc3QgdXBwZXJUaGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGNvbnN0IGdsb2JhbFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyBzdHlsZXModGhlbWVJZCA/IHVwcGVyVGhlbWVbdGhlbWVJZF0gfHwgdXBwZXJUaGVtZSA6IHVwcGVyVGhlbWUpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTXVpR2xvYmFsU3R5bGVzLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdFRoZW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0aGVtZUlkOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIFN5c3RlbUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi4vc3R5bGVzL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtR2xvYmFsU3R5bGVzLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0VGhlbWU6IGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIHN0eWxlcyB5b3Ugd2FudCB0byBhcHBseSBnbG9iYWxseS5cbiAgICovXG4gIHN0eWxlczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYm9vbF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsIi8vIFN1cHBvcnRzIGRldGVybWluYXRpb24gb2YgaXNDb250cm9sbGVkKCkuXG4vLyBDb250cm9sbGVkIGlucHV0IGFjY2VwdHMgaXRzIGN1cnJlbnQgdmFsdWUgYXMgYSBwcm9wLlxuLy9cbi8vIEBzZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50c1xuLy8gQHBhcmFtIHZhbHVlXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdHJpbmcgKGluY2x1ZGluZyAnJykgb3IgbnVtYmVyIChpbmNsdWRpbmcgemVybylcbmV4cG9ydCBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIERldGVybWluZSBpZiBmaWVsZCBpcyBlbXB0eSBvciBmaWxsZWQuXG4vLyBSZXNwb25zZSBkZXRlcm1pbmVzIGlmIGxhYmVsIGlzIHByZXNlbnRlZCBhYm92ZSBmaWVsZCBvciBhcyBwbGFjZWhvbGRlci5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcGFyYW0gU1NSXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBub3QgcHJlc2VudCBvciBlbXB0eSBzdHJpbmcuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFueSBudW1iZXIgb3Igc3RyaW5nIHdpdGggbGVuZ3RoLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsbGVkKG9iaiwgU1NSID0gZmFsc2UpIHtcbiAgcmV0dXJuIG9iaiAmJiAoaGFzVmFsdWUob2JqLnZhbHVlKSAmJiBvYmoudmFsdWUgIT09ICcnIHx8IFNTUiAmJiBoYXNWYWx1ZShvYmouZGVmYXVsdFZhbHVlKSAmJiBvYmouZGVmYXVsdFZhbHVlICE9PSAnJyk7XG59XG5cbi8vIERldGVybWluZSBpZiBhbiBJbnB1dCBpcyBhZG9ybmVkIG9uIHN0YXJ0LlxuLy8gSXQncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZWZ0IHdpdGggTFRSLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vIGFkb3JubWVudHMuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFkb3JuZWQgYXQgdGhlIHN0YXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzQWRvcm5lZFN0YXJ0KG9iaikge1xuICByZXR1cm4gb2JqLnN0YXJ0QWRvcm5tZW50O1xufSIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0QmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dEJhc2UnLCBbJ3Jvb3QnLCAnZm9ybUNvbnRyb2wnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdhZG9ybmVkU3RhcnQnLCAnYWRvcm5lZEVuZCcsICdlcnJvcicsICdzaXplU21hbGwnLCAnbXVsdGlsaW5lJywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2Z1bGxXaWR0aCcsICdoaWRkZW5MYWJlbCcsICdyZWFkT25seScsICdpbnB1dCcsICdpbnB1dFNpemVTbWFsbCcsICdpbnB1dE11bHRpbGluZScsICdpbnB1dFR5cGVTZWFyY2gnLCAnaW5wdXRBZG9ybmVkU3RhcnQnLCAnaW5wdXRBZG9ybmVkRW5kJywgJ2lucHV0SGlkZGVuTGFiZWwnXSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dEJhc2VDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlc1wiLCBcImVuZEFkb3JubWVudFwiLCBcImVycm9yXCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm1hcmdpblwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcIm9uRm9jdXNcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclN1ZmZpeFwiLCBcInJvd3NcIiwgXCJzaXplXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJzdGFydEFkb3JubWVudFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNIb3N0Q29tcG9uZW50JztcbmltcG9ydCBUZXh0YXJlYUF1dG9zaXplIGZyb20gJy4uL1RleHRhcmVhQXV0b3NpemUnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4uL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBpbnB1dEJhc2VDbGFzc2VzLCB7IGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRCYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IHJvb3RPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRFbmQsIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLm11bHRpbGluZSwgb3duZXJTdGF0ZS5jb2xvciAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5oaWRkZW5MYWJlbF07XG59O1xuZXhwb3J0IGNvbnN0IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLmlucHV0LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLmlucHV0U2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMuaW5wdXRNdWx0aWxpbmUsIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYgc3R5bGVzLmlucHV0VHlwZVNlYXJjaCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRFbmQsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmlucHV0SGlkZGVuTGFiZWxdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmb2N1c2VkLFxuICAgIGZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVhZE9ubHksXG4gICAgc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsIHNpemUgJiYgc2l6ZSAhPT0gJ21lZGl1bScgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgbXVsdGlsaW5lICYmICdtdWx0aWxpbmUnLCBzdGFydEFkb3JubWVudCAmJiAnYWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdhZG9ybmVkRW5kJywgaGlkZGVuTGFiZWwgJiYgJ2hpZGRlbkxhYmVsJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCB0eXBlID09PSAnc2VhcmNoJyAmJiAnaW5wdXRUeXBlU2VhcmNoJywgbXVsdGlsaW5lICYmICdpbnB1dE11bHRpbGluZScsIHNpemUgPT09ICdzbWFsbCcgJiYgJ2lucHV0U2l6ZVNtYWxsJywgaGlkZGVuTGFiZWwgJiYgJ2lucHV0SGlkZGVuTGFiZWwnLCBzdGFydEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZEVuZCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogcm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgLy8gMjNweFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggZnVsbFdpZHRoLlxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgY3Vyc29yOiAndGV4dCcsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnNHB4IDAgNXB4J1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMVxufSksIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZUNvbXBvbmVudCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gX2V4dGVuZHMoe1xuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH0sIHtcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlckhpZGRlbiA9IHtcbiAgICBvcGFjaXR5OiAnMCAhaW1wb3J0YW50J1xuICB9O1xuICBjb25zdCBwbGFjZWhvbGRlclZpc2libGUgPSB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZm9udDogJ2luaGVyaXQnLFxuICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0JyxcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgcGFkZGluZzogJzRweCAwIDVweCcsXG4gICAgYm9yZGVyOiAwLFxuICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgaGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlc2V0IDIzcHh0aGUgbmF0aXZlIGlucHV0IGxpbmUtaGVpZ2h0XG4gICAgbWFyZ2luOiAwLFxuICAgIC8vIFJlc2V0IGZvciBTYWZhcmlcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIC8vIE1ha2UgdGhlIGZsZXggaXRlbSBzaHJpbmsgd2l0aCBGaXJlZm94XG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICAvLyBGaXggSUUxMSB3aWR0aCBpc3N1ZVxuICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsLWNhbmNlbCcsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246ICcxMG1zJyxcbiAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRmlyZWZveCAxOStcbiAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBJRTExXG4gICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEVkZ2VcbiAgICAnJjpmb2N1cyc6IHtcbiAgICAgIG91dGxpbmU6IDBcbiAgICB9LFxuICAgIC8vIFJlc2V0IEZpcmVmb3ggaW52YWxpZCByZXF1aXJlZCBpbnB1dCBzdHlsZVxuICAgICcmOmludmFsaWQnOiB7XG4gICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgIH0sXG4gICAgJyY6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24nOiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgd2hlbiB0eXBlPXNlYXJjaC5cbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJ1xuICAgIH0sXG4gICAgLy8gU2hvdyBhbmQgaGlkZSB0aGUgcGxhY2Vob2xkZXIgbG9naWNcbiAgICBbYGxhYmVsW2RhdGEtc2hyaW5rPWZhbHNlXSArIC4ke2lucHV0QmFzZUNsYXNzZXMuZm9ybUNvbnRyb2x9ICZgXToge1xuICAgICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBJRTExXG4gICAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBFZGdlXG4gICAgICAnJjpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgICcmOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUgLy8gRWRnZVxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIC8vIFJlc2V0IGlPUyBvcGFjaXR5XG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkIC8vIEZpeCBvcGFjaXR5IFNhZmFyaSBidWdcbiAgICB9LFxuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbjogJzUwMDBzJyxcbiAgICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHBhZGRpbmdUb3A6IDBcbiAgfSwgb3duZXJTdGF0ZS50eXBlID09PSAnc2VhcmNoJyAmJiB7XG4gICAgLy8gSW1wcm92ZSB0eXBlIHNlYXJjaCBzdHlsZS5cbiAgICBNb3pBcHBlYXJhbmNlOiAndGV4dGZpZWxkJ1xuICB9KTtcbn0pO1xuY29uc3QgaW5wdXRHbG9iYWxTdHlsZXMgPSAvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgc3R5bGVzOiB7XG4gICAgJ0BrZXlmcmFtZXMgbXVpLWF1dG8tZmlsbCc6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0BrZXlmcmFtZXMgbXVpLWF1dG8tZmlsbC1jYW5jZWwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIGBJbnB1dEJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhbiBpbnB1dC5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBzdGF0ZSBsb2dpYy5cbiAqL1xuY29uc3QgSW5wdXRCYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXRCYXNlKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RQcm9wcyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dEJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIGF1dG9Db21wbGV0ZSxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzLFxuICAgICAgZW5kQWRvcm5tZW50LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpZCxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNQcm9wID0ge30sXG4gICAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZW5kZXJTdWZmaXgsXG4gICAgICByb3dzLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgICB0eXBlID0gJ3RleHQnLFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB2YWx1ZSA9IGlucHV0UHJvcHNQcm9wLnZhbHVlICE9IG51bGwgPyBpbnB1dFByb3BzUHJvcC52YWx1ZSA6IHZhbHVlUHJvcDtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKHZhbHVlICE9IG51bGwpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZldhcm5pbmcgPSBSZWFjdC51c2VDYWxsYmFjayhpbnN0YW5jZSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5ub2RlTmFtZSAhPT0gJ0lOUFVUJyAmJiAhaW5zdGFuY2UuZm9jdXMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgYSBgaW5wdXRDb21wb25lbnRgIHRvIHRoZSBpbnB1dCBjb21wb25lbnQnLCAndGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgcmVmYCBwcm9wLicsICdNYWtlIHN1cmUgdGhlIGByZWZgIHByb3AgaXMgY2FsbGVkIHdpdGggYSBIVE1MSW5wdXRFbGVtZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VGb3JrUmVmKGlucHV0UmVmLCBpbnB1dFJlZlByb3AsIGlucHV0UHJvcHNQcm9wLnJlZiwgaGFuZGxlSW5wdXRSZWZXYXJuaW5nKTtcbiAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gbXVpRm9ybUNvbnRyb2wucmVnaXN0ZXJFZmZlY3QoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSwgW211aUZvcm1Db250cm9sXSk7XG4gIH1cbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2hpZGRlbkxhYmVsJywgJ3NpemUnLCAncmVxdWlyZWQnLCAnZmlsbGVkJ11cbiAgfSk7XG4gIGZjcy5mb2N1c2VkID0gbXVpRm9ybUNvbnRyb2wgPyBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIDogZm9jdXNlZDtcblxuICAvLyBUaGUgYmx1ciB3b24ndCBmaXJlIHdoZW4gdGhlIGRpc2FibGVkIHN0YXRlIGlzIHNldCBvbiBhIGZvY3VzZWQgaW5wdXQuXG4gIC8vIFdlIG5lZWQgdG8gYm9vayBrZWVwIHRoZSBmb2N1c2VkIHN0YXRlIG1hbnVhbGx5LlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbXVpRm9ybUNvbnRyb2wgJiYgZGlzYWJsZWQgJiYgZm9jdXNlZCkge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICBpZiAob25CbHVyKSB7XG4gICAgICAgIG9uQmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW211aUZvcm1Db250cm9sLCBkaXNhYmxlZCwgZm9jdXNlZCwgb25CbHVyXSk7XG4gIGNvbnN0IG9uRmlsbGVkID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25GaWxsZWQ7XG4gIGNvbnN0IG9uRW1wdHkgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkVtcHR5O1xuICBjb25zdCBjaGVja0RpcnR5ID0gUmVhY3QudXNlQ2FsbGJhY2sob2JqID0+IHtcbiAgICBpZiAoaXNGaWxsZWQob2JqKSkge1xuICAgICAgaWYgKG9uRmlsbGVkKSB7XG4gICAgICAgIG9uRmlsbGVkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkVtcHR5KSB7XG4gICAgICBvbkVtcHR5KCk7XG4gICAgfVxuICB9LCBbb25GaWxsZWQsIG9uRW1wdHldKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNoZWNrRGlydHkoe1xuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbdmFsdWUsIGNoZWNrRGlydHksIGlzQ29udHJvbGxlZF0pO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICAvLyBGaXggYSBidWcgd2l0aCBJRTExIHdoZXJlIHRoZSBmb2N1cy9ibHVyIGV2ZW50cyBhcmUgdHJpZ2dlcmVkXG4gICAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICBpZiAoZmNzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25Gb2N1cykge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQmx1cikge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25CbHVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uQmx1cikge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25CbHVyKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnQsIC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCB8fCBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogRXhwZWN0ZWQgdmFsaWQgaW5wdXQgdGFyZ2V0LiBEaWQgeW91IHVzZSBhIGN1c3RvbSBcXGBpbnB1dENvbXBvbmVudFxcYCBhbmQgZm9yZ2V0IHRvIGZvcndhcmQgcmVmcz8gU2VlIGh0dHBzOi8vbXVpLmNvbS9yL2lucHV0LWNvbXBvbmVudC1yZWYtaW50ZXJmYWNlIGZvciBtb3JlIGluZm8uYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMSkpO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlOiBlbGVtZW50LnZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBpbiB0aGUgd2lsbFVwZGF0ZVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfTtcblxuICAvLyBDaGVjayB0aGUgaW5wdXQgc3RhdGUgb24gbW91bnQsIGluIGNhc2UgaXQgd2FzIGZpbGxlZCBieSB0aGUgdXNlclxuICAvLyBvciBhdXRvIGZpbGxlZCBieSB0aGUgYnJvd3NlciBiZWZvcmUgdGhlIGh5ZHJhdGlvbiAoZm9yIFNTUikuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hlY2tEaXJ0eShpbnB1dFJlZi5jdXJyZW50KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBldmVudCA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGxldCBJbnB1dENvbXBvbmVudCA9IGlucHV0Q29tcG9uZW50O1xuICBsZXQgaW5wdXRQcm9wcyA9IGlucHV0UHJvcHNQcm9wO1xuICBpZiAobXVsdGlsaW5lICYmIElucHV0Q29tcG9uZW50ID09PSAnaW5wdXQnKSB7XG4gICAgaWYgKHJvd3MpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtaW5Sb3dzIHx8IG1heFJvd3MpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ01VSTogWW91IGNhbiBub3QgdXNlIHRoZSBgbWluUm93c2Agb3IgYG1heFJvd3NgIHByb3BzIHdoZW4gdGhlIGlucHV0IGByb3dzYCBwcm9wIGlzIHNldC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtaW5Sb3dzOiByb3dzLFxuICAgICAgICBtYXhSb3dzOiByb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICBtYXhSb3dzLFxuICAgICAgICBtaW5Sb3dzXG4gICAgICB9LCBpbnB1dFByb3BzKTtcbiAgICB9XG4gICAgSW5wdXRDb21wb25lbnQgPSBUZXh0YXJlYUF1dG9zaXplO1xuICB9XG4gIGNvbnN0IGhhbmRsZUF1dG9GaWxsID0gZXZlbnQgPT4ge1xuICAgIC8vIFByb3ZpZGUgYSBmYWtlIHZhbHVlIGFzIENocm9tZSBtaWdodCBub3QgbGV0IHlvdSBhY2Nlc3MgaXQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4gICAgY2hlY2tEaXJ0eShldmVudC5hbmltYXRpb25OYW1lID09PSAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnID8gaW5wdXRSZWYuY3VycmVudCA6IHtcbiAgICAgIHZhbHVlOiAneCdcbiAgICB9KTtcbiAgfTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLnNldEFkb3JuZWRTdGFydChCb29sZWFuKHN0YXJ0QWRvcm5tZW50KSk7XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIHN0YXJ0QWRvcm5tZW50XSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBSb290ID0gc2xvdHMucm9vdCB8fCBjb21wb25lbnRzLlJvb3QgfHwgSW5wdXRCYXNlUm9vdDtcbiAgY29uc3Qgcm9vdFByb3BzID0gc2xvdFByb3BzLnJvb3QgfHwgY29tcG9uZW50c1Byb3BzLnJvb3QgfHwge307XG4gIGNvbnN0IElucHV0ID0gc2xvdHMuaW5wdXQgfHwgY29tcG9uZW50cy5JbnB1dCB8fCBJbnB1dEJhc2VDb21wb25lbnQ7XG4gIGlucHV0UHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgKF9zbG90UHJvcHMkaW5wdXQgPSBzbG90UHJvcHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdFByb3BzJGlucHV0IDogY29tcG9uZW50c1Byb3BzLmlucHV0KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbIWRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMgJiYgaW5wdXRHbG9iYWxTdHlsZXMsIC8qI19fUFVSRV9fKi9fanN4cyhSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3QpICYmIHtcbiAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290UHJvcHMub3duZXJTdGF0ZSlcbiAgICB9LCB7XG4gICAgICByZWY6IHJlZixcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUNsaWNrXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIHJvb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgY2hpbGRyZW46IFtzdGFydEFkb3JubWVudCwgLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGZjcy5lcnJvcixcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9uQW5pbWF0aW9uU3RhcnQ6IGhhbmRsZUF1dG9GaWxsLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgICAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgICAgICAgIHJvd3M6IHJvd3MsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICAgICAgdHlwZTogdHlwZVxuICAgICAgICB9LCBpbnB1dFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KElucHV0KSAmJiB7XG4gICAgICAgICAgYXM6IElucHV0Q29tcG9uZW50LFxuICAgICAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBpbnB1dFByb3BzLm93bmVyU3RhdGUpXG4gICAgICAgIH0sIHtcbiAgICAgICAgICByZWY6IGhhbmRsZUlucHV0UmVmLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmlucHV0LCBpbnB1dFByb3BzLmNsYXNzTmFtZSwgcmVhZE9ubHkgJiYgJ011aUlucHV0QmFzZS1yZWFkT25seScpLFxuICAgICAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzXG4gICAgICAgIH0pKVxuICAgICAgfSksIGVuZEFkb3JubWVudCwgcmVuZGVyU3VmZml4ID8gcmVuZGVyU3VmZml4KF9leHRlbmRzKHt9LCBmY3MsIHtcbiAgICAgICAgc3RhcnRBZG9ybm1lbnRcbiAgICAgIH0pKSA6IG51bGxdXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRCYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBHbG9iYWxTdHlsZXMgZm9yIHRoZSBhdXRvLWZpbGwga2V5ZnJhbWVzIHdpbGwgbm90IGJlIGluamVjdGVkL3JlbW92ZWQgb24gbW91bnQvdW5tb3VudC4gTWFrZSBzdXJlIHRvIGluamVjdCB0aGVtIGF0IHRoZSB0b3Agb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAgICogVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgdG8gaGVscCB3aXRoIGJvb3N0aW5nIHRoZSBpbml0aWFsIHJlbmRlcmluZyBwZXJmb3JtYW5jZSBpZiB5b3UgYXJlIGxvYWRpbmcgYSBiaWcgYW1vdW50IG9mIElucHV0IGNvbXBvbmVudHMgYXQgb25jZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGlzIGJsdXJyZWQuXG4gICAqXG4gICAqIE5vdGljZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCAoZXZlbnQpIG1pZ2h0IGJlIHVuZGVmaW5lZC5cbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYGlucHV0YCBkb2Vzbid0IHNhdGlzZnkgaXRzIGNvbnN0cmFpbnRzLlxuICAgKi9cbiAgb25JbnZhbGlkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVuZGVyU3VmZml4OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRCYXNlOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGlucHV0Q2xhc3NlcywgeyBnZXRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBpZiAodGhlbWUudmFycykge1xuICAgIGJvdHRvbUxpbmVDb2xvciA9IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJi4ke2lucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOjpiZWZvcmUsICY6OmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2lucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBkaXNhYmxlVW5kZXJsaW5lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHNQcm9wLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSB7XG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9O1xuICBjb25zdCBpbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfVxuICB9O1xuICBjb25zdCBjb21wb25lbnRzUHJvcHMgPSAoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wKSA/IGRlZXBtZXJnZShzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3AsIGlucHV0Q29tcG9uZW50c1Byb3BzKSA6IGlucHV0Q29tcG9uZW50c1Byb3BzO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczogY29tcG9uZW50c1Byb3BzLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIG5vdCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICovXG4gIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5JbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IElucHV0OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGaWxsZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgZmlsbGVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZpbGxlZElucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBmaWxsZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibXVsdGlsaW5lXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgZmlsbGVkSW5wdXRDbGFzc2VzLCB7IGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9maWxsZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgRmlsbGVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3BhbGV0dGU7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDYpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpJztcbiAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA5KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEzKSc7XG4gIGNvbnN0IGRpc2FibGVkQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4xMiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmhvdmVyQmcgOiBob3ZlckJhY2tncm91bmQsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmRpc2FibGVkQmcgOiBkaXNhYmxlZEJhY2tncm91bmRcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAkeyhfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3IgfHwgJ3ByaW1hcnknXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW59YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfTphZnRlcmBdOiB7XG4gICAgICAvLyB0cmFuc2xhdGVYKDApIGlzIGEgd29ya2Fyb3VuZCBmb3IgU2FmYXJpIHRyYW5zZm9ybSBzY2FsZSBidWdcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMTc2NlxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCknXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICAgICcmOjpiZWZvcmUsICY6OmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke3RoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFVuZGVybGluZX0pYCA6IGJvdHRvbUxpbmVDb2xvcn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcXFxcMDBhMFwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JvcmRlci1ib3R0b20tY29sb3InLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyXG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCY6aG92ZXI6bm90KC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YFxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTJcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTJcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcyNXB4IDEycHggOHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDIxLFxuICAgIHBhZGRpbmdCb3R0b206IDRcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gICAgcGFkZGluZ1RvcDogMTYsXG4gICAgcGFkZGluZ0JvdHRvbTogMTdcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDgsXG4gICAgcGFkZGluZ0JvdHRvbTogOVxuICB9KSk7XG59KTtcbmNvbnN0IEZpbGxlZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmdUb3A6IDI1LFxuICBwYWRkaW5nUmlnaHQ6IDEyLFxuICBwYWRkaW5nQm90dG9tOiA4LFxuICBwYWRkaW5nTGVmdDogMTJcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAyMSxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gIHBhZGRpbmdUb3A6IDE2LFxuICBwYWRkaW5nQm90dG9tOiAxN1xufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA5XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDAsXG4gIHBhZGRpbmdCb3R0b206IDAsXG4gIHBhZGRpbmdMZWZ0OiAwLFxuICBwYWRkaW5nUmlnaHQ6IDBcbn0pKTtcbmNvbnN0IEZpbGxlZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRmlsbGVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2UoZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMsIHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBGaWxsZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IEZpbGxlZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwibm90Y2hlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZCgnZmllbGRzZXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBib3R0b206IDAsXG4gIHJpZ2h0OiAwLFxuICB0b3A6IC01LFxuICBsZWZ0OiAwLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6ICcwIDhweCcsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCcsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJXaWR0aDogMSxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBtaW5XaWR0aDogJzAlJ1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZUxlZ2VuZCA9IHN0eWxlZCgnbGVnZW5kJywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBmbG9hdDogJ3Vuc2V0JyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIHdpZHRoOiAnYXV0bycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICBvdmVyZmxvdzogJ2hpZGRlbidcbn0sICFvd25lclN0YXRlLndpdGhMYWJlbCAmJiB7XG4gIHBhZGRpbmc6IDAsXG4gIGxpbmVIZWlnaHQ6ICcxMXB4JyxcbiAgLy8gc3luYyB3aXRoIGBoZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3dpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYgX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBub3JtYWxpemUuY3NzIGFuZCBzYW5pdGl6ZS5jc3NcbiAgcGFkZGluZzogMCxcbiAgaGVpZ2h0OiAxMSxcbiAgLy8gc3luYyB3aXRoIGBsaW5lSGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgZm9udFNpemU6ICcwLjc1ZW0nLFxuICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgbWF4V2lkdGg6IDAuMDEsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiA1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgJyYgPiBzcGFuJzoge1xuICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgIHBhZGRpbmdSaWdodDogNSxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICB9XG59LCBvd25lclN0YXRlLm5vdGNoZWQgJiYge1xuICBtYXhXaWR0aDogJzEwMCUnLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXQsXG4gICAgZGVsYXk6IDUwXG4gIH0pXG59KSkpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vdGNoZWRPdXRsaW5lKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgbm90Y2hlZFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB3aXRoTGFiZWwgPSBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG5vdGNoZWQsXG4gICAgd2l0aExhYmVsXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVMZWdlbmQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogd2l0aExhYmVsID8gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSA6IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSlcbiAgICB9KVxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOb3RjaGVkT3V0bGluZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpT3V0bGluZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3Qgb3V0bGluZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpT3V0bGluZWRJbnB1dCcsIFsncm9vdCcsICdub3RjaGVkT3V0bGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBvdXRsaW5lZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJsYWJlbFwiLCBcIm11bHRpbGluZVwiLCBcIm5vdGNoZWRcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBOb3RjaGVkT3V0bGluZSBmcm9tICcuL05vdGNoZWRPdXRsaW5lJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgb3V0bGluZWRJbnB1dENsYXNzZXMsIHsgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vb3V0bGluZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSwgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBub3RjaGVkT3V0bGluZTogWydub3RjaGVkT3V0bGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgT3V0bGluZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxuICAgIH0sXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZm9jdXNlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgICAgYm9yZGVyV2lkdGg6IDJcbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmVycm9yfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDE0XG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDE0XG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogJzguNXB4IDE0cHgnXG4gIH0pKTtcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKE5vdGNoZWRPdXRsaW5lLCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ05vdGNoZWRPdXRsaW5lJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubm90Y2hlZE91dGxpbmVcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgfTtcbn0pO1xuY29uc3QgT3V0bGluZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nOiAnOC41cHggMTRweCdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZzogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgT3V0bGluZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE91dGxpbmVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dCwgX1JlYWN0JEZyYWdtZW50O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGxhYmVsLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBub3RjaGVkLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZm9jdXNlZCcsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE91dGxpbmVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBPdXRsaW5lZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICByZW5kZXJTdWZmaXg6IHN0YXRlID0+IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5ub3RjaGVkT3V0bGluZSxcbiAgICAgIGxhYmVsOiBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiBmY3MucmVxdWlyZWQgPyBfUmVhY3QkRnJhZ21lbnQgfHwgKF9SZWFjdCRGcmFnbWVudCA9IC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW2xhYmVsLCBcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSkpIDogbGFiZWwsXG4gICAgICBub3RjaGVkOiB0eXBlb2Ygbm90Y2hlZCAhPT0gJ3VuZGVmaW5lZCcgPyBub3RjaGVkIDogQm9vbGVhbihzdGF0ZS5zdGFydEFkb3JubWVudCB8fCBzdGF0ZS5maWxsZWQgfHwgc3RhdGUuZm9jdXNlZClcbiAgICB9KSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBjbGFzc2VzLCB7XG4gICAgICBub3RjaGVkT3V0bGluZTogbnVsbFxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gT3V0bGluZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhlIGBpbnB1dGAuIEl0IGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0LiBUaGUgYWN0dWFsIGxhYmVsbGluZ1xuICAgKiBpcyBoYW5kbGVkIGJ5IGBJbnB1dExhYmVsYC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbk91dGxpbmVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBPdXRsaW5lZElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUxhYmVsJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnbGFiZWwnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZpbGxlZDogZmNzLmZpbGxlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUxhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZmNzLnJlcXVpcmVkICYmIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgIGNoaWxkcmVuOiBbXCJcXHUyMDA5XCIsICcqJ11cbiAgICB9KV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtTGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgc2hvdWxkIHVzZSBmaWxsZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmaWxsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgb2YgdGhpcyBsYWJlbCBpcyBmb2N1c2VkICh1c2VkIGJ5IGBGb3JtR3JvdXBgIGNvbXBvbmVudHMpLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtTGFiZWw7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSkpO1xuY29uc3QgSW5wdXRMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0TGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVBbmltYXRpb24gPSBmYWxzZSxcbiAgICAgIHNocmluazogc2hyaW5rUHJvcCxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGxldCBzaHJpbmsgPSBzaHJpbmtQcm9wO1xuICBpZiAodHlwZW9mIHNocmluayA9PT0gJ3VuZGVmaW5lZCcgJiYgbXVpRm9ybUNvbnRyb2wpIHtcbiAgICBzaHJpbmsgPSBtdWlGb3JtQ29udHJvbC5maWxsZWQgfHwgbXVpRm9ybUNvbnRyb2wuZm9jdXNlZCB8fCBtdWlGb3JtQ29udHJvbC5hZG9ybmVkU3RhcnQ7XG4gIH1cbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3NpemUnLCAndmFyaWFudCcsICdyZXF1aXJlZCcsICdmb2N1c2VkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlQW5pbWF0aW9uLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBzaHJpbmssXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgdmFyaWFudDogZmNzLnZhcmlhbnQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZCxcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtc2hyaW5rXCI6IHNocmluayxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRMYWJlbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlcnJvcicsICdpbmZvJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdHJhbnNpdGlvbiBhbmltYXRpb24gaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQW5pbWF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgb2YgdGhpcyBsYWJlbCBpcyBmb2N1c2VkLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJ10pLFxuICAvKipcbiAgICogaWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgc2hydW5rLlxuICAgKi9cbiAgc2hyaW5rOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdub3JtYWwnXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ25vcm1hbCcsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXRMYWJlbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmb2N1c2VkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInNpemVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGlzRmlsbGVkLCBpc0Fkb3JuZWRTdGFydCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBtYXJnaW4sXG4gICAgZnVsbFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXJnaW4gIT09ICdub25lJyAmJiBgbWFyZ2luJHtjYXBpdGFsaXplKG1hcmdpbil9YCwgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1Db250cm9sUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXJnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5tYXJnaW4pfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoKTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIC8vIFJlc2V0IGZpZWxkc2V0IGRlZmF1bHQgc3R5bGUuXG4gIG1pbldpZHRoOiAwLFxuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIGJvcmRlcjogMCxcbiAgdmVydGljYWxBbGlnbjogJ3RvcCdcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnbm9ybWFsJyAmJiB7XG4gIG1hcmdpblRvcDogMTYsXG4gIG1hcmdpbkJvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdkZW5zZScgJiYge1xuICBtYXJnaW5Ub3A6IDgsXG4gIG1hcmdpbkJvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBzdWNoIGFzIGZpbGxlZC9mb2N1c2VkL2Vycm9yL3JlcXVpcmVkIGZvciBmb3JtIGlucHV0cy5cbiAqIFJlbHlpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXMgaGlnaCBmbGV4aWJpbGl0eSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdGF0ZSBhbHdheXMgc3RheXNcbiAqIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjaGlsZHJlbiBvZiB0aGUgYEZvcm1Db250cm9sYC5cbiAqIFRoaXMgY29udGV4dCBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAgLSBGb3JtTGFiZWxcbiAqICAtIEZvcm1IZWxwZXJUZXh0XG4gKiAgLSBJbnB1dFxuICogIC0gSW5wdXRMYWJlbFxuICpcbiAqIFlvdSBjYW4gZmluZCBvbmUgY29tcG9zaXRpb24gZXhhbXBsZSBiZWxvdyBhbmQgbW9yZSBnb2luZyB0byBbdGhlIGRlbW9zXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dC1maWVsZC8jY29tcG9uZW50cykuXG4gKlxuICogYGBganN4XG4gKiA8Rm9ybUNvbnRyb2w+XG4gKiAgIDxJbnB1dExhYmVsIGh0bWxGb3I9XCJteS1pbnB1dFwiPkVtYWlsIGFkZHJlc3M8L0lucHV0TGFiZWw+XG4gKiAgIDxJbnB1dCBpZD1cIm15LWlucHV0XCIgYXJpYS1kZXNjcmliZWRieT1cIm15LWhlbHBlci10ZXh0XCIgLz5cbiAqICAgPEZvcm1IZWxwZXJUZXh0IGlkPVwibXktaGVscGVyLXRleHRcIj5XZSdsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsLjwvRm9ybUhlbHBlclRleHQ+XG4gKiA8L0Zvcm1Db250cm9sPlxuICogYGBgXG4gKlxuICog4pqg77iPIE9ubHkgb25lIGBJbnB1dEJhc2VgIGNhbiBiZSB1c2VkIHdpdGhpbiBhIEZvcm1Db250cm9sIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLlxuICogRm9yIGluc3RhbmNlLCBvbmx5IG9uZSBpbnB1dCBjYW4gYmUgZm9jdXNlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgc3RhdGUgc2hvdWxkbid0IGJlIHNoYXJlZC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUhlbHBlclRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1IZWxwZXJUZXh0JywgWydyb290JywgJ2Vycm9yJywgJ2Rpc2FibGVkJywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJywgJ2NvbnRhaW5lZCcsICdmb2N1c2VkJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcywgeyBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtSGVscGVyVGV4dENsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lZCxcbiAgICBzaXplLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICBmb2N1c2VkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBzaXplICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGNvbnRhaW5lZCAmJiAnY29udGFpbmVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZpbGxlZCAmJiAnZmlsbGVkJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtSGVscGVyVGV4dFJvb3QgPSBzdHlsZWQoJ3AnLCB7XG4gIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgJiYgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHN0eWxlcy5jb250YWluZWQsIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWRdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbiwge1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgbWFyZ2luVG9wOiAzLFxuICBtYXJnaW5SaWdodDogMCxcbiAgbWFyZ2luQm90dG9tOiAwLFxuICBtYXJnaW5MZWZ0OiAwLFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5Ub3A6IDRcbn0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHtcbiAgbWFyZ2luTGVmdDogMTQsXG4gIG1hcmdpblJpZ2h0OiAxNFxufSkpO1xuY29uc3QgRm9ybUhlbHBlclRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtSGVscGVyVGV4dChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3AnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnc2l6ZScsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAnZm9jdXNlZCcsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGNvbnRhaW5lZDogZmNzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IGZjcy52YXJpYW50ID09PSAnb3V0bGluZWQnLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPT09ICcgJyA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgfSkpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtSGVscGVyVGV4dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBgJyAnYCBpcyBwcm92aWRlZCwgdGhlIGNvbXBvbmVudCByZXNlcnZlcyBvbmUgbGluZSBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgYSBmdXR1cmUgbWVzc2FnZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZm9jdXNlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgcmVxdWlyZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUhlbHBlclRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHJlZiBvZiBhIFJlYWN0IGVsZW1lbnQgaGFuZGxpbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiBSZWFjdCAxOSBhbmQgb2xkZXIgdmVyc2lvbnMuXG4gKiBJdCB3aWxsIHRocm93IHJ1bnRpbWUgZXJyb3IgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgUmVhY3QgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCBSZWFjdC5SZWFjdEVsZW1lbnRcbiAqIEByZXR1cm5zIFJlYWN0LlJlZjxhbnk+IHwgbnVsbFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRSZWFjdEVsZW1lbnRSZWYoZWxlbWVudCkge1xuICAvLyAncmVmJyBpcyBwYXNzZWQgYXMgcHJvcCBpbiBSZWFjdCAxOSwgd2hlcmVhcyAncmVmJyBpcyBkaXJlY3RseSBhdHRhY2hlZCB0byBjaGlsZHJlbiBpbiBvbGRlciB2ZXJzaW9uc1xuICBpZiAocGFyc2VJbnQoUmVhY3QudmVyc2lvbiwgMTApID49IDE5KSB7XG4gICAgdmFyIF9lbGVtZW50JHByb3BzO1xuICAgIHJldHVybiAoZWxlbWVudCA9PSBudWxsIHx8IChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRwcm9wcy5yZWYpIHx8IG51bGw7XG4gIH1cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBlbGVtZW50LnJlZiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIFJlYWN0RWxlbWVudCB0eXBlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2Rpc2N1c3Npb25zLzcwMTg5XG4gIHJldHVybiAoZWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogZWxlbWVudC5yZWYpIHx8IG51bGw7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSdGxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmZ1bmN0aW9uIFJ0bFByb3ZpZGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIHZhbHVlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUnRsQ29udGV4dC5Qcm92aWRlciwgX2V4dGVuZHMoe1xuICAgIHZhbHVlOiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiB0cnVlXG4gIH0sIHByb3BzKSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSdGxQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdmFsdWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGNvbnN0IHVzZVJ0bCA9ICgpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KFJ0bENvbnRleHQpO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogZmFsc2U7XG59O1xuZXhwb3J0IGRlZmF1bHQgUnRsUHJvdmlkZXI7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgaXNIb3N0Q29tcG9uZW50IGZyb20gJy4uL2lzSG9zdENvbXBvbmVudCc7XG5cbi8qKlxuICogVHlwZSBvZiB0aGUgb3duZXJTdGF0ZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IGl0IGFwcGxpZXMgdG8uXG4gKiBUaGlzIHJlc29sdmVzIHRvIHRoZSBwcm92aWRlZCBPd25lclN0YXRlIGZvciBSZWFjdCBjb21wb25lbnRzIGFuZCBgdW5kZWZpbmVkYCBmb3IgaG9zdCBjb21wb25lbnRzLlxuICogRmFsbHMgYmFjayB0byBgT3duZXJTdGF0ZSB8IHVuZGVmaW5lZGAgd2hlbiB0aGUgZXhhY3QgdHlwZSBjYW4ndCBiZSBkZXRlcm1pbmVkIGluIGRldmVsb3BtZW50IHRpbWUuXG4gKi9cblxuLyoqXG4gKiBBcHBlbmRzIHRoZSBvd25lclN0YXRlIG9iamVjdCB0byB0aGUgcHJvcHMsIG1lcmdpbmcgd2l0aCB0aGUgZXhpc3Rpbmcgb25lIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudFR5cGUgVHlwZSBvZiB0aGUgZWxlbWVudCB0aGF0IG93bnMgdGhlIGBleGlzdGluZ1Byb3BzYC4gSWYgdGhlIGVsZW1lbnQgaXMgYSBET00gbm9kZSBvciB1bmRlZmluZWQsIGBvd25lclN0YXRlYCBpcyBub3QgYXBwbGllZC5cbiAqIEBwYXJhbSBvdGhlclByb3BzIFByb3BzIG9mIHRoZSBlbGVtZW50LlxuICogQHBhcmFtIG93bmVyU3RhdGVcbiAqL1xuZnVuY3Rpb24gYXBwZW5kT3duZXJTdGF0ZShlbGVtZW50VHlwZSwgb3RoZXJQcm9wcywgb3duZXJTdGF0ZSkge1xuICBpZiAoZWxlbWVudFR5cGUgPT09IHVuZGVmaW5lZCB8fCBpc0hvc3RDb21wb25lbnQoZWxlbWVudFR5cGUpKSB7XG4gICAgcmV0dXJuIG90aGVyUHJvcHM7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG90aGVyUHJvcHMub3duZXJTdGF0ZSwgb3duZXJTdGF0ZSlcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBhcHBlbmRPd25lclN0YXRlOyIsIi8qKlxuICogRXh0cmFjdHMgZXZlbnQgaGFuZGxlcnMgZnJvbSBhIGdpdmVuIG9iamVjdC5cbiAqIEEgcHJvcCBpcyBjb25zaWRlcmVkIGFuIGV2ZW50IGhhbmRsZXIgaWYgaXQgaXMgYSBmdW5jdGlvbiBhbmQgaXRzIG5hbWUgc3RhcnRzIHdpdGggYG9uYC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0byBleHRyYWN0IGV2ZW50IGhhbmRsZXJzIGZyb20uXG4gKiBAcGFyYW0gZXhjbHVkZUtleXMgQW4gYXJyYXkgb2Yga2V5cyB0byBleGNsdWRlIGZyb20gdGhlIHJldHVybmVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEV2ZW50SGFuZGxlcnMob2JqZWN0LCBleGNsdWRlS2V5cyA9IFtdKSB7XG4gIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIocHJvcCA9PiBwcm9wLm1hdGNoKC9eb25bQS1aXS8pICYmIHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgIWV4Y2x1ZGVLZXlzLmluY2x1ZGVzKHByb3ApKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9iamVjdFtwcm9wXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZGVmYXVsdCBleHRyYWN0RXZlbnRIYW5kbGVyczsiLCIvKipcbiAqIFJlbW92ZXMgZXZlbnQgaGFuZGxlcnMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQSBmaWVsZCBpcyBjb25zaWRlcmVkIGFuIGV2ZW50IGhhbmRsZXIgaWYgaXQgaXMgYSBmdW5jdGlvbiB3aXRoIGEgbmFtZSBiZWdpbm5pbmcgd2l0aCBgb25gLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgT2JqZWN0IHRvIHJlbW92ZSBldmVudCBoYW5kbGVycyBmcm9tLlxuICogQHJldHVybnMgT2JqZWN0IHdpdGggZXZlbnQgaGFuZGxlcnMgcmVtb3ZlZC5cbiAqL1xuZnVuY3Rpb24gb21pdEV2ZW50SGFuZGxlcnMob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5maWx0ZXIocHJvcCA9PiAhKHByb3AubWF0Y2goL15vbltBLVpdLykgJiYgdHlwZW9mIG9iamVjdFtwcm9wXSA9PT0gJ2Z1bmN0aW9uJykpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqZWN0W3Byb3BdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBkZWZhdWx0IG9taXRFdmVudEhhbmRsZXJzOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZXh0cmFjdEV2ZW50SGFuZGxlcnMgZnJvbSAnLi4vZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IG9taXRFdmVudEhhbmRsZXJzIGZyb20gJy4uL29taXRFdmVudEhhbmRsZXJzJztcbi8qKlxuICogTWVyZ2VzIHRoZSBzbG90IGNvbXBvbmVudCBpbnRlcm5hbCBwcm9wcyAodXN1YWxseSBjb21pbmcgZnJvbSBhIGhvb2spXG4gKiB3aXRoIHRoZSBleHRlcm5hbGx5IHByb3ZpZGVkIG9uZXMuXG4gKlxuICogVGhlIG1lcmdlIG9yZGVyIGlzICh0aGUgbGF0dGVyIG92ZXJyaWRlcyB0aGUgZm9ybWVyKTpcbiAqIDEuIFRoZSBpbnRlcm5hbCBwcm9wcyAoc3BlY2lmaWVkIGFzIGEgZ2V0dGVyIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBnZXQqUHJvcHMgaG9vayByZXN1bHQpXG4gKiAyLiBBZGRpdGlvbmFsIHByb3BzIChzcGVjaWZpZWQgaW50ZXJuYWxseSBvbiBhIEJhc2UgVUkgY29tcG9uZW50KVxuICogMy4gRXh0ZXJuYWwgcHJvcHMgc3BlY2lmaWVkIG9uIHRoZSBvd25lciBjb21wb25lbnQuIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gYSByb290IHNsb3QuXG4gKiA0LiBFeHRlcm5hbCBwcm9wcyBzcGVjaWZpZWQgaW4gdGhlIGBzbG90UHJvcHMuKmAgcHJvcC5cbiAqIDUuIFRoZSBgY2xhc3NOYW1lYCBwcm9wIC0gY29tYmluZWQgZnJvbSBhbGwgdGhlIGFib3ZlLlxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIG1lcmdlU2xvdFByb3BzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qge1xuICAgIGdldFNsb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHMsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHBhcmFtZXRlcnM7XG4gIGlmICghZ2V0U2xvdFByb3BzKSB7XG4gICAgLy8gVGhlIHNpbXBsZXIgY2FzZSAtIGdldFNsb3RQcm9wcyBpcyBub3QgZGVmaW5lZCwgc28gbm8gaW50ZXJuYWwgZXZlbnQgaGFuZGxlcnMgYXJlIGRlZmluZWQsXG4gICAgLy8gc28gd2UgY2FuIHNpbXBseSBtZXJnZSBhbGwgdGhlIHByb3BzIHdpdGhvdXQgaGF2aW5nIHRvIHdvcnJ5IGFib3V0IGV4dHJhY3RpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgY29uc3Qgam9pbmVkQ2xhc3NlcyA9IGNsc3goYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuY2xhc3NOYW1lLCBleHRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxTbG90UHJvcHMuY2xhc3NOYW1lKTtcbiAgICBjb25zdCBtZXJnZWRTdHlsZSA9IF9leHRlbmRzKHt9LCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5zdHlsZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5zdHlsZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLnN0eWxlKTtcbiAgICBjb25zdCBwcm9wcyA9IF9leHRlbmRzKHt9LCBhZGRpdGlvbmFsUHJvcHMsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIGV4dGVybmFsU2xvdFByb3BzKTtcbiAgICBpZiAoam9pbmVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wcy5jbGFzc05hbWUgPSBqb2luZWRDbGFzc2VzO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkU3R5bGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BzLnN0eWxlID0gbWVyZ2VkU3R5bGU7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwcm9wcyxcbiAgICAgIGludGVybmFsUmVmOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLy8gSW4gdGhpcyBjYXNlLCBnZXRTbG90UHJvcHMgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIGV4dGVybmFsIGV2ZW50IGhhbmRsZXJzLlxuICAvLyBXZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGUgbWVyZ2VkIHByb3BzIGJlY2F1c2Ugb2YgdGhpcy5cblxuICBjb25zdCBldmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMoX2V4dGVuZHMoe30sIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsIGV4dGVybmFsU2xvdFByb3BzKSk7XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzID0gb21pdEV2ZW50SGFuZGxlcnMoZXh0ZXJuYWxTbG90UHJvcHMpO1xuICBjb25zdCBvdGhlclByb3BzV2l0aG91dEV2ZW50SGFuZGxlcnMgPSBvbWl0RXZlbnRIYW5kbGVycyhleHRlcm5hbEZvcndhcmRlZFByb3BzKTtcbiAgY29uc3QgaW50ZXJuYWxTbG90UHJvcHMgPSBnZXRTbG90UHJvcHMoZXZlbnRIYW5kbGVycyk7XG5cbiAgLy8gVGhlIG9yZGVyIG9mIGNsYXNzZXMgaXMgaW1wb3J0YW50IGhlcmUuXG4gIC8vIEVtb3Rpb24gKHRoYXQgd2UgdXNlIGluIGxpYnJhcmllcyBjb25zdW1pbmcgQmFzZSBVSSkgZGVwZW5kcyBvbiB0aGlzIG9yZGVyXG4gIC8vIHRvIHByb3Blcmx5IG92ZXJyaWRlIHN0eWxlLiBJdCByZXF1aXJlcyB0aGUgbW9zdCBpbXBvcnRhbnQgY2xhc3NlcyB0byBiZSBsYXN0XG4gIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzMzMjA1KSBmb3IgdGhlIHJlbGF0ZWQgZGlzY3Vzc2lvbi5cbiAgY29uc3Qgam9pbmVkQ2xhc3NlcyA9IGNsc3goaW50ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGludGVybmFsU2xvdFByb3BzLmNsYXNzTmFtZSwgYWRkaXRpb25hbFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBhZGRpdGlvbmFsUHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMuY2xhc3NOYW1lLCBleHRlcm5hbFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxTbG90UHJvcHMuY2xhc3NOYW1lKTtcbiAgY29uc3QgbWVyZ2VkU3R5bGUgPSBfZXh0ZW5kcyh7fSwgaW50ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGludGVybmFsU2xvdFByb3BzLnN0eWxlLCBhZGRpdGlvbmFsUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxQcm9wcy5zdHlsZSwgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcy5zdHlsZSwgZXh0ZXJuYWxTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsU2xvdFByb3BzLnN0eWxlKTtcbiAgY29uc3QgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgaW50ZXJuYWxTbG90UHJvcHMsIGFkZGl0aW9uYWxQcm9wcywgb3RoZXJQcm9wc1dpdGhvdXRFdmVudEhhbmRsZXJzLCBjb21wb25lbnRzUHJvcHNXaXRob3V0RXZlbnRIYW5kbGVycyk7XG4gIGlmIChqb2luZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wcy5jbGFzc05hbWUgPSBqb2luZWRDbGFzc2VzO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhtZXJnZWRTdHlsZSkubGVuZ3RoID4gMCkge1xuICAgIHByb3BzLnN0eWxlID0gbWVyZ2VkU3R5bGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9wcyxcbiAgICBpbnRlcm5hbFJlZjogaW50ZXJuYWxTbG90UHJvcHMucmVmXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZVNsb3RQcm9wczsiLCIvKipcbiAqIElmIGBjb21wb25lbnRQcm9wc2AgaXMgYSBmdW5jdGlvbiwgY2FsbHMgaXQgd2l0aCB0aGUgcHJvdmlkZWQgYG93bmVyU3RhdGVgLlxuICogT3RoZXJ3aXNlLCBqdXN0IHJldHVybnMgYGNvbXBvbmVudFByb3BzYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudFByb3BzKGNvbXBvbmVudFByb3BzLCBvd25lclN0YXRlLCBzbG90U3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBjb21wb25lbnRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjb21wb25lbnRQcm9wcyhvd25lclN0YXRlLCBzbG90U3RhdGUpO1xuICB9XG4gIHJldHVybiBjb21wb25lbnRQcm9wcztcbn1cbmV4cG9ydCBkZWZhdWx0IHJlc29sdmVDb21wb25lbnRQcm9wczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJlbGVtZW50VHlwZVwiLCBcImV4dGVybmFsU2xvdFByb3BzXCIsIFwib3duZXJTdGF0ZVwiLCBcInNraXBSZXNvbHZpbmdTbG90UHJvcHNcIl07XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91c2VGb3JrUmVmJztcbmltcG9ydCBhcHBlbmRPd25lclN0YXRlIGZyb20gJy4uL2FwcGVuZE93bmVyU3RhdGUnO1xuaW1wb3J0IG1lcmdlU2xvdFByb3BzIGZyb20gJy4uL21lcmdlU2xvdFByb3BzJztcbmltcG9ydCByZXNvbHZlQ29tcG9uZW50UHJvcHMgZnJvbSAnLi4vcmVzb2x2ZUNvbXBvbmVudFByb3BzJztcbi8qKlxuICogQGlnbm9yZSAtIGRvIG5vdCBkb2N1bWVudC5cbiAqIEJ1aWxkcyB0aGUgcHJvcHMgdG8gYmUgcGFzc2VkIGludG8gdGhlIHNsb3Qgb2YgYW4gdW5zdHlsZWQgY29tcG9uZW50LlxuICogSXQgbWVyZ2VzIHRoZSBpbnRlcm5hbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IHdpdGggdGhlIG9uZXMgc3VwcGxpZWQgYnkgdGhlIHVzZXIsIGFsbG93aW5nIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3IuXG4gKiBJZiB0aGUgc2xvdCBjb21wb25lbnQgaXMgbm90IGEgaG9zdCBjb21wb25lbnQsIGl0IGFsc28gbWVyZ2VzIGluIHRoZSBgb3duZXJTdGF0ZWAuXG4gKlxuICogQHBhcmFtIHBhcmFtZXRlcnMuZ2V0U2xvdFByb3BzIC0gQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByb3BzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2xvdCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIHVzZVNsb3RQcm9wcyhwYXJhbWV0ZXJzKSB7XG4gIHZhciBfcGFyYW1ldGVycyRhZGRpdGlvbmE7XG4gIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRUeXBlLFxuICAgICAgZXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgc2tpcFJlc29sdmluZ1Nsb3RQcm9wcyA9IGZhbHNlXG4gICAgfSA9IHBhcmFtZXRlcnMsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhcmFtZXRlcnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID0gc2tpcFJlc29sdmluZ1Nsb3RQcm9wcyA/IHt9IDogcmVzb2x2ZUNvbXBvbmVudFByb3BzKGV4dGVybmFsU2xvdFByb3BzLCBvd25lclN0YXRlKTtcbiAgY29uc3Qge1xuICAgIHByb3BzOiBtZXJnZWRQcm9wcyxcbiAgICBpbnRlcm5hbFJlZlxuICB9ID0gbWVyZ2VTbG90UHJvcHMoX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNcbiAgfSkpO1xuICBjb25zdCByZWYgPSB1c2VGb3JrUmVmKGludGVybmFsUmVmLCByZXNvbHZlZENvbXBvbmVudHNQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMucmVmLCAoX3BhcmFtZXRlcnMkYWRkaXRpb25hID0gcGFyYW1ldGVycy5hZGRpdGlvbmFsUHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfcGFyYW1ldGVycyRhZGRpdGlvbmEucmVmKTtcbiAgY29uc3QgcHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKGVsZW1lbnRUeXBlLCBfZXh0ZW5kcyh7fSwgbWVyZ2VkUHJvcHMsIHtcbiAgICByZWZcbiAgfSksIG93bmVyU3RhdGUpO1xuICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VTbG90UHJvcHM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTGlzdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBMaXN0Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdMaXN0Q29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3QnLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdCcsIFsncm9vdCcsICdwYWRkaW5nJywgJ2RlbnNlJywgJ3N1YmhlYWRlciddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXNhYmxlUGFkZGluZ1wiLCBcInN1YmhlYWRlclwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi9MaXN0Q29udGV4dCc7XG5pbXBvcnQgeyBnZXRMaXN0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVBhZGRpbmcsXG4gICAgZGVuc2UsXG4gICAgc3ViaGVhZGVyXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVBhZGRpbmcgJiYgJ3BhZGRpbmcnLCBkZW5zZSAmJiAnZGVuc2UnLCBzdWJoZWFkZXIgJiYgJ3N1YmhlYWRlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTGlzdFJvb3QgPSBzdHlsZWQoJ3VsJywge1xuICBuYW1lOiAnTXVpTGlzdCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiBzdHlsZXMucGFkZGluZywgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHN0eWxlcy5zdWJoZWFkZXJdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxpc3RTdHlsZTogJ25vbmUnLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUGFkZGluZyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDhcbn0sIG93bmVyU3RhdGUuc3ViaGVhZGVyICYmIHtcbiAgcGFkZGluZ1RvcDogMFxufSkpO1xuY29uc3QgTGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpc3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3VsJyxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgICAgc3ViaGVhZGVyXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2VcbiAgfSksIFtkZW5zZV0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVQYWRkaW5nXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdmVydGljYWwgcGFkZGluZyBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUGFkZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgc3ViaGVhZGVyLCBub3JtYWxseSBgTGlzdFN1YmhlYWRlcmAuXG4gICAqL1xuICBzdWJoZWFkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdDsiLCIvLyBBIGNoYW5nZSBvZiB0aGUgYnJvd3NlciB6b29tIGNoYW5nZSB0aGUgc2Nyb2xsYmFyIHNpemUuXG4vLyBDcmVkaXQgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvNDg4ZmQ4YWZjNTM1Y2EzYTZhZDRkYzU4MWY1ZTg5MjE3YjZhMzZhYy9qcy9zcmMvdXRpbC9zY3JvbGxiYXIuanMjTDE0LUwxOFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShkb2MpIHtcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICdAbXVpL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuZXhwb3J0IGRlZmF1bHQgZ2V0U2Nyb2xsYmFyU2l6ZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b0ZvY3VzSXRlbVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZVwiLCBcImRpc2FibGVMaXN0V3JhcFwiLCBcIm9uS2V5RG93blwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi4vTGlzdCc7XG5pbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICcuLi91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5maXJzdENoaWxkO1xufVxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5sYXN0Q2hpbGQ7XG59XG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGpzZG9tIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lclRleHRcbiAgICB0ZXh0ID0gbmV4dEZvY3VzLnRleHRDb250ZW50O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHRDcml0ZXJpYS5yZXBlYXRpbmcpIHtcbiAgICByZXR1cm4gdGV4dFswXSA9PT0gdGV4dENyaXRlcmlhLmtleXNbMF07XG4gIH1cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcbiAgd2hpbGUgKG5leHRGb2N1cykge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcC5cbiAgICBpZiAobmV4dEZvY3VzID09PSBsaXN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgIGlmICh3cmFwcGVkT25jZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnUtYnV0dG9uLy5cbiAqIEl0J3MgZXhwb3NlZCB0byBoZWxwIGN1c3RvbWl6YXRpb24gb2YgdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGNvbXBvbmVudCBpZiB5b3VcbiAqIHVzZSBpdCBzZXBhcmF0ZWx5IHlvdSBuZWVkIHRvIG1vdmUgZm9jdXMgaW50byB0aGUgY29tcG9uZW50IG1hbnVhbGx5LiBPbmNlXG4gKiB0aGUgZm9jdXMgaXMgcGxhY2VkIGluc2lkZSB0aGUgY29tcG9uZW50IGl0IGlzIGZ1bGx5IGtleWJvYXJkIGFjY2Vzc2libGUuXG4gKi9cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwge1xuICAgICAgZGlyZWN0aW9uXG4gICAgfSkgPT4ge1xuICAgICAgLy8gTGV0J3MgaWdub3JlIHRoYXQgcGllY2Ugb2YgbG9naWMgaWYgdXNlcnMgYXJlIGFscmVhZHkgb3ZlcnJpZGluZyB0aGUgd2lkdGhcbiAgICAgIC8vIG9mIHRoZSBtZW51LlxuICAgICAgY29uc3Qgbm9FeHBsaWNpdFdpZHRoID0gIWxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aDtcbiAgICAgIGlmIChjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCA8IGxpc3RSZWYuY3VycmVudC5jbGllbnRIZWlnaHQgJiYgbm9FeHBsaWNpdFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemUgPSBgJHtnZXRTY3JvbGxiYXJTaXplKG93bmVyRG9jdW1lbnQoY29udGFpbmVyRWxlbWVudCkpfXB4YDtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlW2RpcmVjdGlvbiA9PT0gJ3J0bCcgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCddID0gc2Nyb2xsYmFyU2l6ZTtcbiAgICAgICAgbGlzdFJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSArICR7c2Nyb2xsYmFyU2l6ZX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBsaXN0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtFbGVtZW50fSAtIHdpbGwgYWx3YXlzIGJlIGRlZmluZWQgc2luY2Ugd2UgYXJlIGluIGEga2V5ZG93biBoYW5kbGVyXG4gICAgICogYXR0YWNoZWQgdG8gYW4gZWxlbWVudC4gQSBrZXlkb3duIGV2ZW50IGlzIGVpdGhlciBkaXNwYXRjaGVkIHRvIHRoZSBhY3RpdmVFbGVtZW50XG4gICAgICogb3IgZG9jdW1lbnQuYm9keSBvciBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuIE9ubHkgdGhlIGZpcnN0IGNhc2Ugd2lsbFxuICAgICAqIHRyaWdnZXIgdGhpcyBzcGVjaWZpYyBoYW5kbGVyLlxuICAgICAqL1xuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IG93bmVyRG9jdW1lbnQobGlzdCkuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gUHJldmVudCBzY3JvbGwgb2YgdGhlIHBhZ2VcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBwcmV2aW91c0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnSG9tZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRm9jdXMobGlzdCwgbnVsbCwgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdFbmQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGV4dENyaXRlcmlhUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBsb3dlcktleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgY3VyclRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGlmIChjcml0ZXJpYS5rZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgaWYgKGN1cnJUaW1lIC0gY3JpdGVyaWEubGFzdFRpbWUgPiA1MDApIHtcbiAgICAgICAgICBjcml0ZXJpYS5rZXlzID0gW107XG4gICAgICAgICAgY3JpdGVyaWEucmVwZWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNyaXRlcmlhLnJlcGVhdGluZyAmJiBsb3dlcktleSAhPT0gY3JpdGVyaWEua2V5c1swXSkge1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjcml0ZXJpYS5sYXN0VGltZSA9IGN1cnJUaW1lO1xuICAgICAgY3JpdGVyaWEua2V5cy5wdXNoKGxvd2VyS2V5KTtcbiAgICAgIGNvbnN0IGtlZXBGb2N1c09uQ3VycmVudCA9IGN1cnJlbnRGb2N1cyAmJiAhY3JpdGVyaWEucmVwZWF0aW5nICYmIHRleHRDcml0ZXJpYU1hdGNoZXMoY3VycmVudEZvY3VzLCBjcml0ZXJpYSk7XG4gICAgICBpZiAoY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkICYmIChrZWVwRm9jdXNPbkN1cnJlbnQgfHwgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZmFsc2UsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIG5leHRJdGVtLCBjcml0ZXJpYSkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcml0ZXJpYS5wcmV2aW91c0tleU1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdFJlZiwgcmVmKTtcblxuICAvKipcbiAgICogdGhlIGluZGV4IG9mIHRoZSBpdGVtIHNob3VsZCByZWNlaXZlIGZvY3VzXG4gICAqIGluIGEgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAgaXQncyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBpdGVtXG4gICAqIG90aGVyd2lzZSBpdCdzIHRoZSB2ZXJ5IGZpcnN0IGl0ZW0uXG4gICAqL1xuICBsZXQgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gIC8vIHNpbmNlIHdlIGluamVjdCBmb2N1cyByZWxhdGVkIHByb3BzIGludG8gY2hpbGRyZW4gd2UgaGF2ZSB0byBkbyBhIGxvb2thaGVhZFxuICAvLyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIGBzZWxlY3RlZGAgaXRlbS4gV2UncmUgbG9va2luZyBmb3IgdGhlIGxhc3QgYHNlbGVjdGVkYFxuICAvLyBpdGVtIGFuZCB1c2UgdGhlIGZpcnN0IHZhbGlkIGl0ZW0gYXMgYSBmYWxsYmFja1xuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ICs9IDE7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSBpbmRleCAmJiAoY2hpbGQucHJvcHMuZGlzYWJsZWQgfHwgY2hpbGQucHJvcHMubXVpU2tpcExpc3RIaWdobGlnaHQgfHwgY2hpbGQudHlwZS5tdWlTa2lwTGlzdEhpZ2hsaWdodCkpIHtcbiAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA+PSBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gdGhlcmUgYXJlIG5vIGZvY3VzYWJsZSBpdGVtcyB3aXRoaW4gdGhlIGxpc3QuXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGl0ZW1zID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBhY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkUHJvcHMgPSB7fTtcbiAgICAgIGlmIChhdXRvRm9jdXNJdGVtKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMuYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5wcm9wcy50YWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnKSB7XG4gICAgICAgIG5ld0NoaWxkUHJvcHMudGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG5ld0NoaWxkUHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdCwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwibWVudVwiLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogYXV0b0ZvY3VzID8gMCA6IC0xXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGl0ZW1zXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudUxpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBgW3JvbGU9XCJtZW51XCJdYCBjb250YWluZXIgYW5kIG1vdmUgaW50byB0YWIgb3JkZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGZvY3VzIHRoZSBmaXJzdCBtZW51aXRlbSBpZiBgdmFyaWFudD1cIm1lbnVcImAgb3Igc2VsZWN0ZWQgaXRlbVxuICAgKiBpZiBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudUxpc3QgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB3aWxsIGFsbG93IGZvY3VzIG9uIGRpc2FibGVkIGl0ZW1zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtZW51IGl0ZW1zIHdpbGwgbm90IHdyYXAgZm9jdXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlTGlzdFdyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzXG4gICAqIGFuZCB0aGUgdmVydGljYWwgYWxpZ25tZW50IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkTWVudSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ21lbnUnLCAnc2VsZWN0ZWRNZW51J10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTWVudUxpc3Q7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUaGVtZSBhcyB1c2VUaGVtZVN5c3RlbSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZVN5c3RlbShkZWZhdWx0VGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZVtUSEVNRV9JRF0gfHwgdGhlbWU7XG59IiwiZXhwb3J0IGNvbnN0IHJlZmxvdyA9IG5vZGUgPT4gbm9kZS5zY3JvbGxUb3A7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblByb3BzKHByb3BzLCBvcHRpb25zKSB7XG4gIHZhciBfc3R5bGUkdHJhbnNpdGlvbkR1cmEsIF9zdHlsZSR0cmFuc2l0aW9uVGltaTtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQsXG4gICAgZWFzaW5nLFxuICAgIHN0eWxlID0ge31cbiAgfSA9IHByb3BzO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAoX3N0eWxlJHRyYW5zaXRpb25EdXJhID0gc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25EdXJhIDogdHlwZW9mIHRpbWVvdXQgPT09ICdudW1iZXInID8gdGltZW91dCA6IHRpbWVvdXRbb3B0aW9ucy5tb2RlXSB8fCAwLFxuICAgIGVhc2luZzogKF9zdHlsZSR0cmFuc2l0aW9uVGltaSA9IHN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uVGltaSA6IHR5cGVvZiBlYXNpbmcgPT09ICdvYmplY3QnID8gZWFzaW5nW29wdGlvbnMubW9kZV0gOiBlYXNpbmcsXG4gICAgZGVsYXk6IHN0eWxlLnRyYW5zaXRpb25EZWxheVxuICB9O1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgZWxlbWVudEFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGdldFJlYWN0RWxlbWVudFJlZiBmcm9tICdAbXVpL3V0aWxzL2dldFJlYWN0RWxlbWVudFJlZic7XG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IGdldFRyYW5zaXRpb25Qcm9wcywgcmVmbG93IH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0U2NhbGUodmFsdWUpIHtcbiAgcmV0dXJuIGBzY2FsZSgke3ZhbHVlfSwgJHt2YWx1ZSAqKiAyfSlgO1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiBnZXRTY2FsZSgxKVxuICB9LFxuICBlbnRlcmVkOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06ICdub25lJ1xuICB9XG59O1xuXG4vKlxuIFRPRE8gdjY6IHJlbW92ZVxuIENvbmRpdGlvbmFsbHkgYXBwbHkgYSB3b3JrYXJvdW5kIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24gYnVnIGluIFNhZmFyaSAxNS40IC8gV2ViS2l0IGJyb3dzZXJzLlxuICovXG5jb25zdCBpc1dlYktpdDE1NCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKihzYWZhcml8bW9iaWxlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgLyhvcyB8dmVyc2lvblxcLykxNSgufF8pNC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogVGhlIEdyb3cgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbVG9vbHRpcF0oL21hdGVyaWFsLXVpL3JlYWN0LXRvb2x0aXAvKSBhbmRcbiAqIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvcmVhY3QtcG9wb3Zlci8pIGNvbXBvbmVudHMuXG4gKiBJdCB1c2VzIFtyZWFjdC10cmFuc2l0aW9uLWdyb3VwXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwKSBpbnRlcm5hbGx5LlxuICovXG5jb25zdCBHcm93ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3Jvdyhwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGFkZEVuZExpc3RlbmVyLFxuICAgICAgYXBwZWFyID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWFzaW5nLFxuICAgICAgaW46IGluUHJvcCxcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nLFxuICAgICAgb25FeGl0LFxuICAgICAgb25FeGl0ZWQsXG4gICAgICBvbkV4aXRpbmcsXG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQgPSAnYXV0bycsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgdGltZXIgPSB1c2VUaW1lb3V0KCk7XG4gIGNvbnN0IGF1dG9UaW1lb3V0ID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBnZXRSZWFjdEVsZW1lbnRSZWYoY2hpbGRyZW4pLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuc3RhcnQoYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwLCBuZXh0KTtcbiAgICB9XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbnNpc3RlbnQtcmV0dXJuLCBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS10YWJpbmRleCAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCwgZWxlbWVudEFjY2VwdGluZ1JlZiwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmLCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX2dldFJlYWN0RWxlbWVudFJlZiBhcyBnZXRSZWFjdEVsZW1lbnRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZm9jdXMtdHJhcC90YWJiYWJsZVxuY29uc3QgY2FuZGlkYXRlc1NlbGVjdG9yID0gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnLCAnYVtocmVmXScsICdidXR0b24nLCAnW3RhYmluZGV4XScsICdhdWRpb1tjb250cm9sc10nLCAndmlkZW9bY29udHJvbHNdJywgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJ10uam9pbignLCcpO1xuZnVuY3Rpb24gZ2V0VGFiSW5kZXgobm9kZSkge1xuICBjb25zdCB0YWJpbmRleEF0dHIgPSBwYXJzZUludChub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAnJywgMTApO1xuICBpZiAoIU51bWJlci5pc05hTih0YWJpbmRleEF0dHIpKSB7XG4gICAgcmV0dXJuIHRhYmluZGV4QXR0cjtcbiAgfVxuXG4gIC8vIEJyb3dzZXJzIGRvIG5vdCByZXR1cm4gYHRhYkluZGV4YCBjb3JyZWN0bHkgZm9yIGNvbnRlbnRFZGl0YWJsZSBub2RlcztcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjYxMTA4JnE9Y29udGVudGVkaXRhYmxlJTIwdGFiaW5kZXgmY2FuPTJcbiAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gIC8vICB5ZXQgdGhleSBhcmUgc3RpbGwgcGFydCBvZiB0aGUgcmVndWxhciB0YWIgb3JkZXI7IGluIEZGLCB0aGV5IGdldCBhIGRlZmF1bHRcbiAgLy8gIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gIC8vICBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gIGlmIChub2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnIHx8IChub2RlLm5vZGVOYW1lID09PSAnQVVESU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdWSURFTycgfHwgbm9kZS5ub2RlTmFtZSA9PT0gJ0RFVEFJTFMnKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufVxuZnVuY3Rpb24gaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHtcbiAgaWYgKG5vZGUudGFnTmFtZSAhPT0gJ0lOUFVUJyB8fCBub2RlLnR5cGUgIT09ICdyYWRpbycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFub2RlLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0UmFkaW8gPSBzZWxlY3RvciA9PiBub2RlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbdHlwZT1cInJhZGlvXCJdJHtzZWxlY3Rvcn1gKTtcbiAgbGV0IHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXTpjaGVja2VkYCk7XG4gIGlmICghcm92aW5nKSB7XG4gICAgcm92aW5nID0gZ2V0UmFkaW8oYFtuYW1lPVwiJHtub2RlLm5hbWV9XCJdYCk7XG4gIH1cbiAgcmV0dXJuIHJvdmluZyAhPT0gbm9kZTtcbn1cbmZ1bmN0aW9uIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUobm9kZSkge1xuICBpZiAobm9kZS5kaXNhYmxlZCB8fCBub2RlLnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgbm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0R2V0VGFiYmFibGUocm9vdCkge1xuICBjb25zdCByZWd1bGFyVGFiTm9kZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYk5vZGVzID0gW107XG4gIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZXNTZWxlY3RvcikpLmZvckVhY2goKG5vZGUsIGkpID0+IHtcbiAgICBjb25zdCBub2RlVGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICBpZiAobm9kZVRhYkluZGV4ID09PSAtMSB8fCAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobm9kZVRhYkluZGV4ID09PSAwKSB7XG4gICAgICByZWd1bGFyVGFiTm9kZXMucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJlZFRhYk5vZGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogbm9kZVRhYkluZGV4LFxuICAgICAgICBub2RlOiBub2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3JkZXJlZFRhYk5vZGVzLnNvcnQoKGEsIGIpID0+IGEudGFiSW5kZXggPT09IGIudGFiSW5kZXggPyBhLmRvY3VtZW50T3JkZXIgLSBiLmRvY3VtZW50T3JkZXIgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleCkubWFwKGEgPT4gYS5ub2RlKS5jb25jYXQocmVndWxhclRhYk5vZGVzKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIEZvY3VzVHJhcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgZ2V0VGFiYmFibGUgPSBkZWZhdWx0R2V0VGFiYmFibGUsXG4gICAgaXNFbmFibGVkID0gZGVmYXVsdElzRW5hYmxlZCxcbiAgICBvcGVuXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaWdub3JlTmV4dEVuZm9yY2VGb2N1cyA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlbnRpbmVsU3RhcnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNlbnRpbmVsRW5kID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBub2RlVG9SZXN0b3JlID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByZWFjdEZvY3VzRXZlbnRUYXJnZXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIC8vIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4gZGlzYWJsZUF1dG9Gb2N1cyBpcyB0cnVlLlxuICAvLyBJdCB3YWl0cyBmb3IgdGhlIGFjdGl2ZSBlbGVtZW50IHRvIG1vdmUgaW50byB0aGUgY29tcG9uZW50IHRvIGFjdGl2YXRlLlxuICBjb25zdCBhY3RpdmF0ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCByb290UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGdldFJlYWN0RWxlbWVudFJlZihjaGlsZHJlbiksIHJvb3RSZWYpO1xuICBjb25zdCBsYXN0S2V5ZG93biA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSAhZGlzYWJsZUF1dG9Gb2N1cztcbiAgfSwgW2Rpc2FibGVBdXRvRm9jdXMsIG9wZW5dKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSBtaWdodCByZW5kZXIgYW4gZW1wdHkgY2hpbGQuXG4gICAgaWYgKCFvcGVuIHx8ICFyb290UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyb290UmVmLmN1cnJlbnQpO1xuICAgIGlmICghcm9vdFJlZi5jdXJyZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgaWYgKCFyb290UmVmLmN1cnJlbnQuaGFzQXR0cmlidXRlKCd0YWJJbmRleCcpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIG1vZGFsIGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBhY2NlcHQgZm9jdXMuJywgJ0ZvciB0aGUgYmVuZWZpdCBvZiBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCAnICsgJ3RoZSB0YWJJbmRleCBvZiB0aGUgbm9kZSBpcyBiZWluZyBzZXQgdG8gXCItMVwiLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgICByb290UmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICctMScpO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2YXRlZC5jdXJyZW50KSB7XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy8gcmVzdG9yZUxhc3RGb2N1cygpXG4gICAgICBpZiAoIWRpc2FibGVSZXN0b3JlRm9jdXMpIHtcbiAgICAgICAgLy8gSW4gSUUxMSBpdCBpcyBwb3NzaWJsZSBmb3IgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB0byBiZSBudWxsIHJlc3VsdGluZ1xuICAgICAgICAvLyBpbiBub2RlVG9SZXN0b3JlLmN1cnJlbnQgYmVpbmcgbnVsbC5cbiAgICAgICAgLy8gTm90IGFsbCBlbGVtZW50cyBpbiBJRTExIGhhdmUgYSBmb2N1cyBtZXRob2QuXG4gICAgICAgIC8vIE9uY2UgSUUxMSBzdXBwb3J0IGlzIGRyb3BwZWQgdGhlIGZvY3VzKCkgY2FsbCBjYW4gYmUgdW5jb25kaXRpb25hbC5cbiAgICAgICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCAmJiBub2RlVG9SZXN0b3JlLmN1cnJlbnQuZm9jdXMpIHtcbiAgICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBNaXNzaW5nIGBkaXNhYmxlUmVzdG9yZUZvY3VzYCB3aGljaCBpcyBmaW5lLlxuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhhdCBwcm9wIG9uIGFuIG9wZW4gRm9jdXNUcmFwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbb3Blbl0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG4gICAgY29uc3QgbG9vcEZvY3VzID0gbmF0aXZlRXZlbnQgPT4ge1xuICAgICAgbGFzdEtleWRvd24uY3VycmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgaWYgKGRpc2FibGVFbmZvcmNlRm9jdXMgfHwgIWlzRW5hYmxlZCgpIHx8IG5hdGl2ZUV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIG5leHQgdGFiIHN0YXJ0cyBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIC8vIGRvYy5hY3RpdmVFbGVtZW50IHJlZmVycyB0byB0aGUgb3JpZ2luLlxuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSByb290UmVmLmN1cnJlbnQgJiYgbmF0aXZlRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBpZ25vcmUgdGhlIG5leHQgY29udGFpbiBhc1xuICAgICAgICAvLyBpdCB3aWxsIHRyeSB0byBtb3ZlIHRoZSBmb2N1cyBiYWNrIHRvIHRoZSByb290UmVmIGVsZW1lbnQuXG4gICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGlmIChzZW50aW5lbEVuZC5jdXJyZW50KSB7XG4gICAgICAgICAgc2VudGluZWxFbmQuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb250YWluID0gKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSByb290UmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIENsZWFudXAgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBsYXppbHkgaW4gUmVhY3QgMTcuXG4gICAgICAvLyBDb250YWluIGNhbiBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgY29tcG9uZW50IGJlaW5nIHVubW91bnRlZCBhbmQgaXRzIGNsZWFudXAgZnVuY3Rpb24gYmVpbmcgcnVuLlxuICAgICAgaWYgKHJvb3RFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghZG9jLmhhc0ZvY3VzKCkgfHwgIWlzRW5hYmxlZCgpIHx8IGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCkge1xuICAgICAgICBpZ25vcmVOZXh0RW5mb3JjZUZvY3VzLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZm9jdXMgaXMgYWxyZWFkeSBpbnNpZGVcbiAgICAgIGlmIChyb290RWxlbWVudC5jb250YWlucyhkb2MuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZGlzYWJsZUVuZm9yY2VGb2N1cyBpcyBzZXQgYW5kIHRoZSBmb2N1cyBpcyBvdXRzaWRlIG9mIHRoZSBmb2N1cyB0cmFwIChhbmQgc2VudGluZWwgbm9kZXMpXG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyAmJiBkb2MuYWN0aXZlRWxlbWVudCAhPT0gc2VudGluZWxTdGFydC5jdXJyZW50ICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBzZW50aW5lbEVuZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIGZvY3VzIGV2ZW50IGlzIG5vdCBjb21pbmcgZnJvbSBpbnNpZGUgdGhlIGNoaWxkcmVuJ3MgcmVhY3QgdHJlZSwgcmVzZXQgdGhlIHJlZnNcbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAhPT0gcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQpIHtcbiAgICAgICAgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChyZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWFjdGl2YXRlZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCB0YWJiYWJsZSA9IFtdO1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSBzZW50aW5lbFN0YXJ0LmN1cnJlbnQgfHwgZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgdGFiYmFibGUgPSBnZXRUYWJiYWJsZShyb290UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmUgb2YgdGhlIHNlbnRpbmVsIG5vZGVzIHdhcyBmb2N1c2VkLCBzbyBtb3ZlIHRoZSBmb2N1c1xuICAgICAgLy8gdG8gdGhlIGZpcnN0L2xhc3QgdGFiYmFibGUgZWxlbWVudCBpbnNpZGUgdGhlIGZvY3VzIHRyYXBcbiAgICAgIGlmICh0YWJiYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBfbGFzdEtleWRvd24kY3VycmVudCwgX2xhc3RLZXlkb3duJGN1cnJlbnQyO1xuICAgICAgICBjb25zdCBpc1NoaWZ0VGFiID0gQm9vbGVhbigoKF9sYXN0S2V5ZG93biRjdXJyZW50ID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50LnNoaWZ0S2V5KSAmJiAoKF9sYXN0S2V5ZG93biRjdXJyZW50MiA9IGxhc3RLZXlkb3duLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbGFzdEtleWRvd24kY3VycmVudDIua2V5KSA9PT0gJ1RhYicpO1xuICAgICAgICBjb25zdCBmb2N1c05leHQgPSB0YWJiYWJsZVswXTtcbiAgICAgICAgY29uc3QgZm9jdXNQcmV2aW91cyA9IHRhYmJhYmxlW3RhYmJhYmxlLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodHlwZW9mIGZvY3VzTmV4dCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGZvY3VzUHJldmlvdXMgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKGlzU2hpZnRUYWIpIHtcbiAgICAgICAgICAgIGZvY3VzUHJldmlvdXMuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9jdXNOZXh0LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzIGluIHRoZSB0cmFwIGZvY3VzIG9yIHRoZSBmb2N1cyB3YXMgb3V0c2lkZSBvZiB0aGUgZm9jdXMgdHJhcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgY29udGFpbik7XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpO1xuXG4gICAgLy8gV2l0aCBFZGdlLCBTYWZhcmkgYW5kIEZpcmVmb3gsIG5vIGZvY3VzIHJlbGF0ZWQgZXZlbnRzIGFyZSBmaXJlZCB3aGVuIHRoZSBmb2N1c2VkIGFyZWEgc3RvcHMgYmVpbmcgYSBmb2N1c2VkIGFyZWEuXG4gICAgLy8gZm9yIGV4YW1wbGUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NTYxLlxuICAgIC8vIEluc3RlYWQsIHdlIGNhbiBsb29rIGlmIHRoZSBhY3RpdmUgZWxlbWVudCB3YXMgcmVzdG9yZWQgb24gdGhlIEJPRFkgZWxlbWVudC5cbiAgICAvL1xuICAgIC8vIFRoZSB3aGF0d2cgc3BlYyBkZWZpbmVzIGhvdyB0aGUgYnJvd3NlciBzaG91bGQgYmVoYXZlIGJ1dCBkb2VzIG5vdCBleHBsaWNpdGx5IG1lbnRpb24gYW55IGV2ZW50czpcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI2ZvY3VzLWZpeHVwLXJ1bGUuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgJiYgZG9jLmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGNvbnRhaW4oKTtcbiAgICAgIH1cbiAgICB9LCA1MCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgbG9vcEZvY3VzLCB0cnVlKTtcbiAgICB9O1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgZGlzYWJsZUVuZm9yY2VGb2N1cywgZGlzYWJsZVJlc3RvcmVGb2N1cywgaXNFbmFibGVkLCBvcGVuLCBnZXRUYWJiYWJsZV0pO1xuICBjb25zdCBvbkZvY3VzID0gZXZlbnQgPT4ge1xuICAgIGlmIChub2RlVG9SZXN0b3JlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgfVxuICAgIGFjdGl2YXRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBjaGlsZHJlblByb3BzSGFuZGxlciA9IGNoaWxkcmVuLnByb3BzLm9uRm9jdXM7XG4gICAgaWYgKGNoaWxkcmVuUHJvcHNIYW5kbGVyKSB7XG4gICAgICBjaGlsZHJlblByb3BzSGFuZGxlcihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVGb2N1c1NlbnRpbmVsID0gZXZlbnQgPT4ge1xuICAgIGlmIChub2RlVG9SZXN0b3JlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgfVxuICAgIGFjdGl2YXRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbFN0YXJ0LFxuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbnRpbmVsU3RhcnRcIlxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICByZWY6IGhhbmRsZVJlZixcbiAgICAgIG9uRm9jdXNcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goXCJkaXZcIiwge1xuICAgICAgdGFiSW5kZXg6IG9wZW4gPyAwIDogLTEsXG4gICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1NlbnRpbmVsLFxuICAgICAgcmVmOiBzZW50aW5lbEVuZCxcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogXCJzZW50aW5lbEVuZFwiXG4gICAgfSldXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9jdXNUcmFwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZm9jdXMgdHJhcCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgZm9jdXMgdHJhcCBjaGlsZHJlbiB0aGF0IGhhdmUgdGhlIGBkaXNhYmxlQXV0b0ZvY3VzYCBwcm9wLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgZm9jdXMgdHJhcCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZm9jdXMgdHJhcCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgZm9jdXMgdHJhcCB3aGlsZSBvcGVuLlxuICAgKlxuICAgKiBHZW5lcmFsbHkgdGhpcyBzaG91bGQgbmV2ZXIgYmUgc2V0IHRvIGB0cnVlYCBhcyBpdCBtYWtlcyB0aGUgZm9jdXMgdHJhcCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbmZvcmNlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZm9jdXMgdHJhcCB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogZm9jdXMgdHJhcCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIG9yZGVyZWQgdGFiYmFibGUgbm9kZXMgKGkuZS4gaW4gdGFiIG9yZGVyKSB3aXRoaW4gdGhlIHJvb3QuXG4gICAqIEZvciBpbnN0YW5jZSwgeW91IGNhbiBwcm92aWRlIHRoZSBcInRhYmJhYmxlXCIgbnBtIGRlcGVuZGVuY3kuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3RcbiAgICovXG4gIGdldFRhYmJhYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBleHRlbmRzIHRoZSBgb3BlbmAgcHJvcC5cbiAgICogSXQgYWxsb3dzIHRvIHRvZ2dsZSB0aGUgb3BlbiBzdGF0ZSB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBhIHJlcmVuZGVyIHdoZW4gY2hhbmdpbmcgdGhlIGBvcGVuYCBwcm9wLlxuICAgKiBUaGlzIHByb3Agc2hvdWxkIGJlIG1lbW9pemVkLlxuICAgKiBJdCBjYW4gYmUgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIGZvY3VzIHRyYXAgbW91bnRlZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0SXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgKiAgIHJldHVybiB0cnVlO1xuICAgKiB9XG4gICAqL1xuICBpc0VuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBmb2N1cyBpcyBsb2NrZWQuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIEZvY3VzVHJhcFsncHJvcFR5cGVzJyArICcnXSA9IGV4YWN0UHJvcChGb2N1c1RyYXAucHJvcFR5cGVzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wLCBIVE1MRWxlbWVudFR5cGUsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYsIHVuc3RhYmxlX2dldFJlYWN0RWxlbWVudFJlZiBhcyBnZXRSZWFjdEVsZW1lbnRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5cbi8qKlxuICogUG9ydGFscyBwcm92aWRlIGEgZmlyc3QtY2xhc3Mgd2F5IHRvIHJlbmRlciBjaGlsZHJlbiBpbnRvIGEgRE9NIG5vZGVcbiAqIHRoYXQgZXhpc3RzIG91dHNpZGUgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUG9ydGFsXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtcG9ydGFsLylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUG9ydGFsIEFQSV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2FwaS9wb3J0YWwvKVxuICovXG5jb25zdCBQb3J0YWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3J0YWwocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFttb3VudE5vZGUsIHNldE1vdW50Tm9kZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZiggLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSA/IGdldFJlYWN0RWxlbWVudFJlZihjaGlsZHJlbikgOiBudWxsLCBmb3J3YXJkZWRSZWYpO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRNb3VudE5vZGUoZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikgfHwgZG9jdW1lbnQuYm9keSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBkaXNhYmxlUG9ydGFsXSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW91bnROb2RlICYmICFkaXNhYmxlUG9ydGFsKSB7XG4gICAgICBzZXRSZWYoZm9yd2FyZGVkUmVmLCBtb3VudE5vZGUpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc2V0UmVmKGZvcndhcmRlZFJlZiwgbnVsbCk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbZm9yd2FyZGVkUmVmLCBtb3VudE5vZGUsIGRpc2FibGVQb3J0YWxdKTtcbiAgaWYgKGRpc2FibGVQb3J0YWwpIHtcbiAgICBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgIGNvbnN0IG5ld1Byb3BzID0ge1xuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBuZXdQcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSZWFjdC5GcmFnbWVudCwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IG1vdW50Tm9kZSA/IC8qI19fUFVSRV9fKi9SZWFjdERPTS5jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIG1vdW50Tm9kZSkgOiBtb3VudE5vZGVcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcnRhbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY2hpbGRyZW4gdG8gcmVuZGVyIGludG8gdGhlIGBjb250YWluZXJgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGluIGEgUmVhY3QgbGF5b3V0IGVmZmVjdC5cbiAgICogVGhpcyBsZXRzIHlvdSBzZXQgdGhlIGNvbnRhaW5lciBmcm9tIGEgcmVmLCBhbmQgYWxzbyBtYWtlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcG9zc2libGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBQb3J0YWxbJ3Byb3BUeXBlcycgKyAnJ10gPSBleGFjdFByb3AoUG9ydGFsLnByb3BUeXBlcyk7XG59XG5leHBvcnQgZGVmYXVsdCBQb3J0YWw7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCBnZXRSZWFjdEVsZW1lbnRSZWYgZnJvbSAnQG11aS91dGlscy9nZXRSZWFjdEVsZW1lbnRSZWYnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyByZWZsb3csIGdldFRyYW5zaXRpb25Qcm9wcyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG5cbi8qKlxuICogVGhlIEZhZGUgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbTW9kYWxdKC9tYXRlcmlhbC11aS9yZWFjdC1tb2RhbC8pIGNvbXBvbmVudC5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEZhZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGYWRlKHByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBkZWZhdWx0VGltZW91dCA9IHtcbiAgICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlblxuICB9O1xuICBjb25zdCB7XG4gICAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICAgIGFwcGVhciA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGluOiBpblByb3AsXG4gICAgICBvbkVudGVyLFxuICAgICAgb25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZyxcbiAgICAgIG9uRXhpdCxcbiAgICAgIG9uRXhpdGVkLFxuICAgICAgb25FeGl0aW5nLFxuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgZ2V0UmVhY3RFbGVtZW50UmVmKGNoaWxkcmVuKSwgcmVmKTtcbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayA9IGNhbGxiYWNrID0+IG1heWJlSXNBcHBlYXJpbmcgPT4ge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVSZWYuY3VycmVudDtcblxuICAgICAgLy8gb25FbnRlclh4eCBhbmQgb25FeGl0WHh4IGNhbGxiYWNrcyBoYXZlIGEgZGlmZmVyZW50IGFyZ3VtZW50cy5sZW5ndGggdmFsdWUuXG4gICAgICBpZiAobWF5YmVJc0FwcGVhcmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSwgbWF5YmVJc0FwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmluZyk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjaygobm9kZSwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICByZWZsb3cobm9kZSk7IC8vIFNvIHRoZSBhbmltYXRpb24gYWx3YXlzIHN0YXJ0IGZyb20gdGhlIHN0YXJ0LlxuXG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdlbnRlcidcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRW50ZXIpIHtcbiAgICAgIG9uRW50ZXIobm9kZSwgaXNBcHBlYXJpbmcpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJlZCk7XG4gIGNvbnN0IGhhbmRsZUV4aXRpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGluZyk7XG4gIGNvbnN0IGhhbmRsZUV4aXQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZXhpdCdcbiAgICB9KTtcbiAgICBub2RlLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgaWYgKG9uRXhpdCkge1xuICAgICAgb25FeGl0KG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0ZWQpO1xuICBjb25zdCBoYW5kbGVBZGRFbmRMaXN0ZW5lciA9IG5leHQgPT4ge1xuICAgIGlmIChhZGRFbmRMaXN0ZW5lcikge1xuICAgICAgLy8gT2xkIGNhbGwgc2lnbmF0dXJlIGJlZm9yZSBgcmVhY3QtdHJhbnNpdGlvbi1ncm91cGAgaW1wbGVtZW50ZWQgYG5vZGVSZWZgXG4gICAgICBhZGRFbmRMaXN0ZW5lcihub2RlUmVmLmN1cnJlbnQsIG5leHQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBhcHBlYXI6IGFwcGVhcixcbiAgICBpbjogaW5Qcm9wLFxuICAgIG5vZGVSZWY6IGVuYWJsZVN0cmljdE1vZGVDb21wYXQgPyBub2RlUmVmIDogdW5kZWZpbmVkLFxuICAgIG9uRW50ZXI6IGhhbmRsZUVudGVyLFxuICAgIG9uRW50ZXJlZDogaGFuZGxlRW50ZXJlZCxcbiAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICBvbkV4aXQ6IGhhbmRsZUV4aXQsXG4gICAgb25FeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICBvbkV4aXRpbmc6IGhhbmRsZUV4aXRpbmcsXG4gICAgYWRkRW5kTGlzdGVuZXI6IGhhbmRsZUFkZEVuZExpc3RlbmVyLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXRcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogKHN0YXRlLCBjaGlsZFByb3BzKSA9PiB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgX2V4dGVuZHMoe1xuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgdmlzaWJpbGl0eTogc3RhdGUgPT09ICdleGl0ZWQnICYmICFpblByb3AgPyAnaGlkZGVuJyA6IHVuZGVmaW5lZFxuICAgICAgICB9LCBzdHlsZXNbc3RhdGVdLCBzdHlsZSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLFxuICAgICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgfSwgY2hpbGRQcm9wcykpO1xuICAgIH1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGYWRlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZyBET01cbiAgICogbm9kZSBhbmQgYSBkb25lIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBOb3RlOiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuIGl0IGZpcnN0IG1vdW50cyBpZiBgaW5gIGlzIGFsc28gYHRydWVgLlxuICAgKiBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGNoaWxkIGNvbnRlbnQgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbGVtZW50QWNjZXB0aW5nUmVmLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNpdGlvbiB0aW1pbmcgZnVuY3Rpb24uXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSBlYXNpbmcgb3IgYSBvYmplY3QgY29udGFpbmluZyBlbnRlciBhbmQgZXhpdCB2YWx1ZXMuXG4gICAqL1xuICBlYXNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgZW50ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXhpdDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdHJhbnNpdGlvbiBpbi5cbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBmb3IgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9ucywgb3IgaW5kaXZpZHVhbGx5IHdpdGggYW4gb2JqZWN0LlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgZW50ZXI6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmVudGVyaW5nU2NyZWVuLFxuICAgKiAgIGV4aXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLmxlYXZpbmdTY3JlZW4sXG4gICAqIH1cbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZhZGU7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrZHJvcFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQmFja2Ryb3AnLCBzbG90KTtcbn1cbmNvbnN0IGJhY2tkcm9wQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJhY2tkcm9wJywgWydyb290JywgJ2ludmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJhY2tkcm9wQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJpbnZpc2libGVcIiwgXCJvcGVuXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBGYWRlIGZyb20gJy4uL0ZhZGUnO1xuaW1wb3J0IHsgZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2JhY2tkcm9wQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgaW52aXNpYmxlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBpbnZpc2libGUgJiYgJ2ludmlzaWJsZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QmFja2Ryb3BVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEJhY2tkcm9wUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpQmFja2Ryb3AnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5pbnZpc2libGUgJiYgc3R5bGVzLmludmlzaWJsZV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50J1xufSwgb3duZXJTdGF0ZS5pbnZpc2libGUgJiYge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbn0pKTtcbmNvbnN0IEJhY2tkcm9wID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQmFja2Ryb3AoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJHJvb3QsIF9yZWYsIF9zbG90cyRyb290O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJhY2tkcm9wJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgaW52aXNpYmxlID0gZmFsc2UsXG4gICAgICBvcGVuLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEZhZGUsXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBpbnZpc2libGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHJvb3QgPSBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGluOiBvcGVuLFxuICAgIHRpbWVvdXQ6IHRyYW5zaXRpb25EdXJhdGlvblxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZVxuICAgIH0sIHJvb3RTbG90UHJvcHMsIHtcbiAgICAgIGFzOiAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIG93bmVyU3RhdGU6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCByb290U2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiByb290U2xvdFByb3BzLm93bmVyU3RhdGUpLFxuICAgICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQmFja2Ryb3AucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIGludmlzaWJsZS5cbiAgICogSXQgY2FuIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgYSBwb3BvdmVyIG9yIGEgY3VzdG9tIHNlbGVjdCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbnZpc2libGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgRmFkZVxuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqL1xuICB0cmFuc2l0aW9uRHVyYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wOyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93LCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuLy8gSXMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZGlzcGxheWVkP1xuZnVuY3Rpb24gaXNPdmVyZmxvd2luZyhjb250YWluZXIpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChjb250YWluZXIpO1xuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0ID4gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpIHtcbiAgaWYgKHNob3cpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuZnVuY3Rpb24gaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhlIGZvcmJpZGRlbiBIVE1MIHRhZ3MgYXJlIHRoZSBvbmVzIGZyb20gQVJJQSBzcGVjaWZpY2F0aW9uIHRoYXRcbiAgLy8gY2FuIGJlIGNoaWxkcmVuIG9mIGJvZHkgYW5kIGNhbid0IGhhdmUgYXJpYS1oaWRkZW4gYXR0cmlidXRlLlxuICAvLyBjZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtYXJpYS8jZG9jY29uZm9ybWFuY2VcbiAgY29uc3QgZm9yYmlkZGVuVGFnTmFtZXMgPSBbJ1RFTVBMQVRFJywgJ1NDUklQVCcsICdTVFlMRScsICdMSU5LJywgJ01BUCcsICdNRVRBJywgJ05PU0NSSVBUJywgJ1BJQ1RVUkUnLCAnQ09MJywgJ0NPTEdST1VQJywgJ1BBUkFNJywgJ1NMT1QnLCAnU09VUkNFJywgJ1RSQUNLJ107XG4gIGNvbnN0IGlzRm9yYmlkZGVuVGFnTmFtZSA9IGZvcmJpZGRlblRhZ05hbWVzLmluZGV4T2YoZWxlbWVudC50YWdOYW1lKSAhPT0gLTE7XG4gIGNvbnN0IGlzSW5wdXRIaWRkZW4gPSBlbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbic7XG4gIHJldHVybiBpc0ZvcmJpZGRlblRhZ05hbWUgfHwgaXNJbnB1dEhpZGRlbjtcbn1cbmZ1bmN0aW9uIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIGVsZW1lbnRzVG9FeGNsdWRlLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGlzTm90RXhjbHVkZWRFbGVtZW50ICYmIGlzTm90Rm9yYmlkZGVuRWxlbWVudCkge1xuICAgICAgYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEluZGV4T2YoaXRlbXMsIGNhbGxiYWNrKSB7XG4gIGxldCBpZHggPSAtMTtcbiAgaXRlbXMuc29tZSgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgIGlkeCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBoYW5kbGVDb250YWluZXIoY29udGFpbmVySW5mbywgcHJvcHMpIHtcbiAgY29uc3QgcmVzdG9yZVN0eWxlID0gW107XG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lckluZm8uY29udGFpbmVyO1xuICBpZiAoIXByb3BzLmRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgaWYgKGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSkge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBiZWZvcmUgYXBwbHlpbmcgb3ZlcmZsb3cgaGlkZGVuIHRvIGF2b2lkIGFueSBzY3JvbGwganVtcHMuXG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyLnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgZWw6IGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG4gICAgICBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGNvbnRhaW5lcikgKyBzY3JvbGxiYXJTaXplfXB4YDtcblxuICAgICAgLy8gLm11aS1maXhlZCBpcyBhIGdsb2JhbCBoZWxwZXIuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tdWktZml4ZWQnKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChmaXhlZEVsZW1lbnRzLCBlbGVtZW50ID0+IHtcbiAgICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICAgIGVsOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2dldFBhZGRpbmdSaWdodChlbGVtZW50KSArIHNjcm9sbGJhclNpemV9cHhgO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG4gICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN1cHBvcnQgaHRtbCBvdmVyZmxvdy15OiBhdXRvIGZvciBzY3JvbGwgc3RhYmlsaXR5IGJldHdlZW4gcGFnZXNcbiAgICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2ZvcmNlLXZlcnRpY2FsLXNjcm9sbGJhci9cbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coY29udGFpbmVyKTtcbiAgICAgIHNjcm9sbENvbnRhaW5lciA9IChwYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcmVudC5ub2RlTmFtZSkgPT09ICdIVE1MJyAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcgPyBwYXJlbnQgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgdGhlIHNjcm9sbCBldmVuIGlmIG5vIHNjcm9sbGJhciBpcyB2aXNpYmxlIHRvIGFjY291bnQgZm9yIG1vYmlsZSBrZXlib2FyZFxuICAgIC8vIHNjcmVlbnNpemUgc2hyaW5rLlxuICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3csXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WCxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteCcsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ksXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93LXknLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0pO1xuICAgIHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG4gICAgcmVzdG9yZVN0eWxlLmZvckVhY2goKHtcbiAgICAgIHZhbHVlLFxuICAgICAgZWwsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gcmVzdG9yZTtcbn1cbmZ1bmN0aW9uIGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcikge1xuICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IFtdO1xuICBbXS5mb3JFYWNoLmNhbGwoY29udGFpbmVyLmNoaWxkcmVuLCBlbGVtZW50ID0+IHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJykge1xuICAgICAgaGlkZGVuU2libGluZ3MucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGlkZGVuU2libGluZ3M7XG59XG4vKipcbiAqIEBpZ25vcmUgLSBkbyBub3QgZG9jdW1lbnQuXG4gKlxuICogUHJvcGVyIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGNvbnRhaW5lcnMgYW5kIHRoZSBtb2RhbHMgaW4gdGhvc2UgY29udGFpbmVycy5cbiAqIFNpbXBsaWZpZWQsIGJ1dCBpbnNwaXJlZCBieSByZWFjdC1vdmVybGF5J3MgTW9kYWxNYW5hZ2VyIGNsYXNzLlxuICogVXNlZCBieSB0aGUgTW9kYWwgdG8gZW5zdXJlIHByb3BlciBzdHlsaW5nIG9mIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICBhZGQobW9kYWwsIGNvbnRhaW5lcikge1xuICAgIGxldCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG4gICAgaWYgKG1vZGFsSW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTtcblxuICAgIC8vIElmIHRoZSBtb2RhbCB3ZSBhcmUgYWRkaW5nIGlzIGFscmVhZHkgaW4gdGhlIERPTS5cbiAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGZhbHNlKTtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuICAgIGlmIChjb250YWluZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF0ubW9kYWxzLnB1c2gobW9kYWwpO1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVycy5wdXNoKHtcbiAgICAgIG1vZGFsczogW21vZGFsXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHJlc3RvcmU6IG51bGwsXG4gICAgICBoaWRkZW5TaWJsaW5nc1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgaWYgKCFjb250YWluZXJJbmZvLnJlc3RvcmUpIHtcbiAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSA9IGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcyk7XG4gICAgfVxuICB9XG4gIHJlbW92ZShtb2RhbCwgYXJpYUhpZGRlblN0YXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJJbmRleCA9IGZpbmRJbmRleE9mKHRoaXMuY29udGFpbmVycywgaXRlbSA9PiBpdGVtLm1vZGFscy5pbmRleE9mKG1vZGFsKSAhPT0gLTEpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZm8gPSB0aGlzLmNvbnRhaW5lcnNbY29udGFpbmVySW5kZXhdO1xuICAgIGNvbnRhaW5lckluZm8ubW9kYWxzLnNwbGljZShjb250YWluZXJJbmZvLm1vZGFscy5pbmRleE9mKG1vZGFsKSwgMSk7XG4gICAgdGhpcy5tb2RhbHMuc3BsaWNlKG1vZGFsSW5kZXgsIDEpO1xuXG4gICAgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgbW9kYWwgaW4gYSBjb250YWluZXIsIGNsZWFuIHVwIHRoZSBjb250YWluZXIuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgICAvLyBJbiBjYXNlIHRoZSBtb2RhbCB3YXNuJ3QgaW4gdGhlIERPTSB5ZXQuXG4gICAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGFyaWFIaWRkZW5TdGF0ZSk7XG4gICAgICB9XG4gICAgICBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVySW5mby5jb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgY29udGFpbmVySW5mby5oaWRkZW5TaWJsaW5ncywgZmFsc2UpO1xuICAgICAgdGhpcy5jb250YWluZXJzLnNwbGljZShjb250YWluZXJJbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBtYWtlIHN1cmUgdGhlIG5leHQgdG9wIG1vZGFsIGlzIHZpc2libGUgdG8gYSBzY3JlZW4gcmVhZGVyLlxuICAgICAgY29uc3QgbmV4dFRvcCA9IGNvbnRhaW5lckluZm8ubW9kYWxzW2NvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuICAgICAgaWYgKG5leHRUb3AubW9kYWxSZWYpIHtcbiAgICAgICAgYXJpYUhpZGRlbihuZXh0VG9wLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjaywgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGV4dHJhY3RFdmVudEhhbmRsZXJzIGZyb20gJ0BtdWkvdXRpbHMvZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IHsgTW9kYWxNYW5hZ2VyLCBhcmlhSGlkZGVuIH0gZnJvbSAnLi9Nb2RhbE1hbmFnZXInO1xuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gdHlwZW9mIGNvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRhaW5lcigpIDogY29udGFpbmVyO1xufVxuZnVuY3Rpb24gZ2V0SGFzVHJhbnNpdGlvbihjaGlsZHJlbikge1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbi5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW4nKSA6IGZhbHNlO1xufVxuXG4vLyBBIG1vZGFsIG1hbmFnZXIgdXNlZCB0byB0cmFjayBhbmQgbWFuYWdlIHRoZSBzdGF0ZSBvZiBvcGVuIE1vZGFscy5cbi8vIE1vZGFscyBkb24ndCBvcGVuIG9uIHRoZSBzZXJ2ZXIgc28gdGhpcyB3b24ndCBjb25mbGljdCB3aXRoIGNvbmN1cnJlbnQgcmVxdWVzdHMuXG5jb25zdCBkZWZhdWx0TWFuYWdlciA9IG5ldyBNb2RhbE1hbmFnZXIoKTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW01vZGFsXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC8jaG9vaylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbdXNlTW9kYWwgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC9ob29rcy1hcGkvI3VzZS1tb2RhbClcbiAqL1xuZnVuY3Rpb24gdXNlTW9kYWwocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIGxvZ2ljIC0gQmFzZSBVSSBzdXBwb3J0cyB0aGUgbWFuYWdlciBhcyBhIHByb3AgdG9vXG4gICAgbWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgb25UcmFuc2l0aW9uRW50ZXIsXG4gICAgb25UcmFuc2l0aW9uRXhpdGVkLFxuICAgIGNoaWxkcmVuLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICByb290UmVmXG4gIH0gPSBwYXJhbWV0ZXJzO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWNcbiAgY29uc3QgbW9kYWwgPSBSZWFjdC51c2VSZWYoe30pO1xuICBjb25zdCBtb3VudE5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG1vZGFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1vZGFsUmVmLCByb290UmVmKTtcbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKCFvcGVuKTtcbiAgY29uc3QgaGFzVHJhbnNpdGlvbiA9IGdldEhhc1RyYW5zaXRpb24oY2hpbGRyZW4pO1xuICBsZXQgYXJpYUhpZGRlblByb3AgPSB0cnVlO1xuICBpZiAocGFyYW1ldGVyc1snYXJpYS1oaWRkZW4nXSA9PT0gJ2ZhbHNlJyB8fCBwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSBmYWxzZSkge1xuICAgIGFyaWFIaWRkZW5Qcm9wID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0RG9jID0gKCkgPT4gb3duZXJEb2N1bWVudChtb3VudE5vZGVSZWYuY3VycmVudCk7XG4gIGNvbnN0IGdldE1vZGFsID0gKCkgPT4ge1xuICAgIG1vZGFsLmN1cnJlbnQubW9kYWxSZWYgPSBtb2RhbFJlZi5jdXJyZW50O1xuICAgIG1vZGFsLmN1cnJlbnQubW91bnQgPSBtb3VudE5vZGVSZWYuY3VycmVudDtcbiAgICByZXR1cm4gbW9kYWwuY3VycmVudDtcbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91bnRlZCA9ICgpID0+IHtcbiAgICBtYW5hZ2VyLm1vdW50KGdldE1vZGFsKCksIHtcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gICAgfSk7XG5cbiAgICAvLyBGaXggYSBidWcgb24gQ2hyb21lIHdoZXJlIHRoZSBzY3JvbGwgaXNuJ3QgaW5pdGlhbGx5IDAuXG4gICAgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1vZGFsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGdldERvYygpLmJvZHk7XG4gICAgbWFuYWdlci5hZGQoZ2V0TW9kYWwoKSwgcmVzb2x2ZWRDb250YWluZXIpO1xuXG4gICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgbW91bnRlZC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzVG9wTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBtYW5hZ2VyLmlzVG9wTW9kYWwoZ2V0TW9kYWwoKSksIFttYW5hZ2VyXSk7XG4gIGNvbnN0IGhhbmRsZVBvcnRhbFJlZiA9IHVzZUV2ZW50Q2FsbGJhY2sobm9kZSA9PiB7XG4gICAgbW91bnROb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiBpc1RvcE1vZGFsKCkpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9IGVsc2UgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWxSZWYuY3VycmVudCwgYXJpYUhpZGRlblByb3ApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG1hbmFnZXIucmVtb3ZlKGdldE1vZGFsKCksIGFyaWFIaWRkZW5Qcm9wKTtcbiAgfSwgW2FyaWFIaWRkZW5Qcm9wLCBtYW5hZ2VyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGhhbmRsZU9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNUcmFuc2l0aW9uIHx8ICFjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBoYW5kbGVDbG9zZSwgaGFzVHJhbnNpdGlvbiwgY2xvc2VBZnRlclRyYW5zaXRpb24sIGhhbmRsZU9wZW5dKTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlS2V5RG93biA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbktleUQ7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uS2V5RCA9IG90aGVySGFuZGxlcnMub25LZXlEb3duKSA9PSBudWxsIHx8IF9vdGhlckhhbmRsZXJzJG9uS2V5RC5jYWxsKG90aGVySGFuZGxlcnMsIGV2ZW50KTtcblxuICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdGFrZSBldmVudC5kZWZhdWx0UHJldmVudGVkIGludG8gYWNjb3VudDpcbiAgICAvL1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gICAgLy8gY2xpY2tpbmcgYSBjaGVja2JveCB0byBjaGVjayBpdCwgaGl0dGluZyBhIGJ1dHRvbiB0byBzdWJtaXQgYSBmb3JtLFxuICAgIC8vIGFuZCBoaXR0aW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGEgdGV4dCBpbnB1dCBldGMuXG4gICAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRXNjYXBlJyB8fCBldmVudC53aGljaCA9PT0gMjI5IHx8XG4gICAgLy8gV2FpdCB1bnRpbCBJTUUgaXMgc2V0dGxlZC5cbiAgICAhaXNUb3BNb2RhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGlzYWJsZUVzY2FwZUtleURvd24pIHtcbiAgICAgIC8vIFN3YWxsb3cgdGhlIGV2ZW50LCBpbiBjYXNlIHNvbWVvbmUgaXMgbGlzdGVuaW5nIGZvciB0aGUgZXNjYXBlIGtleSBvbiB0aGUgYm9keS5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ2VzY2FwZUtleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBvdGhlckhhbmRsZXJzID0+IGV2ZW50ID0+IHtcbiAgICB2YXIgX290aGVySGFuZGxlcnMkb25DbGljO1xuICAgIChfb3RoZXJIYW5kbGVycyRvbkNsaWMgPSBvdGhlckhhbmRsZXJzLm9uQ2xpY2spID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25DbGljLmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRSb290UHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcHJvcHNFdmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMocGFyYW1ldGVycyk7XG5cbiAgICAvLyBUaGUgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHNob3VsZG4ndCBiZSBzcHJlYWQgb24gdGhlIHJvb3QgZWxlbWVudFxuICAgIGRlbGV0ZSBwcm9wc0V2ZW50SGFuZGxlcnMub25UcmFuc2l0aW9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FeGl0ZWQ7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gX2V4dGVuZHMoe30sIHByb3BzRXZlbnRIYW5kbGVycywgb3RoZXJIYW5kbGVycyk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbktleURvd246IGNyZWF0ZUhhbmRsZUtleURvd24oZXh0ZXJuYWxFdmVudEhhbmRsZXJzKSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldEJhY2tkcm9wUHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gb3RoZXJIYW5kbGVycztcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZVxuICAgIH0sIGV4dGVybmFsRXZlbnRIYW5kbGVycywge1xuICAgICAgb25DbGljazogY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayhleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgb3BlblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRUcmFuc2l0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICAgICAgaWYgKG9uVHJhbnNpdGlvbkVudGVyKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkVudGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRXhpdGVkKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkV4aXRlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25FbnRlcjogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUVudGVyLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FbnRlciksXG4gICAgICBvbkV4aXRlZDogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUV4aXRlZCwgY2hpbGRyZW4gPT0gbnVsbCA/IHZvaWQgMCA6IGNoaWxkcmVuLnByb3BzLm9uRXhpdGVkKVxuICAgIH07XG4gIH07XG4gIHJldHVybiB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHJvb3RSZWY6IGhhbmRsZVJlZixcbiAgICBwb3J0YWxSZWY6IGhhbmRsZVBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VNb2RhbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTW9kYWwnLCBbJ3Jvb3QnLCAnaGlkZGVuJywgJ2JhY2tkcm9wJ10pO1xuZXhwb3J0IGRlZmF1bHQgbW9kYWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIiwgXCJvcGVuXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBIVE1MRWxlbWVudFR5cGUgZnJvbSAnQG11aS91dGlscy9IVE1MRWxlbWVudFR5cGUnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgdXNlTW9kYWwgZnJvbSAnLi91c2VNb2RhbCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgQmFja2Ryb3BDb21wb25lbnQgPSBNb2RhbEJhY2tkcm9wLFxuICAgICAgQmFja2Ryb3BQcm9wcyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2UsXG4gICAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgICBvcGVuLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByb3BzV2l0aERlZmF1bHRzID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayxcbiAgICBoaWRlQmFja2Ryb3AsXG4gICAga2VlcE1vdW50ZWRcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfSA9IHVzZU1vZGFsKF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIHJvb3RSZWY6IHJlZlxuICB9KSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICBleGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHt9O1xuICBpZiAoY2hpbGRyZW4ucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkUHJvcHMudGFiSW5kZXggPSAnLTEnO1xuICB9XG5cbiAgLy8gSXQncyBhIFRyYW5zaXRpb24gbGlrZSBjb21wb25lbnRcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBvbkVudGVyLFxuICAgICAgb25FeGl0ZWRcbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKCk7XG4gICAgY2hpbGRQcm9wcy5vbkVudGVyID0gb25FbnRlcjtcbiAgICBjaGlsZFByb3BzLm9uRXhpdGVkID0gb25FeGl0ZWQ7XG4gIH1cbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogTW9kYWxSb290O1xuICBjb25zdCBCYWNrZHJvcFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGJhY2tkcm9wID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RzJGJhY2tkcm9wIDogY29tcG9uZW50cy5CYWNrZHJvcCkgIT0gbnVsbCA/IF9yZWYyIDogQmFja2Ryb3BDb21wb25lbnQ7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRyb290ID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICBjb25zdCBiYWNrZHJvcFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJGJhY2tkcm9wID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdFByb3BzJGJhY2tkcm9wIDogY29tcG9uZW50c1Byb3BzLmJhY2tkcm9wO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcm9vdFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBnZXRTbG90UHJvcHM6IGdldFJvb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZixcbiAgICAgIGFzOiBjb21wb25lbnRcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgcm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiAoY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5oaWRkZW4pKVxuICB9KTtcbiAgY29uc3QgYmFja2Ryb3BQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhY2tkcm9wU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogYmFja2Ryb3BTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiBCYWNrZHJvcFByb3BzLFxuICAgIGdldFNsb3RQcm9wczogb3RoZXJIYW5kbGVycyA9PiB7XG4gICAgICByZXR1cm4gZ2V0QmFja2Ryb3BQcm9wcyhfZXh0ZW5kcyh7fSwgb3RoZXJIYW5kbGVycywge1xuICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICBpZiAob25CYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBvbkJhY2tkcm9wQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdGhlckhhbmRsZXJzICE9IG51bGwgJiYgb3RoZXJIYW5kbGVycy5vbkNsaWNrKSB7XG4gICAgICAgICAgICBvdGhlckhhbmRsZXJzLm9uQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsc3goYmFja2Ryb3BTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGJhY2tkcm9wU2xvdFByb3BzLmNsYXNzTmFtZSwgQmFja2Ryb3BQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogQmFja2Ryb3BQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuYmFja2Ryb3ApLFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCFoYXNUcmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUG9ydGFsLCB7XG4gICAgcmVmOiBwb3J0YWxSZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogWyFoaWRlQmFja2Ryb3AgJiYgQmFja2Ryb3BDb21wb25lbnQgPyAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFNsb3QsIF9leHRlbmRzKHt9LCBiYWNrZHJvcFByb3BzKSkgOiBudWxsLCAvKiNfX1BVUkVfXyovX2pzeChGb2N1c1RyYXAsIHtcbiAgICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1czogZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICAgICAgZGlzYWJsZUF1dG9Gb2N1czogZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1czogZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICAgICAgaXNFbmFibGVkOiBpc1RvcE1vZGFsLFxuICAgICAgICBvcGVuOiBvcGVuLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRQcm9wcylcbiAgICAgIH0pXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTW9kYWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdHMuYmFja2Ryb3BgIGluc3RlYWQuIFdoaWxlIHRoaXMgcHJvcCBjdXJyZW50bHkgd29ya3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBVc2UgdGhlIGBzbG90cy5iYWNrZHJvcGAgcHJvcCB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gcmVhZHkgZm9yIHRoZSBuZXh0IHZlcnNpb24gb2YgTWF0ZXJpYWwgVUkuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgbW9kYWwgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIG5vdCByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGVCYWNrZHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBlbnRlcnMuXG4gICAqL1xuICBvblRyYW5zaXRpb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBoYXMgZXhpdGVkLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBvcG92ZXInLCBzbG90KTtcbn1cbmNvbnN0IHBvcG92ZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wb3ZlcicsIFsncm9vdCcsICdwYXBlciddKTtcbmV4cG9ydCBkZWZhdWx0IHBvcG92ZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JFbFwiLCBcImFuY2hvck9yaWdpblwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYW5jaG9yUmVmZXJlbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb250YWluZXJcIiwgXCJlbGV2YXRpb25cIiwgXCJtYXJnaW5UaHJlc2hvbGRcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCIsIFwidHJhbnNmb3JtT3JpZ2luXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCJdLFxuICBfZXhjbHVkZWQzID0gW1wic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGludGVnZXJQcm9wVHlwZSBmcm9tICdAbXVpL3V0aWxzL2ludGVnZXJQcm9wVHlwZSc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgdXNlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvdXNlU2xvdFByb3BzJztcbmltcG9ydCBpc0hvc3RDb21wb25lbnQgZnJvbSAnQG11aS91dGlscy9pc0hvc3RDb21wb25lbnQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuLi91dGlscy9kZWJvdW5jZSc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBvd25lcldpbmRvdyBmcm9tICcuLi91dGlscy9vd25lcldpbmRvdyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IE1vZGFsIGZyb20gJy4uL01vZGFsJztcbmltcG9ydCBQYXBlckJhc2UgZnJvbSAnLi4vUGFwZXInO1xuaW1wb3J0IHsgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcG9wb3ZlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRUb3AocmVjdCwgdmVydGljYWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgdmVydGljYWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gdmVydGljYWw7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQgLyAyO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnYm90dG9tJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0O1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0TGVmdChyZWN0LCBob3Jpem9udGFsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBpZiAodHlwZW9mIGhvcml6b250YWwgPT09ICdudW1iZXInKSB7XG4gICAgb2Zmc2V0ID0gaG9yaXpvbnRhbDtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGggLyAyO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdyaWdodCcpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoO1xuICB9XG4gIHJldHVybiBvZmZzZXQ7XG59XG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSh0cmFuc2Zvcm1PcmlnaW4pIHtcbiAgcmV0dXJuIFt0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCwgdHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsXS5tYXAobiA9PiB0eXBlb2YgbiA9PT0gJ251bWJlcicgPyBgJHtufXB4YCA6IG4pLmpvaW4oJyAnKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkge1xuICByZXR1cm4gdHlwZW9mIGFuY2hvckVsID09PSAnZnVuY3Rpb24nID8gYW5jaG9yRWwoKSA6IGFuY2hvckVsO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgUG9wb3ZlclJvb3QgPSBzdHlsZWQoTW9kYWwsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUGFwZXIgPSBzdHlsZWQoUGFwZXJCYXNlLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1BhcGVyJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucGFwZXJcbn0pKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG92ZXJmbG93WTogJ2F1dG8nLFxuICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAvLyBTbyB3ZSBzZWUgdGhlIHBvcG92ZXIgd2hlbiBpdCdzIGVtcHR5LlxuICAvLyBJdCdzIG1vc3QgbGlrZWx5IG9uIGlzc3VlIG9uIHVzZXJsYW5kLlxuICBtaW5XaWR0aDogMTYsXG4gIG1pbkhlaWdodDogMTYsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMzJweCknLFxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcG92ZXIoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdFByb3BzJHBhcGVyLCBfc2xvdHMkcm9vdCwgX3Nsb3RzJHBhcGVyO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBvcG92ZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBhbmNob3JFbCxcbiAgICAgIGFuY2hvck9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBhbmNob3JQb3NpdGlvbixcbiAgICAgIGFuY2hvclJlZmVyZW5jZSA9ICdhbmNob3JFbCcsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICAgIGVsZXZhdGlvbiA9IDgsXG4gICAgICBtYXJnaW5UaHJlc2hvbGQgPSAxNixcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzOiBQYXBlclByb3BzUHJvcCA9IHt9LFxuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICB0cmFuc2Zvcm1PcmlnaW4gPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnXG4gICAgICB9LFxuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IEdyb3csXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvblByb3AgPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRwYXBlciA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHNQcm9wO1xuICBjb25zdCBwYXBlclJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBoYW5kbGVQYXBlclJlZiA9IHVzZUZvcmtSZWYocGFwZXJSZWYsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMucmVmKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFuY2hvck9yaWdpbixcbiAgICBhbmNob3JSZWZlcmVuY2UsXG4gICAgZWxldmF0aW9uLFxuICAgIG1hcmdpblRocmVzaG9sZCxcbiAgICBleHRlcm5hbFBhcGVyU2xvdFByb3BzLFxuICAgIHRyYW5zZm9ybU9yaWdpbixcbiAgICBUcmFuc2l0aW9uQ29tcG9uZW50LFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCxcbiAgICBUcmFuc2l0aW9uUHJvcHNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICAvLyBSZXR1cm5zIHRoZSB0b3AvbGVmdCBvZmZzZXQgb2YgdGhlIHBvc2l0aW9uXG4gIC8vIHRvIGF0dGFjaCB0byBvbiB0aGUgYW5jaG9yIGVsZW1lbnQgKG9yIGJvZHkgaWYgbm9uZSBpcyBwcm92aWRlZClcbiAgY29uc3QgZ2V0QW5jaG9yT2Zmc2V0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdhbmNob3JQb3NpdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghYW5jaG9yUG9zaXRpb24pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFlvdSBuZWVkIHRvIHByb3ZpZGUgYSBgYW5jaG9yUG9zaXRpb25gIHByb3Agd2hlbiB1c2luZyAnICsgJzxQb3BvdmVyIGFuY2hvclJlZmVyZW5jZT1cImFuY2hvclBvc2l0aW9uXCIgLz4uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNob3JQb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG5cbiAgICAvLyBJZiBhbiBhbmNob3IgZWxlbWVudCB3YXNuJ3QgcHJvdmlkZWQsIGp1c3QgdXNlIHRoZSBwYXJlbnQgYm9keSBlbGVtZW50IG9mIHRoaXMgUG9wb3ZlclxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSByZXNvbHZlZEFuY2hvckVsICYmIHJlc29sdmVkQW5jaG9yRWwubm9kZVR5cGUgPT09IDEgPyByZXNvbHZlZEFuY2hvckVsIDogb3duZXJEb2N1bWVudChwYXBlclJlZi5jdXJyZW50KS5ib2R5O1xuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBib3ggPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsICdUaGUgYW5jaG9yIGVsZW1lbnQgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGxheW91dC4nLCBcIk1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBwcmVzZW50IGluIHRoZSBkb2N1bWVudCBvciB0aGF0IGl0J3Mgbm90IGRpc3BsYXkgbm9uZS5cIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBhbmNob3JSZWN0LnRvcCArIGdldE9mZnNldFRvcChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4udmVydGljYWwpLFxuICAgICAgbGVmdDogYW5jaG9yUmVjdC5sZWZ0ICsgZ2V0T2Zmc2V0TGVmdChhbmNob3JSZWN0LCBhbmNob3JPcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsLCBhbmNob3JPcmlnaW4udmVydGljYWwsIGFuY2hvclBvc2l0aW9uLCBhbmNob3JSZWZlcmVuY2VdKTtcblxuICAvLyBSZXR1cm5zIHRoZSBiYXNlIHRyYW5zZm9ybSBvcmlnaW4gdXNpbmcgdGhlIGVsZW1lbnRcbiAgY29uc3QgZ2V0VHJhbnNmb3JtT3JpZ2luID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbVJlY3QgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbDogZ2V0T2Zmc2V0VG9wKGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWwpLFxuICAgICAgaG9yaXpvbnRhbDogZ2V0T2Zmc2V0TGVmdChlbGVtUmVjdCwgdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwpXG4gICAgfTtcbiAgfSwgW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdKTtcbiAgY29uc3QgZ2V0UG9zaXRpb25pbmdTdHlsZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGVsZW1SZWN0ID0ge1xuICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIG9yaWdpbiBwb2ludCBvbiB0aGUgZWxlbWVudCBpdHNlbGZcbiAgICBjb25zdCBlbGVtVHJhbnNmb3JtT3JpZ2luID0gZ2V0VHJhbnNmb3JtT3JpZ2luKGVsZW1SZWN0KTtcbiAgICBpZiAoYW5jaG9yUmVmZXJlbmNlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogbnVsbCxcbiAgICAgICAgbGVmdDogbnVsbCxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIG9mZnNldCBvZiB0aGUgYW5jaG9yaW5nIGVsZW1lbnRcbiAgICBjb25zdCBhbmNob3JPZmZzZXQgPSBnZXRBbmNob3JPZmZzZXQoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBlbGVtZW50IHBvc2l0aW9uaW5nXG4gICAgbGV0IHRvcCA9IGFuY2hvck9mZnNldC50b3AgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLnZlcnRpY2FsO1xuICAgIGxldCBsZWZ0ID0gYW5jaG9yT2Zmc2V0LmxlZnQgLSBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWw7XG4gICAgY29uc3QgYm90dG9tID0gdG9wICsgZWxlbVJlY3QuaGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIGVsZW1SZWN0LndpZHRoO1xuXG4gICAgLy8gVXNlIHRoZSBwYXJlbnQgd2luZG93IG9mIHRoZSBhbmNob3JFbCBpZiBwcm92aWRlZFxuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpO1xuXG4gICAgLy8gV2luZG93IHRocmVzaG9sZHMgdGFraW5nIHJlcXVpcmVkIG1hcmdpbiBpbnRvIGFjY291bnRcbiAgICBjb25zdCBoZWlnaHRUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgY29uc3Qgd2lkdGhUaHJlc2hvbGQgPSBjb250YWluZXJXaW5kb3cuaW5uZXJXaWR0aCAtIG1hcmdpblRocmVzaG9sZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB2ZXJ0aWNhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiB0b3AgPCBtYXJnaW5UaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0b3AgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBib3R0b20gPiBoZWlnaHRUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBib3R0b20gLSBoZWlnaHRUaHJlc2hvbGQ7XG4gICAgICB0b3AgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWwgKz0gZGlmZjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChlbGVtUmVjdC5oZWlnaHQgPiBoZWlnaHRUaHJlc2hvbGQgJiYgZWxlbVJlY3QuaGVpZ2h0ICYmIGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgcG9wb3ZlciBjb21wb25lbnQgaXMgdG9vIHRhbGwuJywgYFNvbWUgcGFydCBvZiBpdCBjYW4gbm90IGJlIHNlZW4gb24gdGhlIHNjcmVlbiAoJHtlbGVtUmVjdC5oZWlnaHQgLSBoZWlnaHRUaHJlc2hvbGR9cHgpLmAsICdQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgYG1heC1oZWlnaHRgIHRvIGltcHJvdmUgdGhlIHVzZXItZXhwZXJpZW5jZS4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGhvcml6b250YWwgYXhpcyBuZWVkcyBzaGlmdGluZ1xuICAgIGlmIChtYXJnaW5UaHJlc2hvbGQgIT09IG51bGwgJiYgbGVmdCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGxlZnQgLSBtYXJnaW5UaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0ID4gd2lkdGhUaHJlc2hvbGQpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSByaWdodCAtIHdpZHRoVGhyZXNob2xkO1xuICAgICAgbGVmdCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsICs9IGRpZmY7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGAke01hdGgucm91bmQodG9wKX1weGAsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKGxlZnQpfXB4YCxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUoZWxlbVRyYW5zZm9ybU9yaWdpbilcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIGFuY2hvclJlZmVyZW5jZSwgZ2V0QW5jaG9yT2Zmc2V0LCBnZXRUcmFuc2Zvcm1PcmlnaW4sIG1hcmdpblRocmVzaG9sZF0pO1xuICBjb25zdCBbaXNQb3NpdGlvbmVkLCBzZXRJc1Bvc2l0aW9uZWRdID0gUmVhY3QudXNlU3RhdGUob3Blbik7XG4gIGNvbnN0IHNldFBvc2l0aW9uaW5nU3R5bGVzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBwYXBlclJlZi5jdXJyZW50O1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IGdldFBvc2l0aW9uaW5nU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKHBvc2l0aW9uaW5nLnRvcCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBwb3NpdGlvbmluZy50b3A7XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbmluZy5sZWZ0ICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbmluZy5sZWZ0O1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHBvc2l0aW9uaW5nLnRyYW5zZm9ybU9yaWdpbjtcbiAgICBzZXRJc1Bvc2l0aW9uZWQodHJ1ZSk7XG4gIH0sIFtnZXRQb3NpdGlvbmluZ1N0eWxlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNldFBvc2l0aW9uaW5nU3R5bGVzKTtcbiAgfSwgW2FuY2hvckVsLCBkaXNhYmxlU2Nyb2xsTG9jaywgc2V0UG9zaXRpb25pbmdTdHlsZXNdKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRJc1Bvc2l0aW9uZWQoZmFsc2UpO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiBvcGVuID8ge1xuICAgIHVwZGF0ZVBvc2l0aW9uOiAoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH1cbiAgfSA6IG51bGwsIFtvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb250YWluZXJXaW5kb3cgPSBvd25lcldpbmRvdyhhbmNob3JFbCk7XG4gICAgY29udGFpbmVyV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZS5jbGVhcigpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2FuY2hvckVsLCBvcGVuLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uUHJvcDtcbiAgaWYgKHRyYW5zaXRpb25EdXJhdGlvblByb3AgPT09ICdhdXRvJyAmJiAhVHJhbnNpdGlvbkNvbXBvbmVudC5tdWlTdXBwb3J0QXV0bykge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyUHJvcCB8fCAoYW5jaG9yRWwgPyBvd25lckRvY3VtZW50KHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkpLmJvZHkgOiB1bmRlZmluZWQpO1xuICBjb25zdCBSb290U2xvdCA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBQb3BvdmVyUm9vdDtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IFBvcG92ZXJQYXBlcjtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsIHtcbiAgICAgIHN0eWxlOiBpc1Bvc2l0aW9uZWQgPyBleHRlcm5hbFBhcGVyU2xvdFByb3BzLnN0eWxlIDogX2V4dGVuZHMoe30sIGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUsIHtcbiAgICAgICAgb3BhY2l0eTogMFxuICAgICAgfSlcbiAgICB9KSxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHJlZjogaGFuZGxlUGFwZXJSZWZcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucGFwZXIsIGV4dGVybmFsUGFwZXJTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuY2xhc3NOYW1lKVxuICB9KTtcbiAgY29uc3QgX3VzZVNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogKHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpIHx8IHt9LFxuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgICAgcmVmLFxuICAgICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgICBiYWNrZHJvcDoge1xuICAgICAgICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG9wZW5cbiAgICAgIH0sXG4gICAgICBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0pLFxuICAgIHtcbiAgICAgIHNsb3RQcm9wczogcm9vdFNsb3RQcm9wc1Byb3BcbiAgICB9ID0gX3VzZVNsb3RQcm9wcyxcbiAgICByb290UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdXNlU2xvdFByb3BzLCBfZXhjbHVkZWQzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCAhaXNIb3N0Q29tcG9uZW50KFJvb3RTbG90KSAmJiB7XG4gICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcCxcbiAgICBkaXNhYmxlU2Nyb2xsTG9ja1xuICB9LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGFwcGVhcjogdHJ1ZSxcbiAgICAgIGluOiBvcGVuLFxuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgdGltZW91dDogdHJhbnNpdGlvbkR1cmF0aW9uXG4gICAgfSwgVHJhbnNpdGlvblByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goUGFwZXJTbG90LCBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgIH0pKVxuICAgIH0pKVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBvcG92ZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdXBkYXRlUG9zaXRpb24oKSBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIFtQb3BvdmVyVmlydHVhbEVsZW1lbnRdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLyN2aXJ0dWFsLWVsZW1lbnQpLFxuICAgKiBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIEl0J3MgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgYW5jaG9yRWw6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5vcGVuICYmICghcHJvcHMuYW5jaG9yUmVmZXJlbmNlIHx8IHByb3BzLmFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvckVsJykpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBib3ggPSByZXNvbHZlZEFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoWydNVUk6IFRoZSBgYW5jaG9yRWxgIHByb3AgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCBpcyBpbnZhbGlkLicsIGBJdCBzaG91bGQgYmUgYW4gRWxlbWVudCBvciBQb3BvdmVyVmlydHVhbEVsZW1lbnQgaW5zdGFuY2UgYnV0IGl0J3MgXFxgJHtyZXNvbHZlZEFuY2hvckVsfVxcYCBpbnN0ZWFkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIGFuY2hvciB3aGVyZSB0aGUgcG9wb3ZlcidzXG4gICAqIGBhbmNob3JFbGAgd2lsbCBhdHRhY2ggdG8uIFRoaXMgaXMgbm90IHVzZWQgd2hlbiB0aGVcbiAgICogYW5jaG9yUmVmZXJlbmNlIGlzICdhbmNob3JQb3NpdGlvbicuXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0XS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAqIH1cbiAgICovXG4gIGFuY2hvck9yaWdpbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnbGVmdCcsICdyaWdodCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWQsXG4gICAgdmVydGljYWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJ10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvc2l0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogVGhlIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyBjbGllbnQgYXJlYS5cbiAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGxlZnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICB0b3A6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSxcbiAgLyoqXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyB3aGljaCBhbmNob3IgcHJvcCB0byByZWZlciB0byB3aGVuIHNldHRpbmdcbiAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAZGVmYXVsdCAnYW5jaG9yRWwnXG4gICAqL1xuICBhbmNob3JSZWZlcmVuY2U6IFByb3BUeXBlcy5vbmVPZihbJ2FuY2hvckVsJywgJ2FuY2hvclBvc2l0aW9uJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgY29tcG9uZW50IGluc3RhbmNlLCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBwYXNzZWQgdG8gdGhlIE1vZGFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgYW5jaG9yRWwncyB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBlbGV2YXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIGVsZXZhdGlvbjogaW50ZWdlclByb3BUeXBlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBjbG9zZSB0byB0aGUgZWRnZSBvZiB0aGUgd2luZG93IHRoZSBwb3BvdmVyIGNhbiBhcHBlYXIuXG4gICAqIElmIG51bGwsIHRoZSBwb3BvdmVyIHdpbGwgbm90IGJlIGNvbnN0cmFpbmVkIGJ5IHRoZSB3aW5kb3cuXG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBtYXJnaW5UaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQYXBlcmBdKC9tYXRlcmlhbC11aS9hcGkvcGFwZXIvKSBlbGVtZW50LlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIGBzbG90UHJvcHMucGFwZXJgIGFuZCB3aWxsIGJlIG92ZXJyaWRlbiBieSBpdCBpZiBib3RoIGFyZSB1c2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5wYXBlcmAgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFBhcGVyUHJvcHM6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnNoYXBlKHtcbiAgICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHBvaW50IG9uIHRoZSBwb3BvdmVyIHdoaWNoXG4gICAqIHdpbGwgYXR0YWNoIHRvIHRoZSBhbmNob3IncyBvcmlnaW4uXG4gICAqXG4gICAqIE9wdGlvbnM6XG4gICAqIHZlcnRpY2FsOiBbdG9wLCBjZW50ZXIsIGJvdHRvbSwgeChweCldO1xuICAgKiBob3Jpem9udGFsOiBbbGVmdCwgY2VudGVyLCByaWdodCwgeChweCldLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgdHJhbnNmb3JtT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgR3Jvd1xuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXI7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51Jywgc2xvdCk7XG59XG5jb25zdCBtZW51Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnUnLCBbJ3Jvb3QnLCAncGFwZXInLCAnbGlzdCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVBdXRvRm9jdXNJdGVtXCIsIFwiTWVudUxpc3RQcm9wc1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcIlBvcG92ZXJDbGFzc2VzXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwidmFyaWFudFwiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBIVE1MRWxlbWVudFR5cGUgZnJvbSAnQG11aS91dGlscy9IVE1MRWxlbWVudFR5cGUnO1xuaW1wb3J0IHsgdXNlUnRsIH0gZnJvbSAnQG11aS9zeXN0ZW0vUnRsUHJvdmlkZXInO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgTWVudUxpc3QgZnJvbSAnLi4vTWVudUxpc3QnO1xuaW1wb3J0IFBvcG92ZXIsIHsgUG9wb3ZlclBhcGVyIH0gZnJvbSAnLi4vUG9wb3Zlcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0TWVudVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJUTF9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xufTtcbmNvbnN0IExUUl9PUklHSU4gPSB7XG4gIHZlcnRpY2FsOiAndG9wJyxcbiAgaG9yaXpvbnRhbDogJ2xlZnQnXG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIHBhcGVyOiBbJ3BhcGVyJ10sXG4gICAgbGlzdDogWydsaXN0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRNZW51VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBNZW51Um9vdCA9IHN0eWxlZChQb3BvdmVyLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgTWVudVBhcGVyID0gc3R5bGVkKFBvcG92ZXJQYXBlciwge1xuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIC8vIHNwZWNaOiBUaGUgbWF4aW11bSBoZWlnaHQgb2YgYSBzaW1wbGUgbWVudSBzaG91bGQgYmUgb25lIG9yIG1vcmUgcm93cyBsZXNzIHRoYW4gdGhlIHZpZXdcbiAgLy8gaGVpZ2h0LiBUaGlzIGVuc3VyZXMgYSB0YXBwYWJsZSBhcmVhIG91dHNpZGUgb2YgdGhlIHNpbXBsZSBtZW51IHdpdGggd2hpY2ggdG8gZGlzbWlzc1xuICAvLyB0aGUgbWVudS5cbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gOTZweCknLFxuICAvLyBBZGQgaU9TIG1vbWVudHVtIHNjcm9sbGluZyBmb3IgaU9TIDwgMTMuMFxuICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xufSk7XG5jb25zdCBNZW51TWVudUxpc3QgPSBzdHlsZWQoTWVudUxpc3QsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnTGlzdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmxpc3Rcbn0pKHtcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBNZW51ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90cyRwYXBlciwgX3Nsb3RQcm9wcyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlNZW51J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICAgIE1lbnVMaXN0UHJvcHMgPSB7fSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvcGVuLFxuICAgICAgUGFwZXJQcm9wcyA9IHt9LFxuICAgICAgUG9wb3ZlckNsYXNzZXMsXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSAnYXV0bycsXG4gICAgICBUcmFuc2l0aW9uUHJvcHM6IHtcbiAgICAgICAgb25FbnRlcmluZ1xuICAgICAgfSA9IHt9LFxuICAgICAgdmFyaWFudCA9ICdzZWxlY3RlZE1lbnUnLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgaXNSdGwgPSB1c2VSdGwoKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSxcbiAgICBNZW51TGlzdFByb3BzLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYXV0b0ZvY3VzSXRlbSA9IGF1dG9Gb2N1cyAmJiAhZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gJiYgb3BlbjtcbiAgY29uc3QgbWVudUxpc3RBY3Rpb25zUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudCkge1xuICAgICAgbWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQuYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIoZWxlbWVudCwge1xuICAgICAgICBkaXJlY3Rpb246IGlzUnRsID8gJ3J0bCcgOiAnbHRyJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUxpc3RLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ3RhYktleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgTWVudSBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoaWxkLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodmFyaWFudCA9PT0gJ3NlbGVjdGVkTWVudScgJiYgY2hpbGQucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgUGFwZXJTbG90ID0gKF9zbG90cyRwYXBlciA9IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogTWVudVBhcGVyO1xuICBjb25zdCBwYXBlckV4dGVybmFsU2xvdFByb3BzID0gKF9zbG90UHJvcHMkcGFwZXIgPSBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wcztcbiAgY29uc3Qgcm9vdFNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IHNsb3RzLnJvb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHNsb3RQcm9wcy5yb290LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBbY2xhc3Nlcy5yb290LCBjbGFzc05hbWVdXG4gIH0pO1xuICBjb25zdCBwYXBlclNsb3RQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IFBhcGVyU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5wYXBlclxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE1lbnVSb290LCBfZXh0ZW5kcyh7XG4gICAgb25DbG9zZTogb25DbG9zZSxcbiAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6IGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIH0sXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBpc1J0bCA/IFJUTF9PUklHSU4gOiBMVFJfT1JJR0lOLFxuICAgIHNsb3RzOiB7XG4gICAgICBwYXBlcjogUGFwZXJTbG90LFxuICAgICAgcm9vdDogc2xvdHMucm9vdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiB7XG4gICAgICByb290OiByb290U2xvdFByb3BzLFxuICAgICAgcGFwZXI6IHBhcGVyU2xvdFByb3BzXG4gICAgfSxcbiAgICBvcGVuOiBvcGVuLFxuICAgIHJlZjogcmVmLFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wczogX2V4dGVuZHMoe1xuICAgICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmdcbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBQb3BvdmVyQ2xhc3NlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTWVudU1lbnVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICBvbktleURvd246IGhhbmRsZUxpc3RLZXlEb3duLFxuICAgICAgYWN0aW9uczogbWVudUxpc3RBY3Rpb25zUmVmLFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMgJiYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gLTEgfHwgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0pLFxuICAgICAgYXV0b0ZvY3VzSXRlbTogYXV0b0ZvY3VzSXRlbSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRcbiAgICB9LCBNZW51TGlzdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5saXN0LCBNZW51TGlzdFByb3BzLmNsYXNzTmFtZSksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWVudS5cbiAgICovXG4gIGFuY2hvckVsOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCAoRGVmYXVsdCkgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgaWYgbm8gZm9jdXNhYmxlIGNoaWxkIGlzIGZvdW5kLiBEaXNhYmxlZFxuICAgKiBjaGlsZHJlbiBhcmUgbm90IGZvY3VzYWJsZS4gSWYgeW91IHNldCB0aGlzIHByb3AgdG8gYGZhbHNlYCBmb2N1cyB3aWxsIGJlIHBsYWNlZFxuICAgKiBvbiB0aGUgcGFyZW50IG1vZGFsIGNvbnRhaW5lci4gVGhpcyBoYXMgc2V2ZXJlIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zXG4gICAqIGFuZCBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGlmIHlvdSBtYW5hZ2UgZm9jdXMgb3RoZXJ3aXNlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWVudSBjb250ZW50cywgbm9ybWFsbHkgYE1lbnVJdGVtYHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogV2hlbiBvcGVuaW5nIHRoZSBtZW51IHdpbGwgbm90IGZvY3VzIHRoZSBhY3RpdmUgaXRlbSBidXQgdGhlIGBbcm9sZT1cIm1lbnVcIl1gXG4gICAqIHVubGVzcyBgYXV0b0ZvY3VzYCBpcyBhbHNvIHNldCB0byBgZmFsc2VgLiBOb3QgdXNpbmcgdGhlIGRlZmF1bHQgbWVhbnMgbm90XG4gICAqIGZvbGxvd2luZyBXQUktQVJJQSBhdXRob3JpbmcgcHJhY3RpY2VzLiBQbGVhc2UgYmUgY29uc2lkZXJhdGUgYWJvdXQgcG9zc2libGVcbiAgICogYWNjZXNzaWJpbGl0eSBpbXBsaWNhdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlQXV0b0ZvY3VzSXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVMaXN0YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LWxpc3QvKSBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgTWVudUxpc3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBDYW4gYmU6IGBcImVzY2FwZUtleURvd25cImAsIGBcImJhY2tkcm9wQ2xpY2tcImAsIGBcInRhYktleURvd25cImAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBQYXBlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogYGNsYXNzZXNgIHByb3AgYXBwbGllZCB0byB0aGUgW2BQb3BvdmVyYF0oL21hdGVyaWFsLXVpL2FwaS9wb3BvdmVyLykgZWxlbWVudC5cbiAgICovXG4gIFBvcG92ZXJDbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGhlIHRyYW5zaXRpb24gaW4gYG1zYCwgb3IgJ2F1dG8nXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLiBVc2UgYG1lbnVgIHRvIHByZXZlbnQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBpbXBhY3RpbmcgdGhlIGluaXRpYWwgZm9jdXMuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTmF0aXZlU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBuYXRpdmVTZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTmF0aXZlU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBuYXRpdmVTZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG5hdGl2ZVNlbGVjdENsYXNzZXMsIHsgZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL25hdGl2ZVNlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgLy8gV2hlbiBpbnRlcmFjdGluZyBxdWlja2x5LCB0aGUgdGV4dCBjYW4gZW5kIHVwIHNlbGVjdGVkLlxuICAvLyBOYXRpdmUgc2VsZWN0IGNhbid0IGJlIHNlbGVjdGVkIGVpdGhlci5cbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBib3JkZXJSYWRpdXM6IDAsXG4gIC8vIFJlc2V0XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICAnJjpmb2N1cyc6IF9leHRlbmRzKHt9LCB0aGVtZS52YXJzID8ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4wNSlgXG4gIH0gOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjA1KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSdcbiAgfSwge1xuICAgIGJvcmRlclJhZGl1czogMCAvLyBSZXNldCBDaHJvbWUgc3R5bGVcbiAgfSksXG4gIC8vIFJlbW92ZSBJRTExIGFycm93XG4gICcmOjotbXMtZXhwYW5kJzoge1xuICAgIGRpc3BsYXk6ICdub25lJ1xuICB9LFxuICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJyZbbXVsdGlwbGVdJzoge1xuICAgIGhlaWdodDogJ2F1dG8nXG4gIH0sXG4gICcmOm5vdChbbXVsdGlwbGVdKSBvcHRpb24sICY6bm90KFttdWx0aXBsZV0pIG9wdGdyb3VwJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5wYXBlclxuICB9LFxuICAvLyBCdW1wIHNwZWNpZmljaXR5IHRvIGFsbG93IGV4dGVuZGluZyBjdXN0b20gaW5wdXRzXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAyNCxcbiAgICBtaW5XaWR0aDogMTYgLy8gU28gaXQgZG9lc24ndCBjb2xsYXBzZS5cbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAzMlxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICcmOmZvY3VzJzoge1xuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyAvLyBSZXNldCB0aGUgcmVzZXQgZm9yIENocm9tZSBzdHlsZVxuICB9LFxuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ3NlbGVjdCcsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnNlbGVjdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCB7XG4gICAgICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLm11bHRpcGxlfWBdOiBzdHlsZXMubXVsdGlwbGVcbiAgICB9XTtcbiAgfVxufSkobmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzKTtcbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgLy8gV2UgdXNlIGEgcG9zaXRpb24gYWJzb2x1dGUgb3ZlciBhIGZsZXhib3ggaW4gb3JkZXIgdG8gZm9yd2FyZCB0aGUgcG9pbnRlciBldmVudHNcbiAgLy8gdG8gdGhlIGlucHV0IGFuZCB0byBzdXBwb3J0IHdyYXBwaW5nIHRhZ3MuLlxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogJ2NhbGMoNTAlIC0gLjVlbSknLFxuICAvLyBDZW50ZXIgdmVydGljYWxseSwgaGVpZ2h0IGlzIDFlbVxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIC8vIERvbid0IGJsb2NrIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSBzZWxlY3QgdW5kZXIgdGhlIGljb24uXG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLFxuICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59LCBvd25lclN0YXRlLm9wZW4gJiYge1xuICB0cmFuc2Zvcm06ICdyb3RhdGUoMTgwZGVnKSdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICByaWdodDogN1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IE5hdGl2ZVNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTmF0aXZlU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGVycm9yLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVkLFxuICAgIHZhcmlhbnQsXG4gICAgZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgcmVmOiBpbnB1dFJlZiB8fCByZWZcbiAgICB9LCBvdGhlcikpLCBwcm9wcy5tdWx0aXBsZSA/IG51bGwgOiAvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RJY29uLCB7XG4gICAgICBhczogSWNvbkNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvblxuICAgIH0pXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTmF0aXZlU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGA8b3B0aW9uPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNlbGVjdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBzZWxlY3QgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVXNlIHRoYXQgcHJvcCB0byBwYXNzIGEgcmVmIHRvIHRoZSBuYXRpdmUgc2VsZWN0IGVsZW1lbnQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTmF0aXZlU2VsZWN0SW5wdXQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBzZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnZm9jdXNlZCcsICdpY29uJywgJ2ljb25PcGVuJywgJ2ljb25GaWxsZWQnLCAnaWNvbk91dGxpbmVkJywgJ2ljb25TdGFuZGFyZCcsICduYXRpdmVJbnB1dCcsICdlcnJvciddKTtcbmV4cG9ydCBkZWZhdWx0IHNlbGVjdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXJpYS1sYWJlbFwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGVmYXVsdE9wZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImRpc3BsYXlFbXB0eVwiLCBcImVycm9yXCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbG9zZVwiLCBcIm9uRm9jdXNcIiwgXCJvbk9wZW5cIiwgXCJvcGVuXCIsIFwicmVhZE9ubHlcIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInRhYkluZGV4XCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBNZW51IGZyb20gJy4uL01lbnUvTWVudSc7XG5pbXBvcnQgeyBuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIG5hdGl2ZVNlbGVjdEljb25TdHlsZXMgfSBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCwgeyBzbG90U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgc2VsZWN0Q2xhc3NlcywgeyBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vc2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW1xuICAgIC8vIFdpbiBzcGVjaWZpY2l0eSBvdmVyIHRoZSBpbnB1dCBiYXNlXG4gICAge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlcy5zZWxlY3RcbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1cbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLmVycm9yfWBdOiBzdHlsZXMuZXJyb3JcbiAgICB9LCB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLm11bHRpcGxlfWBdOiBzdHlsZXMubXVsdGlwbGVcbiAgICB9XTtcbiAgfVxufSkobmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCB7XG4gIC8vIFdpbiBzcGVjaWZpY2l0eSBvdmVyIHRoZSBpbnB1dCBiYXNlXG4gIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgLy8gUmVzZXRzIGZvciBtdWx0aXBsZSBzZWxlY3Qgd2l0aCBjaGlwc1xuICAgIG1pbkhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXF1aXJlZCBmb3Igc2VsZWN0XFx0ZXh0LWZpZWxkIGhlaWdodCBjb25zaXN0ZW5jeVxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgfVxufSk7XG5jb25zdCBTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG5jb25zdCBTZWxlY3ROYXRpdmVJbnB1dCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlTZWxlY3QnLFxuICBzbG90OiAnTmF0aXZlSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5uYXRpdmVJbnB1dFxufSkoe1xuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBvcGFjaXR5OiAwLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG59KTtcbmZ1bmN0aW9uIGFyZUVxdWFsVmFsdWVzKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cblxuICAvLyBUaGUgdmFsdWUgY291bGQgYmUgYSBudW1iZXIsIHRoZSBET00gd2lsbCBzdHJpbmdpZnkgaXQgYW55d2F5LlxuICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG59XG5mdW5jdGlvbiBpc0VtcHR5KGRpc3BsYXkpIHtcbiAgcmV0dXJuIGRpc3BsYXkgPT0gbnVsbCB8fCB0eXBlb2YgZGlzcGxheSA9PT0gJ3N0cmluZycgJiYgIWRpc3BsYXkudHJpbSgpO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJywgZXJyb3IgJiYgJ2Vycm9yJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXSxcbiAgICBuYXRpdmVJbnB1dDogWyduYXRpdmVJbnB1dCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgdmFyIF9NZW51UHJvcHMkc2xvdFByb3BzO1xuICBjb25zdCB7XG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgYXV0b1dpZHRoLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0T3BlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzcGxheUVtcHR5LFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZjogaW5wdXRSZWZQcm9wLFxuICAgICAgbGFiZWxJZCxcbiAgICAgIE1lbnVQcm9wcyA9IHt9LFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkNsb3NlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgICAgcmVhZE9ubHksXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyA9IHt9LFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4UHJvcFxuICAgICAgLy8gY2F0Y2hpbmcgYHR5cGVgIGZyb20gSW5wdXQgd2hpY2ggbWFrZXMgbm8gc2Vuc2UgZm9yIFNlbGVjdElucHV0XG4gICAgICAsXG5cbiAgICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogdmFsdWVQcm9wLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSxcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgW29wZW5TdGF0ZSwgc2V0T3BlblN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRPcGVuLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgZGlzcGxheVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgW2Rpc3BsYXlOb2RlLCBzZXREaXNwbGF5Tm9kZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzT3BlbkNvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZihvcGVuUHJvcCAhPSBudWxsKTtcbiAgY29uc3QgW21lbnVNaW5XaWR0aFN0YXRlLCBzZXRNZW51TWluV2lkdGhTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgaW5wdXRSZWZQcm9wKTtcbiAgY29uc3QgaGFuZGxlRGlzcGxheVJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGRpc3BsYXlSZWYuY3VycmVudCA9IG5vZGU7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHNldERpc3BsYXlOb2RlKG5vZGUpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBhbmNob3JFbGVtZW50ID0gZGlzcGxheU5vZGUgPT0gbnVsbCA/IHZvaWQgMCA6IGRpc3BsYXlOb2RlLnBhcmVudE5vZGU7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoaGFuZGxlUmVmLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9LFxuICAgIG5vZGU6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgdmFsdWVcbiAgfSksIFt2YWx1ZV0pO1xuXG4gIC8vIFJlc2l6ZSBtZW51IG9uIGBkZWZhdWx0T3BlbmAgYXV0b21hdGljIHRvZ2dsZS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdE9wZW4gJiYgb3BlblN0YXRlICYmIGRpc3BsYXlOb2RlICYmICFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZGlzcGxheU5vZGUsIGF1dG9XaWR0aF0pO1xuICAvLyBgaXNPcGVuQ29udHJvbGxlZGAgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIHN3aXRjaCBiZXR3ZWVuIGNvbnRyb2xsZWQgYW5kIHVuY29udHJvbGxlZCBtb2Rlcy5cbiAgLy8gYGRlZmF1bHRPcGVuYCBhbmQgYG9wZW5TdGF0ZWAgYXJlIGlnbm9yZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2FsbGJhY2tzLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMpIHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2F1dG9Gb2N1c10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGFiZWxJZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbGFiZWwgPSBvd25lckRvY3VtZW50KGRpc3BsYXlSZWYuY3VycmVudCkuZ2V0RWxlbWVudEJ5SWQobGFiZWxJZCk7XG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBsYWJlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2xhYmVsSWRdKTtcbiAgY29uc3QgdXBkYXRlID0gKG9wZW4sIGV2ZW50KSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGlmIChvbk9wZW4pIHtcbiAgICAgICAgb25PcGVuKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIHNldE9wZW5TdGF0ZShvcGVuKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IGV2ZW50ID0+IHtcbiAgICAvLyBJZ25vcmUgZXZlcnl0aGluZyBidXQgbGVmdC1jbGlja1xuICAgIGlmIChldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gSGlqYWNrIHRoZSBkZWZhdWx0IGZvY3VzIGJlaGF2aW9yLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBldmVudCA9PiB7XG4gICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gIH07XG4gIGNvbnN0IGNoaWxkcmVuQXJyYXkgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcblxuICAvLyBTdXBwb3J0IGF1dG9maWxsLlxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbkFycmF5LmZpbmQoY2hpbGRJdGVtID0+IGNoaWxkSXRlbS5wcm9wcy52YWx1ZSA9PT0gZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRWYWx1ZVN0YXRlKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50LCBjaGlsZCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJdGVtQ2xpY2sgPSBjaGlsZCA9PiBldmVudCA9PiB7XG4gICAgbGV0IG5ld1ZhbHVlO1xuXG4gICAgLy8gV2UgdXNlIHRoZSB0YWJpbmRleCBhdHRyaWJ1dGUgdG8gc2lnbmFsIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICBpZiAoIWV2ZW50LmN1cnJlbnRUYXJnZXQuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNsaWNlKCkgOiBbXTtcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgaWYgKGl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaChjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VmFsdWUgPSBjaGlsZC5wcm9wcy52YWx1ZTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLnByb3BzLm9uQ2xpY2spIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAvLyBSZWRlZmluZSB0YXJnZXQgdG8gYWxsb3cgbmFtZSBhbmQgdmFsdWUgdG8gYmUgcmVhZC5cbiAgICAgICAgLy8gVGhpcyBhbGxvd3Mgc2VhbWxlc3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgbW9zdCBwb3B1bGFyIGZvcm0gbGlicmFyaWVzLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzQ4NSNpc3N1ZWNvbW1lbnQtNjc2MDQ4NDkyXG4gICAgICAgIC8vIENsb25lIHRoZSBldmVudCB0byBub3Qgb3ZlcnJpZGUgYHRhcmdldGAgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LlxuICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50IHx8IGV2ZW50O1xuICAgICAgICBjb25zdCBjbG9uZWRFdmVudCA9IG5ldyBuYXRpdmVFdmVudC5jb25zdHJ1Y3RvcihuYXRpdmVFdmVudC50eXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9uZWRFdmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIG9uQ2hhbmdlKGNsb25lZEV2ZW50LCBjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgIHVwZGF0ZShmYWxzZSwgZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoIXJlYWRPbmx5KSB7XG4gICAgICBjb25zdCB2YWxpZEtleXMgPSBbJyAnLCAnQXJyb3dVcCcsICdBcnJvd0Rvd24nLFxuICAgICAgLy8gVGhlIG5hdGl2ZSBzZWxlY3QgZG9lc24ndCByZXNwb25kIHRvIGVudGVyIG9uIG1hY09TLCBidXQgaXQncyByZWNvbW1lbmRlZCBieVxuICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy9jb21ib2JveC9leGFtcGxlcy9jb21ib2JveC1zZWxlY3Qtb25seS9cbiAgICAgICdFbnRlciddO1xuICAgICAgaWYgKHZhbGlkS2V5cy5pbmRleE9mKGV2ZW50LmtleSkgIT09IC0xKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBvcGVuID0gZGlzcGxheU5vZGUgIT09IG51bGwgJiYgb3BlblN0YXRlO1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIC8vIGlmIG9wZW4gZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXG4gICAgaWYgKCFvcGVuICYmIG9uQmx1cikge1xuICAgICAgLy8gUHJlYWN0IHN1cHBvcnQsIHRhcmdldCBpcyByZWFkIG9ubHkgcHJvcGVydHkgb24gYSBuYXRpdmUgZXZlbnQuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgZGVsZXRlIG90aGVyWydhcmlhLWludmFsaWQnXTtcbiAgbGV0IGRpc3BsYXk7XG4gIGxldCBkaXNwbGF5U2luZ2xlO1xuICBjb25zdCBkaXNwbGF5TXVsdGlwbGUgPSBbXTtcbiAgbGV0IGNvbXB1dGVEaXNwbGF5ID0gZmFsc2U7XG4gIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7XG5cbiAgLy8gTm8gbmVlZCB0byBkaXNwbGF5IGFueSB2YWx1ZSBpZiB0aGUgZmllbGQgaXMgZW1wdHkuXG4gIGlmIChpc0ZpbGxlZCh7XG4gICAgdmFsdWVcbiAgfSkgfHwgZGlzcGxheUVtcHR5KSB7XG4gICAgaWYgKHJlbmRlclZhbHVlKSB7XG4gICAgICBkaXNwbGF5ID0gcmVuZGVyVmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wdXRlRGlzcGxheSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgU2VsZWN0IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzZWxlY3RlZDtcbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGB2YWx1ZVxcYCBwcm9wIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB1c2luZyB0aGUgXFxgU2VsZWN0XFxgIGNvbXBvbmVudCB3aXRoIFxcYG11bHRpcGxlXFxgLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDIpKTtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkID0gdmFsdWUuc29tZSh2ID0+IGFyZUVxdWFsVmFsdWVzKHYsIGNoaWxkLnByb3BzLnZhbHVlKSk7XG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheU11bHRpcGxlLnB1c2goY2hpbGQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZCA9IGFyZUVxdWFsVmFsdWVzKHZhbHVlLCBjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgY29tcHV0ZURpc3BsYXkpIHtcbiAgICAgICAgZGlzcGxheVNpbmdsZSA9IGNoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBzZWxlY3RlZCA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVJdGVtQ2xpY2soY2hpbGQpLFxuICAgICAgb25LZXlVcDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugb3VyIE1lbnVJdGVtcyBkaXNwYXRjaGVzIGEgY2xpY2sgZXZlbnRcbiAgICAgICAgICAvLyBpdCdzIG5vdCBiZWhhdmlvciBvZiB0aGUgbmF0aXZlIDxvcHRpb24+IGFuZCBjYXVzZXNcbiAgICAgICAgICAvLyB0aGUgc2VsZWN0IHRvIGNsb3NlIGltbWVkaWF0ZWx5IHNpbmNlIHdlIG9wZW4gb24gc3BhY2Uga2V5ZG93blxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLnByb3BzLm9uS2V5VXApIHtcbiAgICAgICAgICBjaGlsZC5wcm9wcy5vbktleVVwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHZhbHVlIGlzIG1vc3QgbGlrZWx5IG5vdCBhIHZhbGlkIEhUTUwgYXR0cmlidXRlLlxuICAgICAgJ2RhdGEtdmFsdWUnOiBjaGlsZC5wcm9wcy52YWx1ZSAvLyBJbnN0ZWFkLCB3ZSBwcm92aWRlIGl0IGFzIGEgZGF0YSBhdHRyaWJ1dGUuXG4gICAgfSk7XG4gIH0pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kTWF0Y2ggJiYgIW11bHRpcGxlICYmIHZhbHVlICE9PSAnJykge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBjaGlsZHJlbkFycmF5Lm1hcChjaGlsZCA9PiBjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihbYE1VSTogWW91IGhhdmUgcHJvdmlkZWQgYW4gb3V0LW9mLXJhbmdlIHZhbHVlIFxcYCR7dmFsdWV9XFxgIGZvciB0aGUgc2VsZWN0ICR7bmFtZSA/IGAobmFtZT1cIiR7bmFtZX1cIikgYCA6ICcnfWNvbXBvbmVudC5gLCBcIkNvbnNpZGVyIHByb3ZpZGluZyBhIHZhbHVlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIG9yICcnLlwiLCBgVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlICR7dmFsdWVzLmZpbHRlcih4ID0+IHggIT0gbnVsbCkubWFwKHggPT4gYFxcYCR7eH1cXGBgKS5qb2luKCcsICcpIHx8ICdcIlwiJ30uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtmb3VuZE1hdGNoLCBjaGlsZHJlbkFycmF5LCBtdWx0aXBsZSwgbmFtZSwgdmFsdWVdKTtcbiAgfVxuICBpZiAoY29tcHV0ZURpc3BsYXkpIHtcbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIGlmIChkaXNwbGF5TXVsdGlwbGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRpc3BsYXkgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXlNdWx0aXBsZS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgICAgICAgIGlmIChpbmRleCA8IGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBvdXRwdXQucHVzaCgnLCAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSwgW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwbGF5ID0gZGlzcGxheVNpbmdsZTtcbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBwZXJmb3JtaW5nIGEgbGF5b3V0IGNvbXB1dGF0aW9uIGluIHRoZSByZW5kZXIgbWV0aG9kLlxuICBsZXQgbWVudU1pbldpZHRoID0gbWVudU1pbldpZHRoU3RhdGU7XG4gIGlmICghYXV0b1dpZHRoICYmIGlzT3BlbkNvbnRyb2xsZWQgJiYgZGlzcGxheU5vZGUpIHtcbiAgICBtZW51TWluV2lkdGggPSBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG4gIGxldCB0YWJJbmRleDtcbiAgaWYgKHR5cGVvZiB0YWJJbmRleFByb3AgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3A7XG4gIH0gZWxzZSB7XG4gICAgdGFiSW5kZXggPSBkaXNhYmxlZCA/IG51bGwgOiAwO1xuICB9XG4gIGNvbnN0IGJ1dHRvbklkID0gU2VsZWN0RGlzcGxheVByb3BzLmlkIHx8IChuYW1lID8gYG11aS1jb21wb25lbnQtc2VsZWN0LSR7bmFtZX1gIDogdW5kZWZpbmVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgdmFsdWUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBwYXBlclByb3BzID0gX2V4dGVuZHMoe30sIE1lbnVQcm9wcy5QYXBlclByb3BzLCAoX01lbnVQcm9wcyRzbG90UHJvcHMgPSBNZW51UHJvcHMuc2xvdFByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogX01lbnVQcm9wcyRzbG90UHJvcHMucGFwZXIpO1xuICBjb25zdCBsaXN0Ym94SWQgPSB1c2VJZCgpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlRGlzcGxheVJlZixcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBsaXN0Ym94SWQsXG4gICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWQgPyAndHJ1ZScgOiB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZXhwYW5kZWRcIjogb3BlbiA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCIsXG4gICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogW2xhYmVsSWQsIGJ1dHRvbklkXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIHx8IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvbk1vdXNlRG93bjogZGlzYWJsZWQgfHwgcmVhZE9ubHkgPyBudWxsIDogaGFuZGxlTW91c2VEb3duLFxuICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgb25Gb2N1czogb25Gb2N1c1xuICAgIH0sIFNlbGVjdERpc3BsYXlQcm9wcywge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChTZWxlY3REaXNwbGF5UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKVxuICAgICAgLy8gVGhlIGlkIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgYTExeVxuICAgICAgLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgY2hpbGRyZW46IGlzRW1wdHkoZGlzcGxheSkgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpIDogZGlzcGxheVxuICAgIH0pKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0TmF0aXZlSW5wdXQsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGVycm9yLFxuICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCcpIDogdmFsdWUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMubmF0aXZlSW5wdXQsXG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9LCBvdGhlcikpLCAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3RJY29uLCB7XG4gICAgICBhczogSWNvbkNvbXBvbmVudCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pY29uLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChNZW51LCBfZXh0ZW5kcyh7XG4gICAgICBpZDogYG1lbnUtJHtuYW1lIHx8ICcnfWAsXG4gICAgICBhbmNob3JFbDogYW5jaG9yRWxlbWVudCxcbiAgICAgIG9wZW46IG9wZW4sXG4gICAgICBvbkNsb3NlOiBoYW5kbGVDbG9zZSxcbiAgICAgIGFuY2hvck9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH1cbiAgICB9LCBNZW51UHJvcHMsIHtcbiAgICAgIE1lbnVMaXN0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWQsXG4gICAgICAgIHJvbGU6ICdsaXN0Ym94JyxcbiAgICAgICAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogbXVsdGlwbGUgPyAndHJ1ZScgOiB1bmRlZmluZWQsXG4gICAgICAgIGRpc2FibGVMaXN0V3JhcDogdHJ1ZSxcbiAgICAgICAgaWQ6IGxpc3Rib3hJZFxuICAgICAgfSwgTWVudVByb3BzLk1lbnVMaXN0UHJvcHMpLFxuICAgICAgc2xvdFByb3BzOiBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLnNsb3RQcm9wcywge1xuICAgICAgICBwYXBlcjogX2V4dGVuZHMoe30sIHBhcGVyUHJvcHMsIHtcbiAgICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgICAgbWluV2lkdGg6IG1lbnVNaW5XaWR0aFxuICAgICAgICAgIH0sIHBhcGVyUHJvcHMgIT0gbnVsbCA/IHBhcGVyUHJvcHMuc3R5bGUgOiBudWxsKVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBjaGlsZHJlbjogaXRlbXNcbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTZWxlY3RJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICAnYXJpYS1kZXNjcmliZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICAnYXJpYS1sYWJlbCc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGl0ZW1zIGluc2lkZSB0aGVcbiAgICogbWVudSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqL1xuICBhdXRvV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGA8TWVudUl0ZW0+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHRvZ2dsZWQgb24gbW91bnQuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZC5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3RlZCBpdGVtIGlzIGRpc3BsYXllZCBldmVuIGlmIGl0cyB2YWx1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIEltcGVyYXRpdmUgaGFuZGxlIGltcGxlbWVudGluZyBgeyB2YWx1ZTogVCwgbm9kZTogSFRNTEVsZW1lbnQsIGZvY3VzKCk6IHZvaWQgfWBcbiAgICogRXF1aXZhbGVudCB0byBgcmVmYFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgc2VsZWN0YCBvciBoaWRkZW4gYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGluIGNvbnRyb2xsZWQgbW9kZSAoc2VlIG9wZW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3RJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk03IDEwbDUgNSA1LTV6XCJcbn0pLCAnQXJyb3dEcm9wRG93bicpOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9XaWR0aFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlkXCIsIFwiaW5wdXRcIiwgXCJpbnB1dFByb3BzXCIsIFwibGFiZWxcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYXRpdmVcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidmFyaWFudFwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInJvb3RcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBnZXRSZWFjdEVsZW1lbnRSZWYgZnJvbSAnQG11aS91dGlscy9nZXRSZWFjdEVsZW1lbnRSZWYnO1xuaW1wb3J0IFNlbGVjdElucHV0IGZyb20gJy4vU2VsZWN0SW5wdXQnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEFycm93RHJvcERvd25JY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgTmF0aXZlU2VsZWN0SW5wdXQgZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59O1xuY29uc3Qgc3R5bGVkUm9vdENvbmZpZyA9IHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3QsXG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAndmFyaWFudCcsXG4gIHNsb3Q6ICdSb290J1xufTtcbmNvbnN0IFN0eWxlZElucHV0ID0gc3R5bGVkKElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTdHlsZWRPdXRsaW5lZElucHV0ID0gc3R5bGVkKE91dGxpbmVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZEZpbGxlZElucHV0ID0gc3R5bGVkKEZpbGxlZElucHV0LCBzdHlsZWRSb290Q29uZmlnKSgnJyk7XG5jb25zdCBTZWxlY3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTZWxlY3QoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b1dpZHRoID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wID0ge30sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0T3BlbiA9IGZhbHNlLFxuICAgICAgZGlzcGxheUVtcHR5ID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50ID0gQXJyb3dEcm9wRG93bkljb24sXG4gICAgICBpZCxcbiAgICAgIGlucHV0LFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGxhYmVsLFxuICAgICAgbGFiZWxJZCxcbiAgICAgIE1lbnVQcm9wcyxcbiAgICAgIG11bHRpcGxlID0gZmFsc2UsXG4gICAgICBuYXRpdmUgPSBmYWxzZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuLFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMsXG4gICAgICB2YXJpYW50OiB2YXJpYW50UHJvcCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnQgPSBuYXRpdmUgPyBOYXRpdmVTZWxlY3RJbnB1dCA6IFNlbGVjdElucHV0O1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50JywgJ2Vycm9yJ11cbiAgfSk7XG4gIGNvbnN0IHZhcmlhbnQgPSBmY3MudmFyaWFudCB8fCB2YXJpYW50UHJvcDtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3BcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcmVzdE9mQ2xhc3NlcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGNsYXNzZXMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IGlucHV0IHx8IHtcbiAgICBzdGFuZGFyZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSxcbiAgICBvdXRsaW5lZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkT3V0bGluZWRJbnB1dCwge1xuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIGZpbGxlZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkRmlsbGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KVxuICB9W3ZhcmlhbnRdO1xuICBjb25zdCBpbnB1dENvbXBvbmVudFJlZiA9IHVzZUZvcmtSZWYocmVmLCBnZXRSZWFjdEVsZW1lbnRSZWYoSW5wdXRDb21wb25lbnQpKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIC8vIE1vc3Qgb2YgdGhlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGluIGBTZWxlY3RJbnB1dGAuXG4gICAgICAvLyBUaGUgYFNlbGVjdGAgY29tcG9uZW50IGlzIGEgc2ltcGxlIEFQSSB3cmFwcGVyIHRvIGV4cG9zZSBzb21ldGhpbmcgYmV0dGVyIHRvIHBsYXkgd2l0aC5cbiAgICAgIGlucHV0Q29tcG9uZW50LFxuICAgICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgdmFyaWFudCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBXZSByZW5kZXIgYSBzZWxlY3QuIFdlIGNhbiBpZ25vcmUgdGhlIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGBJbnB1dGAuXG4gICAgICAgIG11bHRpcGxlXG4gICAgICB9LCBuYXRpdmUgPyB7XG4gICAgICAgIGlkXG4gICAgICB9IDoge1xuICAgICAgICBhdXRvV2lkdGgsXG4gICAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgICBkaXNwbGF5RW1wdHksXG4gICAgICAgIGxhYmVsSWQsXG4gICAgICAgIE1lbnVQcm9wcyxcbiAgICAgICAgb25DbG9zZSxcbiAgICAgICAgb25PcGVuLFxuICAgICAgICBvcGVuLFxuICAgICAgICByZW5kZXJWYWx1ZSxcbiAgICAgICAgU2VsZWN0RGlzcGxheVByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSwgU2VsZWN0RGlzcGxheVByb3BzKVxuICAgICAgfSwgaW5wdXRQcm9wcywge1xuICAgICAgICBjbGFzc2VzOiBpbnB1dFByb3BzID8gZGVlcG1lcmdlKHJlc3RPZkNsYXNzZXMsIGlucHV0UHJvcHMuY2xhc3NlcykgOiByZXN0T2ZDbGFzc2VzXG4gICAgICB9LCBpbnB1dCA/IGlucHV0LnByb3BzLmlucHV0UHJvcHMgOiB7fSlcbiAgICB9LCAobXVsdGlwbGUgJiYgbmF0aXZlIHx8IGRpc3BsYXlFbXB0eSkgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJyA/IHtcbiAgICAgIG5vdGNoZWQ6IHRydWVcbiAgICB9IDoge30sIHtcbiAgICAgIHJlZjogaW5wdXRDb21wb25lbnRSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsc3goSW5wdXRDb21wb25lbnQucHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIGNsYXNzZXMucm9vdClcbiAgICB9LCAhaW5wdXQgJiYge1xuICAgICAgdmFyaWFudFxuICAgIH0sIG90aGVyKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYE1lbnVJdGVtYCB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlIGFuZCBgb3B0aW9uYCB3aGVuIGBuYXRpdmVgIGlzIHRydWUuXG4gICAqXG4gICAqIOKaoO+4j1RoZSBgTWVudUl0ZW1gIGVsZW1lbnRzICoqbXVzdCoqIGJlIGRpcmVjdCBkZXNjZW5kYW50cyB3aGVuIGBuYXRpdmVgIGlzIGZhbHNlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgb3Blbi4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBvcGVuIHN0YXRlIGlzIG5vdCBjb250cm9sbGVkIChpLmUuIHRoZSBgb3BlbmAgcHJvcCBpcyBub3QgZGVmaW5lZCkuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIHZhbHVlIGlzIGRpc3BsYXllZCBldmVuIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSW4gb3JkZXIgdG8gZGlzcGxheSBhIG1lYW5pbmdmdWwgdmFsdWUsIGEgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYHJlbmRlclZhbHVlYCBwcm9wIHdoaWNoXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIHRvIGJlIGRpc3BsYXllZCB3aGVuIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICog4pqg77iPIFdoZW4gdXNpbmcgdGhpcyBwcm9wLCBtYWtlIHN1cmUgdGhlIGxhYmVsIGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBlbXB0eSBkaXNwbGF5ZWQgdmFsdWUuXG4gICAqIFRoZSBsYWJlbCBzaG91bGQgZWl0aGVyIGJlIGhpZGRlbiBvciBmb3JjZWQgdG8gYSBzaHJ1bmsgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqIEBkZWZhdWx0IEFycm93RHJvcERvd25JY29uXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgYGlkYCBvZiB0aGUgd3JhcHBlciBlbGVtZW50IG9yIHRoZSBgc2VsZWN0YCBlbGVtZW50IHdoZW4gYG5hdGl2ZWAuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEFuIGBJbnB1dGAgZWxlbWVudDsgZG9lcyBub3QgaGF2ZSB0byBiZSBhIG1hdGVyaWFsLXVpIHNwZWNpZmljIGBJbnB1dGAuXG4gICAqL1xuICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnQsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogV2hlbiBgbmF0aXZlYCBpcyBgdHJ1ZWAsIHRoZSBhdHRyaWJ1dGVzIGFyZSBhcHBsaWVkIG9uIHRoZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFNlZSBbT3V0bGluZWRJbnB1dCNsYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8jcHJvcHMpXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgYW4gZWxlbWVudCB0aGF0IGFjdHMgYXMgYW4gYWRkaXRpb25hbCBsYWJlbC4gVGhlIFNlbGVjdCB3aWxsXG4gICAqIGJlIGxhYmVsbGVkIGJ5IHRoZSBhZGRpdGlvbmFsIGxhYmVsIGFuZCB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqL1xuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51YF0oL21hdGVyaWFsLXVpL2FwaS9tZW51LykgZWxlbWVudC5cbiAgICovXG4gIE1lbnVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYHZhbHVlYCBtdXN0IGJlIGFuIGFycmF5IGFuZCB0aGUgbWVudSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9ucy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB1c2VzIGEgbmF0aXZlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBuYXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3RDaGFuZ2VFdmVudDxWYWx1ZT59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiAqKldhcm5pbmcqKjogVGhpcyBpcyBhIGdlbmVyaWMgZXZlbnQsIG5vdCBhIGNoYW5nZSBldmVudCwgdW5sZXNzIHRoZSBjaGFuZ2UgZXZlbnQgaXMgY2F1c2VkIGJ5IGJyb3dzZXIgYXV0b2ZpbGwuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY2hpbGRdIFRoZSByZWFjdCBlbGVtZW50IHRoYXQgd2FzIHNlbGVjdGVkIHdoZW4gYG5hdGl2ZWAgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBjb2xsYXBzZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGV4cGFuZHMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgYGlucHV0YCB2YWx1ZS4gUHJvdmlkaW5nIGFuIGVtcHR5IHN0cmluZyB3aWxsIHNlbGVjdCBubyBvcHRpb25zLlxuICAgKiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGAnJ2AgaWYgeW91IGRvbid0IHdhbnQgYW55IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0byBiZSBzZWxlY3RlZC5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCBpdCBtdXN0IGhhdmUgcmVmZXJlbmNlIGVxdWFsaXR5IHdpdGggdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICogSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QsIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbXVzdCBtYXRjaCB3aXRoIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wdGlvbiBpbiBvcmRlciB0byBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWycnXSksIFByb3BUeXBlcy5hbnldKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuU2VsZWN0Lm11aU5hbWUgPSAnU2VsZWN0JztcbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVGV4dEZpZWxkJywgc2xvdCk7XG59XG5jb25zdCB0ZXh0RmllbGRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVGV4dEZpZWxkJywgWydyb290J10pO1xuZXhwb3J0IGRlZmF1bHQgdGV4dEZpZWxkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIkZvcm1IZWxwZXJUZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJoZWxwZXJUZXh0XCIsIFwiaWRcIiwgXCJJbnB1dExhYmVsUHJvcHNcIiwgXCJpbnB1dFByb3BzXCIsIFwiSW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlcXVpcmVkXCIsIFwicm93c1wiLCBcInNlbGVjdFwiLCBcIlNlbGVjdFByb3BzXCIsIFwidHlwZVwiLCBcInZhbHVlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBGaWxsZWRJbnB1dCBmcm9tICcuLi9GaWxsZWRJbnB1dCc7XG5pbXBvcnQgT3V0bGluZWRJbnB1dCBmcm9tICcuLi9PdXRsaW5lZElucHV0JztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJy4uL0lucHV0TGFiZWwnO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sJztcbmltcG9ydCBGb3JtSGVscGVyVGV4dCBmcm9tICcuLi9Gb3JtSGVscGVyVGV4dCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4uL1NlbGVjdCc7XG5pbXBvcnQgeyBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3RleHRGaWVsZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHZhcmlhbnRDb21wb25lbnQgPSB7XG4gIHN0YW5kYXJkOiBJbnB1dCxcbiAgZmlsbGVkOiBGaWxsZWRJbnB1dCxcbiAgb3V0bGluZWQ6IE91dGxpbmVkSW5wdXRcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRleHRGaWVsZFJvb3QgPSBzdHlsZWQoRm9ybUNvbnRyb2wsIHtcbiAgbmFtZTogJ011aVRleHRGaWVsZCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuXG4vKipcbiAqIFRoZSBgVGV4dEZpZWxkYCBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyAoODAlKS5cbiAqIEl0IGNhbm5vdCBiZSBhbGwgdGhpbmdzIHRvIGFsbCBwZW9wbGUsIG90aGVyd2lzZSB0aGUgQVBJIHdvdWxkIGdyb3cgb3V0IG9mIGNvbnRyb2wuXG4gKlxuICogIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB0aGUgdGV4dCBmaWVsZCBpcyBhIHNpbXBsZSBhYnN0cmFjdGlvblxuICogb24gdG9wIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAtIFtGb3JtQ29udHJvbF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWNvbnRyb2wvKVxuICogLSBbSW5wdXRMYWJlbF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pXG4gKiAtIFtGaWxsZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKVxuICogLSBbT3V0bGluZWRJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pXG4gKiAtIFtJbnB1dF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gKiAtIFtGb3JtSGVscGVyVGV4dF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LylcbiAqXG4gKiBJZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgcHJvcHMgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LCB5b3UgY2FuIGRvIHNvIGFzIGZvbGxvd3M6XG4gKlxuICogYGBganN4XG4gKiBjb25zdCBpbnB1dFByb3BzID0ge1xuICogICBzdGVwOiAzMDAsXG4gKiB9O1xuICpcbiAqIHJldHVybiA8VGV4dEZpZWxkIGlkPVwidGltZVwiIHR5cGU9XCJ0aW1lXCIgaW5wdXRQcm9wcz17aW5wdXRQcm9wc30gLz47XG4gKiBgYGBcbiAqXG4gKiBGb3IgYWR2YW5jZWQgY2FzZXMsIHBsZWFzZSBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgVGV4dEZpZWxkIGJ5IGNsaWNraW5nIG9uIHRoZVxuICogXCJFZGl0IHRoaXMgcGFnZVwiIGJ1dHRvbiBhYm92ZS4gQ29uc2lkZXIgZWl0aGVyOlxuICpcbiAqIC0gdXNpbmcgdGhlIHVwcGVyIGNhc2UgcHJvcHMgZm9yIHBhc3NpbmcgdmFsdWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnRzXG4gKiAtIHVzaW5nIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgYXMgc2hvd24gaW4gdGhlIGRlbW9zXG4gKi9cbmNvbnN0IFRleHRGaWVsZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRleHRGaWVsZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUZXh0RmllbGQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvQ29tcGxldGUsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIEZvcm1IZWxwZXJUZXh0UHJvcHMsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhlbHBlclRleHQsXG4gICAgICBpZDogaWRPdmVycmlkZSxcbiAgICAgIElucHV0TGFiZWxQcm9wcyxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBJbnB1dFByb3BzLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBsYWJlbCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgcm93cyxcbiAgICAgIHNlbGVjdCA9IGZhbHNlLFxuICAgICAgU2VsZWN0UHJvcHMsXG4gICAgICB0eXBlLFxuICAgICAgdmFsdWUsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYXV0b0ZvY3VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVxdWlyZWQsXG4gICAgc2VsZWN0LFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoc2VsZWN0ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgY2hpbGRyZW5gIG11c3QgYmUgcGFzc2VkIHdoZW4gdXNpbmcgdGhlIGBUZXh0RmllbGRgIGNvbXBvbmVudCB3aXRoIGBzZWxlY3RgLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBJbnB1dE1vcmUgPSB7fTtcbiAgaWYgKHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICBpZiAoSW5wdXRMYWJlbFByb3BzICYmIHR5cGVvZiBJbnB1dExhYmVsUHJvcHMuc2hyaW5rICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgSW5wdXRNb3JlLm5vdGNoZWQgPSBJbnB1dExhYmVsUHJvcHMuc2hyaW5rO1xuICAgIH1cbiAgICBJbnB1dE1vcmUubGFiZWwgPSBsYWJlbDtcbiAgfVxuICBpZiAoc2VsZWN0KSB7XG4gICAgLy8gdW5zZXQgZGVmYXVsdHMgZnJvbSB0ZXh0Ym94IGlucHV0c1xuICAgIGlmICghU2VsZWN0UHJvcHMgfHwgIVNlbGVjdFByb3BzLm5hdGl2ZSkge1xuICAgICAgSW5wdXRNb3JlLmlkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBJbnB1dE1vcmVbJ2FyaWEtZGVzY3JpYmVkYnknXSA9IHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpZCA9IHVzZUlkKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBoZWxwZXJUZXh0SWQgPSBoZWxwZXJUZXh0ICYmIGlkID8gYCR7aWR9LWhlbHBlci10ZXh0YCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRMYWJlbElkID0gbGFiZWwgJiYgaWQgPyBgJHtpZH0tbGFiZWxgIDogdW5kZWZpbmVkO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IHZhcmlhbnRDb21wb25lbnRbdmFyaWFudF07XG4gIGNvbnN0IElucHV0RWxlbWVudCA9IC8qI19fUFVSRV9fKi9fanN4KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHJvd3M6IHJvd3MsXG4gICAgbWF4Um93czogbWF4Um93cyxcbiAgICBtaW5Sb3dzOiBtaW5Sb3dzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGlkOiBpZCxcbiAgICBpbnB1dFJlZjogaW5wdXRSZWYsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIGlucHV0UHJvcHM6IGlucHV0UHJvcHNcbiAgfSwgSW5wdXRNb3JlLCBJbnB1dFByb3BzKSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoVGV4dEZpZWxkUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIGVycm9yOiBlcnJvcixcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICByZWY6IHJlZixcbiAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgLyojX19QVVJFX18qL19qc3goSW5wdXRMYWJlbCwgX2V4dGVuZHMoe1xuICAgICAgaHRtbEZvcjogaWQsXG4gICAgICBpZDogaW5wdXRMYWJlbElkXG4gICAgfSwgSW5wdXRMYWJlbFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogbGFiZWxcbiAgICB9KSksIHNlbGVjdCA/IC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGhlbHBlclRleHRJZCxcbiAgICAgIGlkOiBpZCxcbiAgICAgIGxhYmVsSWQ6IGlucHV0TGFiZWxJZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGlucHV0OiBJbnB1dEVsZW1lbnRcbiAgICB9LCBTZWxlY3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpIDogSW5wdXRFbGVtZW50LCBoZWxwZXJUZXh0ICYmIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0LCBfZXh0ZW5kcyh7XG4gICAgICBpZDogaGVscGVyVGV4dElkXG4gICAgfSwgRm9ybUhlbHBlclRleHRQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGhlbHBlclRleHRcbiAgICB9KSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGV4dEZpZWxkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgRm9ybUhlbHBlclRleHRgXSgvbWF0ZXJpYWwtdWkvYXBpL2Zvcm0taGVscGVyLXRleHQvKSBlbGVtZW50LlxuICAgKi9cbiAgRm9ybUhlbHBlclRleHRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBoZWxwZXIgdGV4dCBjb250ZW50LlxuICAgKi9cbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogVXNlIHRoaXMgcHJvcCB0byBtYWtlIGBsYWJlbGAgYW5kIGBoZWxwZXJUZXh0YCBhY2Nlc3NpYmxlIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BJbnB1dExhYmVsYF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC1sYWJlbC8pIGVsZW1lbnQuXG4gICAqIFBvaW50ZXIgZXZlbnRzIGxpa2UgYG9uQ2xpY2tgIGFyZSBlbmFibGVkIGlmIGFuZCBvbmx5IGlmIGBzaHJpbmtgIGlzIGB0cnVlYC5cbiAgICovXG4gIElucHV0TGFiZWxQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIElucHV0IGVsZW1lbnQuXG4gICAqIEl0IHdpbGwgYmUgYSBbYEZpbGxlZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9maWxsZWQtaW5wdXQvKSxcbiAgICogW2BPdXRsaW5lZElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9vdXRsaW5lZC1pbnB1dC8pIG9yIFtgSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LylcbiAgICogY29tcG9uZW50IGRlcGVuZGluZyBvbiB0aGUgYHZhcmlhbnRgIHByb3AgdmFsdWUuXG4gICAqL1xuICBJbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgY29udGVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIGB0ZXh0YXJlYWAgZWxlbWVudCBpcyByZW5kZXJlZCBpbnN0ZWFkIG9mIGFuIGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGFzIHJlcXVpcmVkIGFuZCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudCB3aGlsZSBwYXNzaW5nIHRoZSBJbnB1dCBlbGVtZW50IHRvIGBTZWxlY3RgIGFzIGBpbnB1dGAgcGFyYW1ldGVyLlxuICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgeW91IG11c3QgcGFzcyB0aGUgb3B0aW9ucyBvZiB0aGUgc2VsZWN0IGFzIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0RmllbGQ7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gUmlwcGxlKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWUsXG4gICAgY2xhc3NlcyxcbiAgICBwdWxzYXRlID0gZmFsc2UsXG4gICAgcmlwcGxlWCxcbiAgICByaXBwbGVZLFxuICAgIHJpcHBsZVNpemUsXG4gICAgaW46IGluUHJvcCxcbiAgICBvbkV4aXRlZCxcbiAgICB0aW1lb3V0XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2xlYXZpbmcsIHNldExlYXZpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByaXBwbGVDbGFzc05hbWUgPSBjbHN4KGNsYXNzTmFtZSwgY2xhc3Nlcy5yaXBwbGUsIGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgcHVsc2F0ZSAmJiBjbGFzc2VzLnJpcHBsZVB1bHNhdGUpO1xuICBjb25zdCByaXBwbGVTdHlsZXMgPSB7XG4gICAgd2lkdGg6IHJpcHBsZVNpemUsXG4gICAgaGVpZ2h0OiByaXBwbGVTaXplLFxuICAgIHRvcDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVZLFxuICAgIGxlZnQ6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWFxuICB9O1xuICBjb25zdCBjaGlsZENsYXNzTmFtZSA9IGNsc3goY2xhc3Nlcy5jaGlsZCwgbGVhdmluZyAmJiBjbGFzc2VzLmNoaWxkTGVhdmluZywgcHVsc2F0ZSAmJiBjbGFzc2VzLmNoaWxkUHVsc2F0ZSk7XG4gIGlmICghaW5Qcm9wICYmICFsZWF2aW5nKSB7XG4gICAgc2V0TGVhdmluZyh0cnVlKTtcbiAgfVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5Qcm9wICYmIG9uRXhpdGVkICE9IG51bGwpIHtcbiAgICAgIC8vIHJlYWN0LXRyYW5zaXRpb24tZ3JvdXAjb25FeGl0ZWRcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQob25FeGl0ZWQsIHRpbWVvdXQpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbb25FeGl0ZWQsIGluUHJvcCwgdGltZW91dF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IHJpcHBsZUNsYXNzTmFtZSxcbiAgICBzdHlsZTogcmlwcGxlU3R5bGVzLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzTmFtZVxuICAgIH0pXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmlwcGxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBwdWxzYXRlcywgdHlwaWNhbGx5IGluZGljYXRpbmcgdGhlIGtleWJvYXJkIGZvY3VzIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWxzYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpYW1ldGVyIG9mIHRoZSByaXBwbGUuXG4gICAqL1xuICByaXBwbGVTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBleGl0IGRlbGF5XG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSaXBwbGU7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaFJpcHBsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG91Y2hSaXBwbGUnLCBzbG90KTtcbn1cbmNvbnN0IHRvdWNoUmlwcGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvdWNoUmlwcGxlJywgWydyb290JywgJ3JpcHBsZScsICdyaXBwbGVWaXNpYmxlJywgJ3JpcHBsZVB1bHNhdGUnLCAnY2hpbGQnLCAnY2hpbGRMZWF2aW5nJywgJ2NoaWxkUHVsc2F0ZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvdWNoUmlwcGxlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjZW50ZXJcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICdAbXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBSaXBwbGUgZnJvbSAnLi9SaXBwbGUnO1xuaW1wb3J0IHRvdWNoUmlwcGxlQ2xhc3NlcyBmcm9tICcuL3RvdWNoUmlwcGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRFVSQVRJT04gPSA1NTA7XG5leHBvcnQgY29uc3QgREVMQVlfUklQUExFID0gODA7XG5jb25zdCBlbnRlcktleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMC4zO1xuICB9XG5gKSk7XG5jb25zdCBleGl0S2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbmApKTtcbmNvbnN0IHB1bHNhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDMgfHwgKF90MyA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuYCkpO1xuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1Jvb3QnXG59KSh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG59KTtcblxuLy8gVGhpcyBgc3R5bGVkKClgIGZ1bmN0aW9uIGludm9rZXMga2V5ZnJhbWVzLiBgc3R5bGVkLWNvbXBvbmVudHNgIG9ubHkgc3VwcG9ydHMga2V5ZnJhbWVzXG4vLyBpbiBzdHJpbmcgdGVtcGxhdGVzLiBEbyBub3QgY29udmVydCB0aGVzZSBzdHlsZXMgaW4gSlMgb2JqZWN0IGFzIGl0IHdpbGwgYnJlYWsuXG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSaXBwbGUgPSBzdHlsZWQoUmlwcGxlLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSaXBwbGUnXG59KShfdDQgfHwgKF90NCA9IF9gXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLiR7MH0ge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmLiR7MH0ge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBAbm9mbGlwICovXG4gICAgbGVmdDogMHB4O1xuICAgIHRvcDogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDI1MDBtcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMjAwbXM7XG4gIH1cbmApLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSwgZW50ZXJLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZywgZXhpdEtleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHB1bHNhdGVLZXlmcmFtZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKlxuICogVE9ETyB2NTogTWFrZSBwcml2YXRlXG4gKi9cbmNvbnN0IFRvdWNoUmlwcGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG91Y2hSaXBwbGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gdXNlVGltZW91dCgpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYiA9ICgpID0+IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7XG5cbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfVxuXG4gICAgLy8gVG91Y2hlIGRldmljZXNcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoaXMgaXNuJ3QgYW5vdGhlciB0b3VjaHN0YXJ0IGR1ZSB0byBtdWx0aXRvdWNoXG4gICAgICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCBvbmx5IGNsZWFyIGEgc2luZ2xlIHRpbWVyIHdoZW4gdW5tb3VudGluZyB3aGlsZSB0d29cbiAgICAgIC8vIGFyZSBydW5uaW5nXG4gICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgICAgICBwdWxzYXRlLFxuICAgICAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgICAgIHJpcHBsZVksXG4gICAgICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRGVsYXkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIGRlbGF5IHZhbHVlLlxuICAgICAgICBzdGFydFRpbWVyLnN0YXJ0KERFTEFZX1JJUFBMRSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdCwgc3RhcnRUaW1lcl0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIHN0YXJ0VGltZXIuY2xlYXIoKTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtzdGFydFRpbWVyXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IFRvdWNoUmlwcGxlIGZyb20gJy4vVG91Y2hSaXBwbGUnO1xuaW1wb3J0IGJ1dHRvbkJhc2VDbGFzc2VzLCB7IGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBmb2N1c1Zpc2libGUgJiYgJ2ZvY3VzVmlzaWJsZSddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cbiAgcmV0dXJuIGNvbXBvc2VkQ2xhc3Nlcztcbn07XG5leHBvcnQgY29uc3QgQnV0dG9uQmFzZVJvb3QgPSBzdHlsZWQoJ2J1dHRvbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbkJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDAsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBwYWRkaW5nOiAwLFxuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIC8vIFNvIHdlIHRha2UgcHJlY2VkZW50IG92ZXIgdGhlIHN0eWxlIG9mIGEgbmF0aXZlIDxhIC8+IGVsZW1lbnQuXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gICcmOjotbW96LWZvY3VzLWlubmVyJzoge1xuICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuXG4vKipcbiAqIGBCdXR0b25CYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBidXR0b24uXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgZm9jdXMvcmlwcGxlIGxvZ2ljLlxuICovXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCdXR0b25CYXNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2VudGVyUmlwcGxlID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVUb3VjaFJpcHBsZSA9IGZhbHNlLFxuICAgICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIExpbmtDb21wb25lbnQgPSAnYScsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25Db250ZXh0TWVudSxcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uRm9jdXNWaXNpYmxlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VEb3duLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgb25Nb3VzZVVwLFxuICAgICAgb25Ub3VjaEVuZCxcbiAgICAgIG9uVG91Y2hNb3ZlLFxuICAgICAgb25Ub3VjaFN0YXJ0LFxuICAgICAgdGFiSW5kZXggPSAwLFxuICAgICAgVG91Y2hSaXBwbGVQcm9wcyxcbiAgICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgICAgdHlwZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBidXR0b25SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJpcHBsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmlwcGxlUmVmID0gdXNlRm9ya1JlZihyaXBwbGVSZWYsIHRvdWNoUmlwcGxlUmVmKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNWaXNpYmxlKSB7XG4gICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgfVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcbiAgZnVuY3Rpb24gdXNlUmlwcGxlSGFuZGxlcihyaXBwbGVBY3Rpb24sIGV2ZW50Q2FsbGJhY2ssIHNraXBSaXBwbGVBY3Rpb24gPSBkaXNhYmxlVG91Y2hSaXBwbGUpIHtcbiAgICByZXR1cm4gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xuICAgICAgICBldmVudENhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlnbm9yZSA9IHNraXBSaXBwbGVBY3Rpb247XG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Nb3VzZURvd24pO1xuICBjb25zdCBoYW5kbGVDb250ZXh0TWVudSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkNvbnRleHRNZW51KTtcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uRHJhZ0xlYXZlKTtcbiAgY29uc3QgaGFuZGxlTW91c2VVcCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbk1vdXNlVXApO1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgaWYgKCFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBpZiAob25Gb2N1c1Zpc2libGUpIHtcbiAgICAgICAgb25Gb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNOb25OYXRpdmVCdXR0b24gPSAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gYnV0dG9uUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQgIT09ICdidXR0b24nICYmICEoYnV0dG9uLnRhZ05hbWUgPT09ICdBJyAmJiBidXR0b24uaHJlZik7XG4gIH07XG5cbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuICBjb25zdCBrZXlkb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGtleSBpcyBhbHJlYWR5IGRvd24gdG8gYXZvaWQgcmVwZWF0cyBiZWluZyBjb3VudGVkIGFzIG11bHRpcGxlIGFjdGl2YXRpb25zXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmICFrZXlkb3duUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5zdGFydChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBjYWxsaW5nIHByZXZlbnREZWZhdWx0IGluIGtleVVwIG9uIGEgPGJ1dHRvbj4gd2lsbCBub3QgZGlzcGF0Y2ggYSBjbGljayBldmVudCBpZiBTcGFjZSBpcyBwcmVzc2VkXG4gICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvYnV0dG9uLWtleXVwLXByZXZlbnRkZWZhdWx0LWRuN2YwXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmIGV2ZW50LmtleSA9PT0gJyAnICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBvbktleVVwKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAob25DbGljayAmJiBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgbGV0IENvbXBvbmVudFByb3AgPSBjb21wb25lbnQ7XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuICBjb25zdCBidXR0b25Qcm9wcyA9IHt9O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicpIHtcbiAgICBidXR0b25Qcm9wcy50eXBlID0gdHlwZSA9PT0gdW5kZWZpbmVkID8gJ2J1dHRvbicgOiB0eXBlO1xuICAgIGJ1dHRvblByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvdGhlci5ocmVmICYmICFvdGhlci50bykge1xuICAgICAgYnV0dG9uUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2VudGVyUmlwcGxlLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlUmlwcGxlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSxcbiAgICBmb2N1c1JpcHBsZSxcbiAgICB0YWJJbmRleCxcbiAgICBmb2N1c1Zpc2libGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25CYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnRQcm9wLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNvbnRleHRNZW51OiBoYW5kbGVDb250ZXh0TWVudSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25LZXlVcDogaGFuZGxlS2V5VXAsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmU6IGhhbmRsZU1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwOiBoYW5kbGVNb3VzZVVwLFxuICAgIG9uRHJhZ0xlYXZlOiBoYW5kbGVEcmFnTGVhdmUsXG4gICAgb25Ub3VjaEVuZDogaGFuZGxlVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmU6IGhhbmRsZVRvdWNoTW92ZSxcbiAgICBvblRvdWNoU3RhcnQ6IGhhbmRsZVRvdWNoU3RhcnQsXG4gICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiB0YWJJbmRleCxcbiAgICB0eXBlOiB0eXBlXG4gIH0sIGJ1dHRvblByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGVuYWJsZVRvdWNoUmlwcGxlID9cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBgZm9jdXNWaXNpYmxlKClgIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvdWNoIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFzZSBidXR0b24gd2lsbCBoYXZlIGEga2V5Ym9hcmQgZm9jdXMgcmlwcGxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5hbnksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIGEgbGluayB3aGVuIHRoZSBgaHJlZmAgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgJ2EnXG4gICAqL1xuICBMaW5rQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbnRleHRNZW51OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGZvY3VzZWQgd2l0aCBhIGtleWJvYXJkLlxuICAgKiBXZSB0cmlnZ2VyIGEgYG9uRm9jdXNgIGNhbGxiYWNrIHRvby5cbiAgICovXG4gIG9uRm9jdXNWaXNpYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSByZWYgdGhhdCBwb2ludHMgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIHRvdWNoUmlwcGxlUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcHVsc2F0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0YXJ0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RvcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pXG4gIH0pXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYXNlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbkJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSWNvbkJ1dHRvbicsIHNsb3QpO1xufVxuY29uc3QgaWNvbkJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJY29uQnV0dG9uJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2NvbG9ySW5oZXJpdCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JFcnJvcicsICdjb2xvckluZm8nLCAnY29sb3JTdWNjZXNzJywgJ2NvbG9yV2FybmluZycsICdlZGdlU3RhcnQnLCAnZWRnZUVuZCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdzaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBpY29uQnV0dG9uQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJlZGdlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwic2l6ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpY29uQnV0dG9uQ2xhc3NlcywgeyBnZXRJY29uQnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pY29uQnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZWQsXG4gICAgY29sb3IsXG4gICAgZWRnZSxcbiAgICBzaXplXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBjb2xvciAhPT0gJ2RlZmF1bHQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZWRnZSAmJiBgZWRnZSR7Y2FwaXRhbGl6ZShlZGdlKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEljb25CdXR0b25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEljb25CdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgbmFtZTogJ011aUljb25CdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIG93bmVyU3RhdGUuZWRnZSAmJiBzdHlsZXNbYGVkZ2Uke2NhcGl0YWxpemUob3duZXJTdGF0ZS5lZGdlKX1gXSwgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICBmbGV4OiAnMCAwIGF1dG8nLFxuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDI0KSxcbiAgcGFkZGluZzogOCxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgLy8gRXhwbGljaXRseSBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgdG8gc29sdmUgYSBidWcgb24gSUUxMS5cbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0sICFvd25lclN0YXRlLmRpc2FibGVSaXBwbGUgJiYge1xuICAnJjpob3Zlcic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uYWN0aXZlQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdzdGFydCcgJiYge1xuICBtYXJnaW5MZWZ0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSwgb3duZXJTdGF0ZS5lZGdlID09PSAnZW5kJyAmJiB7XG4gIG1hcmdpblJpZ2h0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSksICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfcGFsZXR0ZTtcbiAgY29uc3QgcGFsZXR0ZSA9IChfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl07XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgX2V4dGVuZHMoe1xuICAgIGNvbG9yOiBwYWxldHRlID09IG51bGwgPyB2b2lkIDAgOiBwYWxldHRlLm1haW5cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICAgJyY6aG92ZXInOiBfZXh0ZW5kcyh7fSwgcGFsZXR0ZSAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3BhbGV0dGUubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHBhbGV0dGUubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KVxuICAgIH0sIHtcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0pXG4gIH0pLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmc6IDUsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxOClcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIHtcbiAgICBwYWRkaW5nOiAxMixcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDI4KVxuICB9LCB7XG4gICAgW2AmLiR7aWNvbkJ1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgICB9XG4gIH0pO1xufSk7XG5cbi8qKlxuICogUmVmZXIgdG8gdGhlIFtJY29uc10oL21hdGVyaWFsLXVpL2ljb25zLykgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvblxuICogcmVnYXJkaW5nIHRoZSBhdmFpbGFibGUgaWNvbiBvcHRpb25zLlxuICovXG5jb25zdCBJY29uQnV0dG9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSWNvbkJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJY29uQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZWRnZSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdkZWZhdWx0JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZWRnZSxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgc2l6ZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSWNvbkJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNlbnRlclJpcHBsZTogdHJ1ZSxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEljb25CdXR0b24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheS5cbiAgICovXG4gIGNoaWxkcmVuOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMubm9kZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGZvdW5kID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShwcm9wcy5jaGlsZHJlbikuc29tZShjaGlsZCA9PiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIGNoaWxkLnByb3BzLm9uQ2xpY2spO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYW4gb25DbGljayBldmVudCBsaXN0ZW5lciB0byBhIGNoaWxkIG9mIGEgYnV0dG9uIGVsZW1lbnQuJywgJ1ByZWZlciBhcHBseWluZyBpdCB0byB0aGUgSWNvbkJ1dHRvbiBkaXJlY3RseS4nLCAnVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIHdob2xlIDxidXR0b24+IHdpbGwgYmUgcmVzcG9uc2l2ZSB0byBjbGljayBldmVudHMuJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlICBrZXlib2FyZCBmb2N1cyByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICog4pqg77iPIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGdpdmVuLCB1c2VzIGEgbmVnYXRpdmUgbWFyZ2luIHRvIGNvdW50ZXJhY3QgdGhlIHBhZGRpbmcgb24gb25lXG4gICAqIHNpZGUgKHRoaXMgaXMgb2Z0ZW4gaGVscGZ1bCBmb3IgYWxpZ25pbmcgdGhlIGxlZnQgb3IgcmlnaHRcbiAgICogc2lkZSBvZiB0aGUgaWNvbiB3aXRoIGNvbnRlbnQgYWJvdmUgb3IgYmVsb3csIHdpdGhvdXQgcnVpbmluZyB0aGUgYm9yZGVyXG4gICAqIHNpemUgYW5kIHNoYXBlKS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVkZ2U6IFByb3BUeXBlcy5vbmVPZihbJ2VuZCcsICdzdGFydCcsIGZhbHNlXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGJ1dHRvbiBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCB1c2VQcmV2aW91c1Byb3BzID0gdmFsdWUgPT4ge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoe30pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlUHJldmlvdXNQcm9wczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZVByZXZpb3VzUHJvcHMgfSBmcm9tICdAbXVpL3V0aWxzJztcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW0JhZGdlXShodHRwczovL25leHQubXVpLmNvbS9iYXNlLXVpL3JlYWN0LWJhZGdlLyNob29rKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFt1c2VCYWRnZSBBUEldKGh0dHBzOi8vbmV4dC5tdWkuY29tL2Jhc2UtdWkvcmVhY3QtYmFkZ2UvaG9va3MtYXBpLyN1c2UtYmFkZ2UpXG4gKi9cbmZ1bmN0aW9uIHVzZUJhZGdlKHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qge1xuICAgIGJhZGdlQ29udGVudDogYmFkZ2VDb250ZW50UHJvcCxcbiAgICBpbnZpc2libGU6IGludmlzaWJsZVByb3AgPSBmYWxzZSxcbiAgICBtYXg6IG1heFByb3AgPSA5OSxcbiAgICBzaG93WmVybyA9IGZhbHNlXG4gIH0gPSBwYXJhbWV0ZXJzO1xuICBjb25zdCBwcmV2UHJvcHMgPSB1c2VQcmV2aW91c1Byb3BzKHtcbiAgICBiYWRnZUNvbnRlbnQ6IGJhZGdlQ29udGVudFByb3AsXG4gICAgbWF4OiBtYXhQcm9wXG4gIH0pO1xuICBsZXQgaW52aXNpYmxlID0gaW52aXNpYmxlUHJvcDtcbiAgaWYgKGludmlzaWJsZVByb3AgPT09IGZhbHNlICYmIGJhZGdlQ29udGVudFByb3AgPT09IDAgJiYgIXNob3daZXJvKSB7XG4gICAgaW52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBjb25zdCB7XG4gICAgYmFkZ2VDb250ZW50LFxuICAgIG1heCA9IG1heFByb3BcbiAgfSA9IGludmlzaWJsZSA/IHByZXZQcm9wcyA6IHBhcmFtZXRlcnM7XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGJhZGdlQ29udGVudCAmJiBOdW1iZXIoYmFkZ2VDb250ZW50KSA+IG1heCA/IGAke21heH0rYCA6IGJhZGdlQ29udGVudDtcbiAgcmV0dXJuIHtcbiAgICBiYWRnZUNvbnRlbnQsXG4gICAgaW52aXNpYmxlLFxuICAgIG1heCxcbiAgICBkaXNwbGF5VmFsdWVcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZUJhZGdlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFkZ2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJhZGdlJywgc2xvdCk7XG59XG5jb25zdCBiYWRnZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCYWRnZScsIFsncm9vdCcsICdiYWRnZScsICdkb3QnLCAnc3RhbmRhcmQnLCAnYW5jaG9yT3JpZ2luVG9wUmlnaHQnLCAnYW5jaG9yT3JpZ2luQm90dG9tUmlnaHQnLCAnYW5jaG9yT3JpZ2luVG9wTGVmdCcsICdhbmNob3JPcmlnaW5Cb3R0b21MZWZ0JywgJ2ludmlzaWJsZScsICdjb2xvckVycm9yJywgJ2NvbG9ySW5mbycsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JTdWNjZXNzJywgJ2NvbG9yV2FybmluZycsICdvdmVybGFwUmVjdGFuZ3VsYXInLCAnb3ZlcmxhcENpcmN1bGFyJyxcbi8vIFRPRE86IHY2IHJlbW92ZSB0aGUgb3ZlcmxhcCB2YWx1ZSBmcm9tIHRoZXNlIGNsYXNzIGtleXNcbidhbmNob3JPcmlnaW5Ub3BMZWZ0Q2lyY3VsYXInLCAnYW5jaG9yT3JpZ2luVG9wTGVmdFJlY3Rhbmd1bGFyJywgJ2FuY2hvck9yaWdpblRvcFJpZ2h0Q2lyY3VsYXInLCAnYW5jaG9yT3JpZ2luVG9wUmlnaHRSZWN0YW5ndWxhcicsICdhbmNob3JPcmlnaW5Cb3R0b21MZWZ0Q2lyY3VsYXInLCAnYW5jaG9yT3JpZ2luQm90dG9tTGVmdFJlY3Rhbmd1bGFyJywgJ2FuY2hvck9yaWdpbkJvdHRvbVJpZ2h0Q2lyY3VsYXInLCAnYW5jaG9yT3JpZ2luQm90dG9tUmlnaHRSZWN0YW5ndWxhciddKTtcbmV4cG9ydCBkZWZhdWx0IGJhZGdlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbmNob3JPcmlnaW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbGFzc2VzXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwib3ZlcmxhcFwiLCBcImNvbG9yXCIsIFwiaW52aXNpYmxlXCIsIFwibWF4XCIsIFwiYmFkZ2VDb250ZW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJzaG93WmVyb1wiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgdXNlUHJldmlvdXNQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVByZXZpb3VzUHJvcHMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgdXNlQmFkZ2UgZnJvbSAnLi91c2VCYWRnZSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICcuLi96ZXJvLXN0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBiYWRnZUNsYXNzZXMsIHsgZ2V0QmFkZ2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2JhZGdlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUkFESVVTX1NUQU5EQVJEID0gMTA7XG5jb25zdCBSQURJVVNfRE9UID0gNDtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBhbmNob3JPcmlnaW4sXG4gICAgaW52aXNpYmxlLFxuICAgIG92ZXJsYXAsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzID0ge31cbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddLFxuICAgIGJhZGdlOiBbJ2JhZGdlJywgdmFyaWFudCwgaW52aXNpYmxlICYmICdpbnZpc2libGUnLCBgYW5jaG9yT3JpZ2luJHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi52ZXJ0aWNhbCl9JHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKX1gLCBgYW5jaG9yT3JpZ2luJHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi52ZXJ0aWNhbCl9JHtjYXBpdGFsaXplKGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKX0ke2NhcGl0YWxpemUob3ZlcmxhcCl9YCwgYG92ZXJsYXAke2NhcGl0YWxpemUob3ZlcmxhcCl9YCwgY29sb3IgIT09ICdkZWZhdWx0JyAmJiBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QmFkZ2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEJhZGdlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJhZGdlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAvLyBGb3IgY29ycmVjdCBhbGlnbm1lbnQgd2l0aCB0aGUgdGV4dC5cbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIGZsZXhTaHJpbms6IDBcbn0pO1xuY29uc3QgQmFkZ2VCYWRnZSA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJhZGdlJyxcbiAgc2xvdDogJ0JhZGdlJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5iYWRnZSwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgYW5jaG9yT3JpZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsKX0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCl9JHtjYXBpdGFsaXplKG93bmVyU3RhdGUub3ZlcmxhcCl9YF0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBvd25lclN0YXRlLmludmlzaWJsZSAmJiBzdHlsZXMuaW52aXNpYmxlXTtcbiAgfVxufSkoKHtcbiAgdGhlbWVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR2YXJzO1xuICByZXR1cm4ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGZvbnRGYW1pbHk6IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHRNZWRpdW0sXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMiksXG4gICAgbWluV2lkdGg6IFJBRElVU19TVEFOREFSRCAqIDIsXG4gICAgbGluZUhlaWdodDogMSxcbiAgICBwYWRkaW5nOiAnMCA2cHgnLFxuICAgIGhlaWdodDogUkFESVVTX1NUQU5EQVJEICogMixcbiAgICBib3JkZXJSYWRpdXM6IFJBRElVU19TVEFOREFSRCxcbiAgICB6SW5kZXg6IDEsXG4gICAgLy8gUmVuZGVyIHRoZSBiYWRnZSBvbiB0b3Agb2YgcG90ZW50aWFsIHJpcHBsZXMuXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsXG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW5cbiAgICB9KSxcbiAgICB2YXJpYW50czogWy4uLk9iamVjdC5rZXlzKCgoX3RoZW1lJHZhcnMgPSB0aGVtZS52YXJzKSAhPSBudWxsID8gX3RoZW1lJHZhcnMgOiB0aGVtZSkucGFsZXR0ZSkuZmlsdGVyKGtleSA9PiB7XG4gICAgICB2YXIgX3RoZW1lJHZhcnMyLCBfdGhlbWUkdmFyczM7XG4gICAgICByZXR1cm4gKChfdGhlbWUkdmFyczIgPSB0aGVtZS52YXJzKSAhPSBudWxsID8gX3RoZW1lJHZhcnMyIDogdGhlbWUpLnBhbGV0dGVba2V5XS5tYWluICYmICgoX3RoZW1lJHZhcnMzID0gdGhlbWUudmFycykgIT0gbnVsbCA/IF90aGVtZSR2YXJzMyA6IHRoZW1lKS5wYWxldHRlW2tleV0uY29udHJhc3RUZXh0O1xuICAgIH0pLm1hcChjb2xvciA9PiAoe1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29sb3JcbiAgICAgIH0sXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW2NvbG9yXS5tYWluLFxuICAgICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbY29sb3JdLmNvbnRyYXN0VGV4dFxuICAgICAgfVxuICAgIH0pKSwge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdmFyaWFudDogJ2RvdCdcbiAgICAgIH0sXG4gICAgICBzdHlsZToge1xuICAgICAgICBib3JkZXJSYWRpdXM6IFJBRElVU19ET1QsXG4gICAgICAgIGhlaWdodDogUkFESVVTX0RPVCAqIDIsXG4gICAgICAgIG1pbldpZHRoOiBSQURJVVNfRE9UICogMixcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ3RvcCcgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdyZWN0YW5ndWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSB0cmFuc2xhdGUoNTAlLCAtNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzEwMCUgMCUnLFxuICAgICAgICBbYCYuJHtiYWRnZUNsYXNzZXMuaW52aXNpYmxlfWBdOiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMCkgdHJhbnNsYXRlKDUwJSwgLTUwJSknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm9wczogKHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSkgPT4gb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwgPT09ICdib3R0b20nICYmIG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLmhvcml6b250YWwgPT09ICdyaWdodCcgJiYgb3duZXJTdGF0ZS5vdmVybGFwID09PSAncmVjdGFuZ3VsYXInLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICByaWdodDogMCxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSkgdHJhbnNsYXRlKDUwJSwgNTAlKScsXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzEwMCUgMTAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoNTAlLCA1MCUpJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6ICh7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0pID0+IG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLnZlcnRpY2FsID09PSAndG9wJyAmJiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi5ob3Jpem9udGFsID09PSAnbGVmdCcgJiYgb3duZXJTdGF0ZS5vdmVybGFwID09PSAncmVjdGFuZ3VsYXInLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm9wczogKHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSkgPT4gb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwgPT09ICdib3R0b20nICYmIG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLmhvcml6b250YWwgPT09ICdsZWZ0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdyZWN0YW5ndWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSgtNTAlLCA1MCUpJyxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoLTUwJSwgNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ3RvcCcgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdjaXJjdWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICB0b3A6ICcxNCUnLFxuICAgICAgICByaWdodDogJzE0JScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSg1MCUsIC01MCUpJyxcbiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoNTAlLCAtNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ2JvdHRvbScgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdjaXJjdWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICBib3R0b206ICcxNCUnLFxuICAgICAgICByaWdodDogJzE0JScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDEpIHRyYW5zbGF0ZSg1MCUsIDUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDEwMCUnLFxuICAgICAgICBbYCYuJHtiYWRnZUNsYXNzZXMuaW52aXNpYmxlfWBdOiB7XG4gICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMCkgdHJhbnNsYXRlKDUwJSwgNTAlKSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHByb3BzOiAoe1xuICAgICAgICBvd25lclN0YXRlXG4gICAgICB9KSA9PiBvd25lclN0YXRlLmFuY2hvck9yaWdpbi52ZXJ0aWNhbCA9PT0gJ3RvcCcgJiYgb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4uaG9yaXpvbnRhbCA9PT0gJ2xlZnQnICYmIG93bmVyU3RhdGUub3ZlcmxhcCA9PT0gJ2NpcmN1bGFyJyxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHRvcDogJzE0JScsXG4gICAgICAgIGxlZnQ6ICcxNCUnLFxuICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgxKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJScsXG4gICAgICAgIFtgJi4ke2JhZGdlQ2xhc3Nlcy5pbnZpc2libGV9YF06IHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZSgwKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBwcm9wczogKHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSkgPT4gb3duZXJTdGF0ZS5hbmNob3JPcmlnaW4udmVydGljYWwgPT09ICdib3R0b20nICYmIG93bmVyU3RhdGUuYW5jaG9yT3JpZ2luLmhvcml6b250YWwgPT09ICdsZWZ0JyAmJiBvd25lclN0YXRlLm92ZXJsYXAgPT09ICdjaXJjdWxhcicsXG4gICAgICBzdHlsZToge1xuICAgICAgICBib3R0b206ICcxNCUnLFxuICAgICAgICBsZWZ0OiAnMTQlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMSkgdHJhbnNsYXRlKC01MCUsIDUwJSknLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICcwJSAxMDAlJyxcbiAgICAgICAgW2AmLiR7YmFkZ2VDbGFzc2VzLmludmlzaWJsZX1gXToge1xuICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApIHRyYW5zbGF0ZSgtNTAlLCA1MCUpJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaW52aXNpYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LFxuICAgICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfV1cbiAgfTtcbn0pO1xuY29uc3QgQmFkZ2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCYWRnZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGJhZGdlLCBfc2xvdFByb3BzJHJvb3QsIF9zbG90UHJvcHMkYmFkZ2U7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQmFkZ2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhbmNob3JPcmlnaW46IGFuY2hvck9yaWdpblByb3AgPSB7XG4gICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0J1xuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBvdmVybGFwOiBvdmVybGFwUHJvcCA9ICdyZWN0YW5ndWxhcicsXG4gICAgICBjb2xvcjogY29sb3JQcm9wID0gJ2RlZmF1bHQnLFxuICAgICAgaW52aXNpYmxlOiBpbnZpc2libGVQcm9wID0gZmFsc2UsXG4gICAgICBtYXg6IG1heFByb3AgPSA5OSxcbiAgICAgIGJhZGdlQ29udGVudDogYmFkZ2VDb250ZW50UHJvcCxcbiAgICAgIHNsb3RzLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2hvd1plcm8gPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgYmFkZ2VDb250ZW50LFxuICAgIGludmlzaWJsZTogaW52aXNpYmxlRnJvbUhvb2ssXG4gICAgbWF4LFxuICAgIGRpc3BsYXlWYWx1ZTogZGlzcGxheVZhbHVlRnJvbUhvb2tcbiAgfSA9IHVzZUJhZGdlKHtcbiAgICBtYXg6IG1heFByb3AsXG4gICAgaW52aXNpYmxlOiBpbnZpc2libGVQcm9wLFxuICAgIGJhZGdlQ29udGVudDogYmFkZ2VDb250ZW50UHJvcCxcbiAgICBzaG93WmVyb1xuICB9KTtcbiAgY29uc3QgcHJldlByb3BzID0gdXNlUHJldmlvdXNQcm9wcyh7XG4gICAgYW5jaG9yT3JpZ2luOiBhbmNob3JPcmlnaW5Qcm9wLFxuICAgIGNvbG9yOiBjb2xvclByb3AsXG4gICAgb3ZlcmxhcDogb3ZlcmxhcFByb3AsXG4gICAgdmFyaWFudDogdmFyaWFudFByb3AsXG4gICAgYmFkZ2VDb250ZW50OiBiYWRnZUNvbnRlbnRQcm9wXG4gIH0pO1xuICBjb25zdCBpbnZpc2libGUgPSBpbnZpc2libGVGcm9tSG9vayB8fCBiYWRnZUNvbnRlbnQgPT0gbnVsbCAmJiB2YXJpYW50UHJvcCAhPT0gJ2RvdCc7XG4gIGNvbnN0IHtcbiAgICBjb2xvciA9IGNvbG9yUHJvcCxcbiAgICBvdmVybGFwID0gb3ZlcmxhcFByb3AsXG4gICAgYW5jaG9yT3JpZ2luID0gYW5jaG9yT3JpZ2luUHJvcCxcbiAgICB2YXJpYW50ID0gdmFyaWFudFByb3BcbiAgfSA9IGludmlzaWJsZSA/IHByZXZQcm9wcyA6IHByb3BzO1xuICBjb25zdCBkaXNwbGF5VmFsdWUgPSB2YXJpYW50ICE9PSAnZG90JyA/IGRpc3BsYXlWYWx1ZUZyb21Ib29rIDogdW5kZWZpbmVkO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYmFkZ2VDb250ZW50LFxuICAgIGludmlzaWJsZSxcbiAgICBtYXgsXG4gICAgZGlzcGxheVZhbHVlLFxuICAgIHNob3daZXJvLFxuICAgIGFuY2hvck9yaWdpbixcbiAgICBjb2xvcixcbiAgICBvdmVybGFwLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcblxuICAvLyBzdXBwb3J0IGJvdGggYHNsb3RzYCBhbmQgYGNvbXBvbmVudHNgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IEJhZGdlUm9vdDtcbiAgY29uc3QgQmFkZ2VTbG90ID0gKF9yZWYyID0gKF9zbG90cyRiYWRnZSA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5iYWRnZSkgIT0gbnVsbCA/IF9zbG90cyRiYWRnZSA6IGNvbXBvbmVudHMuQmFkZ2UpICE9IG51bGwgPyBfcmVmMiA6IEJhZGdlQmFkZ2U7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRyb290ID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICBjb25zdCBiYWRnZVNsb3RQcm9wcyA9IChfc2xvdFByb3BzJGJhZGdlID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMuYmFkZ2UpICE9IG51bGwgPyBfc2xvdFByb3BzJGJhZGdlIDogY29tcG9uZW50c1Byb3BzLmJhZGdlO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcm9vdFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZixcbiAgICAgIGFzOiBjb21wb25lbnRcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSk7XG4gIGNvbnN0IGJhZGdlUHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBCYWRnZVNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGJhZGdlU2xvdFByb3BzLFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuYmFkZ2UsIGJhZGdlU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBiYWRnZVNsb3RQcm9wcy5jbGFzc05hbWUpXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgLyojX19QVVJFX18qL19qc3goQmFkZ2VTbG90LCBfZXh0ZW5kcyh7fSwgYmFkZ2VQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGRpc3BsYXlWYWx1ZVxuICAgIH0pKV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCYWRnZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgYW5jaG9yIG9mIHRoZSBiYWRnZS5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICogICBob3Jpem9udGFsOiAncmlnaHQnLFxuICAgKiB9XG4gICAqL1xuICBhbmNob3JPcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mKFsnbGVmdCcsICdyaWdodCddKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAndG9wJ10pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCByZW5kZXJlZCB3aXRoaW4gdGhlIGJhZGdlLlxuICAgKi9cbiAgYmFkZ2VDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBiYWRnZSB3aWxsIGJlIGFkZGVkIHJlbGF0aXZlIHRvIHRoaXMgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAnZGVmYXVsdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhZGdlOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWRnZSBpcyBpbnZpc2libGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbnZpc2libGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTWF4IGNvdW50IHRvIHNob3cuXG4gICAqIEBkZWZhdWx0IDk5XG4gICAqL1xuICBtYXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBXcmFwcGVkIHNoYXBlIHRoZSBiYWRnZSBzaG91bGQgb3ZlcmxhcC5cbiAgICogQGRlZmF1bHQgJ3JlY3Rhbmd1bGFyJ1xuICAgKi9cbiAgb3ZlcmxhcDogUHJvcFR5cGVzLm9uZU9mKFsnY2lyY3VsYXInLCAncmVjdGFuZ3VsYXInXSksXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBiYWRnZSBpcyBoaWRkZW4gd2hlbiBgYmFkZ2VDb250ZW50YCBpcyB6ZXJvLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2hvd1plcm86IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJhZGdlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCYWRnZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhZGdlOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnc3RhbmRhcmQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2RvdCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQmFkZ2U7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMTJjMi4yMSAwIDQtMS43OSA0LTRzLTEuNzktNC00LTQtNCAxLjc5LTQgNCAxLjc5IDQgNCA0em0wIDJjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTR6XCJcbn0pLCAnUGVyc29uJyk7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmF0YXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUF2YXRhcicsIHNsb3QpO1xufVxuY29uc3QgYXZhdGFyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUF2YXRhcicsIFsncm9vdCcsICdjb2xvckRlZmF1bHQnLCAnY2lyY3VsYXInLCAncm91bmRlZCcsICdzcXVhcmUnLCAnaW1nJywgJ2ZhbGxiYWNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgYXZhdGFyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJlbGVtZW50VHlwZVwiLCBcIm93bmVyU3RhdGVcIiwgXCJleHRlcm5hbEZvcndhcmRlZFByb3BzXCIsIFwiZ2V0U2xvdE93bmVyU3RhdGVcIiwgXCJpbnRlcm5hbEZvcndhcmRlZFByb3BzXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiY29tcG9uZW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJjb21wb25lbnRcIl07XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IGFwcGVuZE93bmVyU3RhdGUgZnJvbSAnQG11aS91dGlscy9hcHBlbmRPd25lclN0YXRlJztcbmltcG9ydCByZXNvbHZlQ29tcG9uZW50UHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlQ29tcG9uZW50UHJvcHMnO1xuaW1wb3J0IG1lcmdlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvbWVyZ2VTbG90UHJvcHMnO1xuLyoqXG4gKiBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBNYXRlcmlhbCBVSSBzbG90LlxuICpcbiAqIFRoaXMgaXMgYW4gYWR2YW5jZWQgdmVyc2lvbiBvZiBCYXNlIFVJIGB1c2VTbG90UHJvcHNgIGJlY2F1c2UgTWF0ZXJpYWwgVUkgYWxsb3dzIGxlYWYgY29tcG9uZW50IHRvIGJlIGN1c3RvbWl6ZWQgdmlhIGBjb21wb25lbnRgIHByb3BcbiAqIHdoaWxlIEJhc2UgVUkgZG9lcyBub3QgbmVlZCB0byBzdXBwb3J0IGxlYWYgY29tcG9uZW50IGN1c3RvbWl6YXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWU6IG5hbWUgb2YgdGhlIHNsb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7W1Nsb3QsIHNsb3RQcm9wc119IFRoZSBzbG90J3MgUmVhY3QgY29tcG9uZW50IGFuZCB0aGUgc2xvdCdzIHByb3BzXG4gKlxuICogTm90ZTogdGhlIHJldHVybmVkIHNsb3QncyBwcm9wc1xuICogLSB3aWxsIG5ldmVyIGNvbnRhaW4gYGNvbXBvbmVudGAgcHJvcC5cbiAqIC0gbWlnaHQgY29udGFpbiBgYXNgIHByb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNsb3QoXG4vKipcbiAqIFRoZSBzbG90J3MgbmFtZS4gQWxsIE1hdGVyaWFsIFVJIGNvbXBvbmVudHMgc2hvdWxkIGhhdmUgYHJvb3RgIHNsb3QuXG4gKlxuICogSWYgdGhlIG5hbWUgaXMgYHJvb3RgLCB0aGUgbG9naWMgYmVoYXZlcyBkaWZmZXJlbnRseSBmcm9tIG90aGVyIHNsb3RzLFxuICogZS5nLiB0aGUgYGV4dGVybmFsRm9yd2FyZGVkUHJvcHNgIGFyZSBzcHJlYWQgdG8gYHJvb3RgIHNsb3QgYnV0IG5vdCBvdGhlciBzbG90cy5cbiAqL1xubmFtZSwgcGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBlbGVtZW50VHlwZTogaW5pdGlhbEVsZW1lbnRUeXBlLFxuICAgICAgb3duZXJTdGF0ZSxcbiAgICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgICBnZXRTbG90T3duZXJTdGF0ZSxcbiAgICAgIGludGVybmFsRm9yd2FyZGVkUHJvcHNcbiAgICB9ID0gcGFyYW1ldGVycyxcbiAgICB1c2VTbG90UHJvcHNQYXJhbXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYXJhbWV0ZXJzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnQ6IHJvb3RDb21wb25lbnQsXG4gICAgICBzbG90cyA9IHtcbiAgICAgICAgW25hbWVdOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBzbG90UHJvcHMgPSB7XG4gICAgICAgIFtuYW1lXTogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSA9IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShleHRlcm5hbEZvcndhcmRlZFByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZWxlbWVudFR5cGUgPSBzbG90c1tuYW1lXSB8fCBpbml0aWFsRWxlbWVudFR5cGU7XG5cbiAgLy8gYHNsb3RQcm9wc1tuYW1lXWAgY2FuIGJlIGEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0aGUgY29tcG9uZW50J3Mgb3duZXJTdGF0ZS5cbiAgLy8gYHJlc29sdmVkQ29tcG9uZW50c1Byb3BzYCBpcyBhbHdheXMgYSBwbGFpbiBvYmplY3QuXG4gIGNvbnN0IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID0gcmVzb2x2ZUNvbXBvbmVudFByb3BzKHNsb3RQcm9wc1tuYW1lXSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IF9tZXJnZVNsb3RQcm9wcyA9IG1lcmdlU2xvdFByb3BzKF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0sIHVzZVNsb3RQcm9wc1BhcmFtcywge1xuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogbmFtZSA9PT0gJ3Jvb3QnID8gb3RoZXIgOiB1bmRlZmluZWQsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNcbiAgICB9KSksXG4gICAge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29tcG9uZW50OiBzbG90Q29tcG9uZW50XG4gICAgICB9LFxuICAgICAgaW50ZXJuYWxSZWZcbiAgICB9ID0gX21lcmdlU2xvdFByb3BzLFxuICAgIG1lcmdlZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX21lcmdlU2xvdFByb3BzLnByb3BzLCBfZXhjbHVkZWQzKTtcbiAgY29uc3QgcmVmID0gdXNlRm9ya1JlZihpbnRlcm5hbFJlZiwgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzLnJlZiwgcGFyYW1ldGVycy5yZWYpO1xuICBjb25zdCBzbG90T3duZXJTdGF0ZSA9IGdldFNsb3RPd25lclN0YXRlID8gZ2V0U2xvdE93bmVyU3RhdGUobWVyZ2VkUHJvcHMpIDoge307XG4gIGNvbnN0IGZpbmFsT3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBzbG90T3duZXJTdGF0ZSk7XG4gIGNvbnN0IExlYWZDb21wb25lbnQgPSBuYW1lID09PSAncm9vdCcgPyBzbG90Q29tcG9uZW50IHx8IHJvb3RDb21wb25lbnQgOiBzbG90Q29tcG9uZW50O1xuICBjb25zdCBwcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoZWxlbWVudFR5cGUsIF9leHRlbmRzKHt9LCBuYW1lID09PSAncm9vdCcgJiYgIXJvb3RDb21wb25lbnQgJiYgIXNsb3RzW25hbWVdICYmIGludGVybmFsRm9yd2FyZGVkUHJvcHMsIG5hbWUgIT09ICdyb290JyAmJiAhc2xvdHNbbmFtZV0gJiYgaW50ZXJuYWxGb3J3YXJkZWRQcm9wcywgbWVyZ2VkUHJvcHMsIExlYWZDb21wb25lbnQgJiYge1xuICAgIGFzOiBMZWFmQ29tcG9uZW50XG4gIH0sIHtcbiAgICByZWZcbiAgfSksIGZpbmFsT3duZXJTdGF0ZSk7XG4gIE9iamVjdC5rZXlzKHNsb3RPd25lclN0YXRlKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBkZWxldGUgcHJvcHNbcHJvcE5hbWVdO1xuICB9KTtcbiAgcmV0dXJuIFtlbGVtZW50VHlwZSwgcHJvcHNdO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsdFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJpbWdQcm9wc1wiLCBcInNpemVzXCIsIFwic3JjXCIsIFwic3JjU2V0XCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJy4uL3plcm8tc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBQZXJzb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL1BlcnNvbic7XG5pbXBvcnQgeyBnZXRBdmF0YXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2F2YXRhckNsYXNzZXMnO1xuaW1wb3J0IHVzZVNsb3QgZnJvbSAnLi4vdXRpbHMvdXNlU2xvdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvckRlZmF1bHRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGNvbG9yRGVmYXVsdCAmJiAnY29sb3JEZWZhdWx0J10sXG4gICAgaW1nOiBbJ2ltZyddLFxuICAgIGZhbGxiYWNrOiBbJ2ZhbGxiYWNrJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRBdmF0YXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEF2YXRhclJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUF2YXRhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5jb2xvckRlZmF1bHQgJiYgc3R5bGVzLmNvbG9yRGVmYXVsdF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBmbGV4U2hyaW5rOiAwLFxuICB3aWR0aDogNDAsXG4gIGhlaWdodDogNDAsXG4gIGZvbnRGYW1pbHk6IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseSxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgyMCksXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIGJvcmRlclJhZGl1czogJzUwJScsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB2YXJpYW50czogW3tcbiAgICBwcm9wczoge1xuICAgICAgdmFyaWFudDogJ3JvdW5kZWQnXG4gICAgfSxcbiAgICBzdHlsZToge1xuICAgICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzXG4gICAgfVxuICB9LCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIHZhcmlhbnQ6ICdzcXVhcmUnXG4gICAgfSxcbiAgICBzdHlsZToge1xuICAgICAgYm9yZGVyUmFkaXVzOiAwXG4gICAgfVxuICB9LCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbG9yRGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLmRlZmF1bHRcbiAgICB9LCB0aGVtZS52YXJzID8ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzLnBhbGV0dGUuQXZhdGFyLmRlZmF1bHRCZ1xuICAgIH0gOiBfZXh0ZW5kcyh7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdXG4gICAgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVs2MDBdXG4gICAgfSkpKVxuICB9XVxufSkpO1xuY29uc3QgQXZhdGFySW1nID0gc3R5bGVkKCdpbWcnLCB7XG4gIG5hbWU6ICdNdWlBdmF0YXInLFxuICBzbG90OiAnSW1nJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuaW1nXG59KSh7XG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAvLyBIYW5kbGUgbm9uLXNxdWFyZSBpbWFnZS4gVGhlIHByb3BlcnR5IGlzbid0IHN1cHBvcnRlZCBieSBJRTExLlxuICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gIC8vIEhpZGUgYWx0IHRleHQuXG4gIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAvLyBIaWRlIHRoZSBpbWFnZSBicm9rZW4gaWNvbiwgb25seSB3b3JrcyBvbiBDaHJvbWUuXG4gIHRleHRJbmRlbnQ6IDEwMDAwXG59KTtcbmNvbnN0IEF2YXRhckZhbGxiYWNrID0gc3R5bGVkKFBlcnNvbiwge1xuICBuYW1lOiAnTXVpQXZhdGFyJyxcbiAgc2xvdDogJ0ZhbGxiYWNrJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuZmFsbGJhY2tcbn0pKHtcbiAgd2lkdGg6ICc3NSUnLFxuICBoZWlnaHQ6ICc3NSUnXG59KTtcbmZ1bmN0aW9uIHVzZUxvYWRlZCh7XG4gIGNyb3NzT3JpZ2luLFxuICByZWZlcnJlclBvbGljeSxcbiAgc3JjLFxuICBzcmNTZXRcbn0pIHtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNyYyAmJiAhc3JjU2V0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXRMb2FkZWQoZmFsc2UpO1xuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0TG9hZGVkKCdsb2FkZWQnKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRMb2FkZWQoJ2Vycm9yJyk7XG4gICAgfTtcbiAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xuICAgIGltYWdlLnJlZmVycmVyUG9saWN5ID0gcmVmZXJyZXJQb2xpY3k7XG4gICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgIGlmIChzcmNTZXQpIHtcbiAgICAgIGltYWdlLnNyY3NldCA9IHNyY1NldDtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG4gIH0sIFtjcm9zc09yaWdpbiwgcmVmZXJyZXJQb2xpY3ksIHNyYywgc3JjU2V0XSk7XG4gIHJldHVybiBsb2FkZWQ7XG59XG5jb25zdCBBdmF0YXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBBdmF0YXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQXZhdGFyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWx0LFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuUHJvcCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHNsb3RQcm9wcyA9IHt9LFxuICAgICAgaW1nUHJvcHMsXG4gICAgICBzaXplcyxcbiAgICAgIHNyYyxcbiAgICAgIHNyY1NldCxcbiAgICAgIHZhcmlhbnQgPSAnY2lyY3VsYXInXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGxldCBjaGlsZHJlbiA9IG51bGw7XG5cbiAgLy8gVXNlIGEgaG9vayBpbnN0ZWFkIG9mIG9uRXJyb3Igb24gdGhlIGltZyBlbGVtZW50IHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICBjb25zdCBsb2FkZWQgPSB1c2VMb2FkZWQoX2V4dGVuZHMoe30sIGltZ1Byb3BzLCB7XG4gICAgc3JjLFxuICAgIHNyY1NldFxuICB9KSk7XG4gIGNvbnN0IGhhc0ltZyA9IHNyYyB8fCBzcmNTZXQ7XG4gIGNvbnN0IGhhc0ltZ05vdEZhaWxpbmcgPSBoYXNJbWcgJiYgbG9hZGVkICE9PSAnZXJyb3InO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3JEZWZhdWx0OiAhaGFzSW1nTm90RmFpbGluZyxcbiAgICBjb21wb25lbnQsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbSW1nU2xvdCwgaW1nU2xvdFByb3BzXSA9IHVzZVNsb3QoJ2ltZycsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMuaW1nLFxuICAgIGVsZW1lbnRUeXBlOiBBdmF0YXJJbWcsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczoge1xuICAgICAgc2xvdHMsXG4gICAgICBzbG90UHJvcHM6IHtcbiAgICAgICAgaW1nOiBfZXh0ZW5kcyh7fSwgaW1nUHJvcHMsIHNsb3RQcm9wcy5pbWcpXG4gICAgICB9XG4gICAgfSxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIGFsdCxcbiAgICAgIHNyYyxcbiAgICAgIHNyY1NldCxcbiAgICAgIHNpemVzXG4gICAgfSxcbiAgICBvd25lclN0YXRlXG4gIH0pO1xuICBpZiAoaGFzSW1nTm90RmFpbGluZykge1xuICAgIGNoaWxkcmVuID0gLyojX19QVVJFX18qL19qc3goSW1nU2xvdCwgX2V4dGVuZHMoe30sIGltZ1Nsb3RQcm9wcykpO1xuICAgIC8vIFdlIG9ubHkgcmVuZGVyIHZhbGlkIGNoaWxkcmVuLCBub24gdmFsaWQgY2hpbGRyZW4gYXJlIHJlbmRlcmVkIHdpdGggYSBmYWxsYmFja1xuICAgIC8vIFdlIGNvbnNpZGVyIHRoYXQgaW52YWxpZCBjaGlsZHJlbiBhcmUgYWxsIGZhbHN5IHZhbHVlcywgZXhjZXB0IDAsIHdoaWNoIGlzIHZhbGlkLlxuICB9IGVsc2UgaWYgKCEhY2hpbGRyZW5Qcm9wIHx8IGNoaWxkcmVuUHJvcCA9PT0gMCkge1xuICAgIGNoaWxkcmVuID0gY2hpbGRyZW5Qcm9wO1xuICB9IGVsc2UgaWYgKGhhc0ltZyAmJiBhbHQpIHtcbiAgICBjaGlsZHJlbiA9IGFsdFswXTtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZHJlbiA9IC8qI19fUFVSRV9fKi9fanN4KEF2YXRhckZhbGxiYWNrLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmZhbGxiYWNrXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEF2YXRhclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEF2YXRhci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBVc2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYHNyY2Agb3IgYHNyY1NldGAgdG9cbiAgICogcHJvdmlkZSBhbiBhbHQgYXR0cmlidXRlIGZvciB0aGUgcmVuZGVyZWQgYGltZ2AgZWxlbWVudC5cbiAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVuZGVyIGljb24gb3IgdGV4dCBlbGVtZW50cyBpbnNpZGUgdGhlIEF2YXRhciBpZiBgc3JjYCBpcyBub3Qgc2V0LlxuICAgKiBUaGlzIGNhbiBiZSBhbiBlbGVtZW50LCBvciBqdXN0IGEgc3RyaW5nLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGltZ2AgZWxlbWVudCBpZiB0aGUgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSBhbiBpbWFnZS5cbiAgICogSXQgY2FuIGJlIHVzZWQgdG8gbGlzdGVuIGZvciB0aGUgbG9hZGluZyBlcnJvciBldmVudC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90UHJvcHMuaW1nYCBpbnN0ZWFkLiBUaGlzIHByb3Agd2lsbCBiZSByZW1vdmVkIGluIHY3LiBbSG93IHRvIG1pZ3JhdGVdKC9tYXRlcmlhbC11aS9taWdyYXRpb24vbWlncmF0aW5nLWZyb20tZGVwcmVjYXRlZC1hcGlzLykuXG4gICAqL1xuICBpbWdQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBgc2l6ZXNgIGF0dHJpYnV0ZSBmb3IgdGhlIGBpbWdgIGVsZW1lbnQuXG4gICAqL1xuICBzaXplczogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGltZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbWc6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBgc3JjYCBhdHRyaWJ1dGUgZm9yIHRoZSBgaW1nYCBlbGVtZW50LlxuICAgKi9cbiAgc3JjOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGBzcmNTZXRgIGF0dHJpYnV0ZSBmb3IgdGhlIGBpbWdgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIGF0dHJpYnV0ZSBmb3IgcmVzcG9uc2l2ZSBpbWFnZSBkaXNwbGF5LlxuICAgKi9cbiAgc3JjU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHNoYXBlIG9mIHRoZSBhdmF0YXIuXG4gICAqIEBkZWZhdWx0ICdjaXJjdWxhcidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2lyY3VsYXInLCAncm91bmRlZCcsICdzcXVhcmUnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEF2YXRhcjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVR5cG9ncmFwaHknLCBzbG90KTtcbn1cbmNvbnN0IHR5cG9ncmFwaHlDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVHlwb2dyYXBoeScsIFsncm9vdCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJywgJ2JvZHkxJywgJ2JvZHkyJywgJ2luaGVyaXQnLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnb3ZlcmxpbmUnLCAnYWxpZ25MZWZ0JywgJ2FsaWduUmlnaHQnLCAnYWxpZ25DZW50ZXInLCAnYWxpZ25KdXN0aWZ5JywgJ25vV3JhcCcsICdndXR0ZXJCb3R0b20nLCAncGFyYWdyYXBoJ10pO1xuZXhwb3J0IGRlZmF1bHQgdHlwb2dyYXBoeUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVR5cG9ncmFwaHknXG4gIH0pO1xuICBjb25zdCBjb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnModGhlbWVQcm9wcy5jb2xvcik7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKF9leHRlbmRzKHt9LCB0aGVtZVByb3BzLCB7XG4gICAgY29sb3JcbiAgfSkpO1xuICBjb25zdCB7XG4gICAgICBhbGlnbiA9ICdpbmhlcml0JyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGd1dHRlckJvdHRvbSA9IGZhbHNlLFxuICAgICAgbm9XcmFwID0gZmFsc2UsXG4gICAgICBwYXJhZ3JhcGggPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnYm9keTEnLFxuICAgICAgdmFyaWFudE1hcHBpbmcgPSBkZWZhdWx0VmFyaWFudE1hcHBpbmdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduLFxuICAgIGNvbG9yLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICB2YXJpYW50TWFwcGluZ1xuICB9KTtcbiAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50IHx8IChwYXJhZ3JhcGggPyAncCcgOiB2YXJpYW50TWFwcGluZ1t2YXJpYW50XSB8fCBkZWZhdWx0VmFyaWFudE1hcHBpbmdbdmFyaWFudF0pIHx8ICdzcGFuJztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50LFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUeXBvZ3JhcGh5LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFNldCB0aGUgdGV4dC1hbGlnbiBvbiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnaW5oZXJpdCcsICdqdXN0aWZ5JywgJ2xlZnQnLCAncmlnaHQnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIGhhdmUgYSBib3R0b20gbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3V0dGVyQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBub3Qgd3JhcCwgYnV0IGluc3RlYWQgd2lsbCB0cnVuY2F0ZSB3aXRoIGEgdGV4dCBvdmVyZmxvdyBlbGxpcHNpcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRleHQgb3ZlcmZsb3cgY2FuIG9ubHkgaGFwcGVuIHdpdGggYmxvY2sgb3IgaW5saW5lLWJsb2NrIGxldmVsIGVsZW1lbnRzXG4gICAqICh0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgd2lkdGggaW4gb3JkZXIgdG8gb3ZlcmZsb3cpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9XcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhIHBhcmFncmFwaCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyYWdyYXBoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUeXBvZ3JhcGh5OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi9jcmVhdGVTdHlsZWQnO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKCk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcykge1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuICByZXR1cm4gcmVzb2x2ZVByb3BzKHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzLCBwcm9wcyk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIGxldCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGlmICh0aGVtZUlkKSB7XG4gICAgdGhlbWUgPSB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbiAgfVxuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwiZGlyZWN0aW9uXCIsIFwic3BhY2luZ1wiLCBcImRpdmlkZXJcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInVzZUZsZXhHYXBcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzeXN0ZW1TdHlsZWQgZnJvbSAnLi4vc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzU3lzdGVtIGZyb20gJy4uL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgbWVyZ2VCcmVha3BvaW50c0luT3JkZXIsIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnLi4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlTcGFjaW5nLCBnZXRWYWx1ZSB9IGZyb20gJy4uL3NwYWNpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG4vLyB3aWRlbmluZyBUaGVtZSB0byBhbnkgc28gdGhhdCB0aGUgY29uc3VtZXIgY2FuIG93biB0aGUgdGhlbWUgc3RydWN0dXJlLlxuY29uc3QgZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCA9IHN5c3RlbVN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU3RhY2snLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pO1xuZnVuY3Rpb24gdXNlVGhlbWVQcm9wc0RlZmF1bHQocHJvcHMpIHtcbiAgcmV0dXJuIHVzZVRoZW1lUHJvcHNTeXN0ZW0oe1xuICAgIHByb3BzLFxuICAgIG5hbWU6ICdNdWlTdGFjaycsXG4gICAgZGVmYXVsdFRoZW1lXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBzZXBhcmF0b3IgUmVhY3QgZWxlbWVudCBpbnRlcnNwZXJzZWQgYmV0d2VlblxuICogZWFjaCBSZWFjdCBub2RlIG9mIHRoZSBpbnB1dCBjaGlsZHJlbi5cbiAqXG4gKiA+IGpvaW5DaGlsZHJlbihbMSwyLDNdLCAwKVxuICogWzEsMCwyLDAsM11cbiAqL1xuZnVuY3Rpb24gam9pbkNoaWxkcmVuKGNoaWxkcmVuLCBzZXBhcmF0b3IpIHtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGNoaWxkcmVuQXJyYXkucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcbiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbkFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIG91dHB1dC5wdXNoKCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KHNlcGFyYXRvciwge1xuICAgICAgICBrZXk6IGBzZXBhcmF0b3ItJHtpbmRleH1gXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtdKTtcbn1cbmNvbnN0IGdldFNpZGVGcm9tRGlyZWN0aW9uID0gZGlyZWN0aW9uID0+IHtcbiAgcmV0dXJuIHtcbiAgICByb3c6ICdMZWZ0JyxcbiAgICAncm93LXJldmVyc2UnOiAnUmlnaHQnLFxuICAgIGNvbHVtbjogJ1RvcCcsXG4gICAgJ2NvbHVtbi1yZXZlcnNlJzogJ0JvdHRvbSdcbiAgfVtkaXJlY3Rpb25dO1xufTtcbmV4cG9ydCBjb25zdCBzdHlsZSA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiB7XG4gIGxldCBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG4gIH0sIGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICB0aGVtZVxuICB9LCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pLCBwcm9wVmFsdWUgPT4gKHtcbiAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgfSkpKTtcbiAgaWYgKG93bmVyU3RhdGUuc3BhY2luZykge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKTtcbiAgICBjb25zdCBiYXNlID0gT2JqZWN0LmtleXModGhlbWUuYnJlYWtwb2ludHMudmFsdWVzKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvd25lclN0YXRlLnNwYWNpbmcgPT09ICdvYmplY3QnICYmIG93bmVyU3RhdGUuc3BhY2luZ1ticmVha3BvaW50XSAhPSBudWxsIHx8IHR5cGVvZiBvd25lclN0YXRlLmRpcmVjdGlvbiA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5kaXJlY3Rpb25bYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBhY2NbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgZGlyZWN0aW9uVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBjb25zdCBzcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLnNwYWNpbmcsXG4gICAgICBiYXNlXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3Rpb25WYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhkaXJlY3Rpb25WYWx1ZXMpLmZvckVhY2goKGJyZWFrcG9pbnQsIGluZGV4LCBicmVha3BvaW50cykgPT4ge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZSA9IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XTtcbiAgICAgICAgaWYgKCFkaXJlY3Rpb25WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGlyZWN0aW9uVmFsdWUgPSBpbmRleCA+IDAgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludHNbaW5kZXggLSAxXV0gOiAnY29sdW1uJztcbiAgICAgICAgICBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gPSBwcmV2aW91c0RpcmVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgaWYgKG93bmVyU3RhdGUudXNlRmxleEdhcCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIFRoZSB1c2VGbGV4R2FwPXtmYWxzZX0gaW1wbGVtZW50IHJlbGllcyBvbiBlYWNoIGNoaWxkIHRvIGdpdmUgdXAgY29udHJvbCBvZiB0aGUgbWFyZ2luLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBtYXJnaW4gdG8gYXZvaWQgZG91YmxlIHNwYWNpbmcuXG4gICAgICAgICcmID4gOm5vdChzdHlsZSk6bm90KHN0eWxlKSc6IHtcbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKSB+IDpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIFtgbWFyZ2luJHtnZXRTaWRlRnJvbURpcmVjdGlvbihicmVha3BvaW50ID8gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdIDogb3duZXJTdGF0ZS5kaXJlY3Rpb24pfWBdOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgc3R5bGVzID0gZGVlcG1lcmdlKHN0eWxlcywgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCBzcGFjaW5nVmFsdWVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpKTtcbiAgfVxuICBzdHlsZXMgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcih0aGVtZS5icmVha3BvaW50cywgc3R5bGVzKTtcbiAgcmV0dXJuIHN0eWxlcztcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdGFjayhvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBhZGRpbmcgY3VzdG9tIHN0eWxlZCBmbiAoZm9yIGV4YW1wbGUgZm9yIGN1c3RvbSBzeCBzdHlsZSBmdW5jdGlvbilcbiAgICBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50LFxuICAgIHVzZVRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzRGVmYXVsdCxcbiAgICBjb21wb25lbnROYW1lID0gJ011aVN0YWNrJ1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2xvdHMgPSB7XG4gICAgICByb290OiBbJ3Jvb3QnXVxuICAgIH07XG4gICAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBzbG90ID0+IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QpLCB7fSk7XG4gIH07XG4gIGNvbnN0IFN0YWNrUm9vdCA9IGNyZWF0ZVN0eWxlZENvbXBvbmVudChzdHlsZSk7XG4gIGNvbnN0IFN0YWNrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyhpblByb3BzKTtcbiAgICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTsgLy8gYGNvbG9yYCB0eXBlIGNvbmZsaWN0cyB3aXRoIGh0bWwgY29sb3IgYXR0cmlidXRlLlxuICAgIGNvbnN0IHtcbiAgICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICAgIGRpcmVjdGlvbiA9ICdjb2x1bW4nLFxuICAgICAgICBzcGFjaW5nID0gMCxcbiAgICAgICAgZGl2aWRlcixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgdXNlRmxleEdhcCA9IGZhbHNlXG4gICAgICB9ID0gcHJvcHMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICAgIGNvbnN0IG93bmVyU3RhdGUgPSB7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBzcGFjaW5nLFxuICAgICAgdXNlRmxleEdhcFxuICAgIH07XG4gICAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN0YWNrUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGRpdmlkZXIgPyBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIGRpdmlkZXIpIDogY2hpbGRyZW5cbiAgICB9KSk7XG4gIH0pO1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIGRpdmlkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0gOiB2b2lkIDA7XG4gIHJldHVybiBTdGFjaztcbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVTdGFjayB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5jb25zdCBTdGFjayA9IGNyZWF0ZVN0YWNrKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpU3RhY2snLFxuICAgIHNsb3Q6ICdSb290JyxcbiAgICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJ1xuICB9KVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnY29sdW1uJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQWRkIGFuIGVsZW1lbnQgYmV0d2VlbiBlYWNoIGNoaWxkLlxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wLCB3aGljaCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBDU1MgZmxleGJveCBgZ2FwYCBpcyB1c2VkIGluc3RlYWQgb2YgYXBwbHlpbmcgYG1hcmdpbmAgdG8gY2hpbGRyZW4uXG4gICAqXG4gICAqIFdoaWxlIENTUyBgZ2FwYCByZW1vdmVzIHRoZSBba25vd24gbGltaXRhdGlvbnNdKGh0dHBzOi8vbXVpLmNvbS9qb3ktdWkvcmVhY3Qtc3RhY2svI2xpbWl0YXRpb25zKSxcbiAgICogaXQgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiBzb21lIGJyb3dzZXJzLiBXZSByZWNvbW1lbmQgY2hlY2tpbmcgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWZsZXglMjBnYXAgYmVmb3JlIHVzaW5nIHRoaXMgZmxhZy5cbiAgICpcbiAgICogVG8gZW5hYmxlIHRoaXMgZmxhZyBnbG9iYWxseSwgZm9sbG93IHRoZSBbdGhlbWUncyBkZWZhdWx0IHByb3BzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi90aGVtZS1jb21wb25lbnRzLyNkZWZhdWx0LXByb3BzKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlRmxleEdhcDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTdGFjazsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem01IDEzLjU5TDE1LjU5IDE3IDEyIDEzLjQxIDguNDEgMTcgNyAxNS41OSAxMC41OSAxMiA3IDguNDEgOC40MSA3IDEyIDEwLjU5IDE1LjU5IDcgMTcgOC40MSAxMy40MSAxMiAxNyAxNS41OXpcIlxufSksICdDYW5jZWwnKTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoaXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNoaXAnLCBzbG90KTtcbn1cbmNvbnN0IGNoaXBDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2hpcCcsIFsncm9vdCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdjb2xvckVycm9yJywgJ2NvbG9ySW5mbycsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JTdWNjZXNzJywgJ2NvbG9yV2FybmluZycsICdkaXNhYmxlZCcsICdjbGlja2FibGUnLCAnY2xpY2thYmxlQ29sb3JQcmltYXJ5JywgJ2NsaWNrYWJsZUNvbG9yU2Vjb25kYXJ5JywgJ2RlbGV0YWJsZScsICdkZWxldGFibGVDb2xvclByaW1hcnknLCAnZGVsZXRhYmxlQ29sb3JTZWNvbmRhcnknLCAnb3V0bGluZWQnLCAnZmlsbGVkJywgJ291dGxpbmVkUHJpbWFyeScsICdvdXRsaW5lZFNlY29uZGFyeScsICdmaWxsZWRQcmltYXJ5JywgJ2ZpbGxlZFNlY29uZGFyeScsICdhdmF0YXInLCAnYXZhdGFyU21hbGwnLCAnYXZhdGFyTWVkaXVtJywgJ2F2YXRhckNvbG9yUHJpbWFyeScsICdhdmF0YXJDb2xvclNlY29uZGFyeScsICdpY29uJywgJ2ljb25TbWFsbCcsICdpY29uTWVkaXVtJywgJ2ljb25Db2xvclByaW1hcnknLCAnaWNvbkNvbG9yU2Vjb25kYXJ5JywgJ2xhYmVsJywgJ2xhYmVsU21hbGwnLCAnbGFiZWxNZWRpdW0nLCAnZGVsZXRlSWNvbicsICdkZWxldGVJY29uU21hbGwnLCAnZGVsZXRlSWNvbk1lZGl1bScsICdkZWxldGVJY29uQ29sb3JQcmltYXJ5JywgJ2RlbGV0ZUljb25Db2xvclNlY29uZGFyeScsICdkZWxldGVJY29uT3V0bGluZWRDb2xvclByaW1hcnknLCAnZGVsZXRlSWNvbk91dGxpbmVkQ29sb3JTZWNvbmRhcnknLCAnZGVsZXRlSWNvbkZpbGxlZENvbG9yUHJpbWFyeScsICdkZWxldGVJY29uRmlsbGVkQ29sb3JTZWNvbmRhcnknLCAnZm9jdXNWaXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2hpcENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXZhdGFyXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xpY2thYmxlXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkZWxldGVJY29uXCIsIFwiZGlzYWJsZWRcIiwgXCJpY29uXCIsIFwibGFiZWxcIiwgXCJvbkNsaWNrXCIsIFwib25EZWxldGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIiwgXCJ0YWJJbmRleFwiLCBcInNraXBGb2N1c1doZW5EaXNhYmxlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgQ2FuY2VsSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2FuY2VsJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVuc3VwcG9ydGVkUHJvcCBmcm9tICcuLi91dGlscy91bnN1cHBvcnRlZFByb3AnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2hpcENsYXNzZXMsIHsgZ2V0Q2hpcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2hpcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVkLFxuICAgIHNpemUsXG4gICAgY29sb3IsXG4gICAgaWNvbkNvbG9yLFxuICAgIG9uRGVsZXRlLFxuICAgIGNsaWNrYWJsZSxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGNsaWNrYWJsZSAmJiAnY2xpY2thYmxlJywgY2xpY2thYmxlICYmIGBjbGlja2FibGVDb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgb25EZWxldGUgJiYgJ2RlbGV0YWJsZScsIG9uRGVsZXRlICYmIGBkZWxldGFibGVDb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYCR7dmFyaWFudH0ke2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIGxhYmVsOiBbJ2xhYmVsJywgYGxhYmVsJHtjYXBpdGFsaXplKHNpemUpfWBdLFxuICAgIGF2YXRhcjogWydhdmF0YXInLCBgYXZhdGFyJHtjYXBpdGFsaXplKHNpemUpfWAsIGBhdmF0YXJDb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUoc2l6ZSl9YCwgYGljb25Db2xvciR7Y2FwaXRhbGl6ZShpY29uQ29sb3IpfWBdLFxuICAgIGRlbGV0ZUljb246IFsnZGVsZXRlSWNvbicsIGBkZWxldGVJY29uJHtjYXBpdGFsaXplKHNpemUpfWAsIGBkZWxldGVJY29uQ29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGBkZWxldGVJY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfUNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENoaXBVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IENoaXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDaGlwJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbG9yLFxuICAgICAgaWNvbkNvbG9yLFxuICAgICAgY2xpY2thYmxlLFxuICAgICAgb25EZWxldGUsXG4gICAgICBzaXplLFxuICAgICAgdmFyaWFudFxuICAgIH0gPSBvd25lclN0YXRlO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2NoaXBDbGFzc2VzLmF2YXRhcn1gXTogc3R5bGVzLmF2YXRhclxuICAgIH0sIHtcbiAgICAgIFtgJiAuJHtjaGlwQ2xhc3Nlcy5hdmF0YXJ9YF06IHN0eWxlc1tgYXZhdGFyJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gICAgfSwge1xuICAgICAgW2AmIC4ke2NoaXBDbGFzc2VzLmF2YXRhcn1gXTogc3R5bGVzW2BhdmF0YXJDb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF1cbiAgICB9LCB7XG4gICAgICBbYCYgLiR7Y2hpcENsYXNzZXMuaWNvbn1gXTogc3R5bGVzLmljb25cbiAgICB9LCB7XG4gICAgICBbYCYgLiR7Y2hpcENsYXNzZXMuaWNvbn1gXTogc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gICAgfSwge1xuICAgICAgW2AmIC4ke2NoaXBDbGFzc2VzLmljb259YF06IHN0eWxlc1tgaWNvbkNvbG9yJHtjYXBpdGFsaXplKGljb25Db2xvcil9YF1cbiAgICB9LCB7XG4gICAgICBbYCYgLiR7Y2hpcENsYXNzZXMuZGVsZXRlSWNvbn1gXTogc3R5bGVzLmRlbGV0ZUljb25cbiAgICB9LCB7XG4gICAgICBbYCYgLiR7Y2hpcENsYXNzZXMuZGVsZXRlSWNvbn1gXTogc3R5bGVzW2BkZWxldGVJY29uJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gICAgfSwge1xuICAgICAgW2AmIC4ke2NoaXBDbGFzc2VzLmRlbGV0ZUljb259YF06IHN0eWxlc1tgZGVsZXRlSWNvbkNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gXVxuICAgIH0sIHtcbiAgICAgIFtgJiAuJHtjaGlwQ2xhc3Nlcy5kZWxldGVJY29ufWBdOiBzdHlsZXNbYGRlbGV0ZUljb24ke2NhcGl0YWxpemUodmFyaWFudCl9Q29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdXG4gICAgfSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXSwgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sIGNsaWNrYWJsZSAmJiBzdHlsZXMuY2xpY2thYmxlLCBjbGlja2FibGUgJiYgY29sb3IgIT09ICdkZWZhdWx0JyAmJiBzdHlsZXNbYGNsaWNrYWJsZUNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX0pYF0sIG9uRGVsZXRlICYmIHN0eWxlcy5kZWxldGFibGUsIG9uRGVsZXRlICYmIGNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2BkZWxldGFibGVDb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sIHN0eWxlc1t2YXJpYW50XSwgc3R5bGVzW2Ake3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdIDogdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMyksXG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5LFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkLFxuICAgIGJvcmRlclJhZGl1czogMzIgLyAyLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2JhY2tncm91bmQtY29sb3InLCAnYm94LXNoYWRvdyddKSxcbiAgICAvLyByZXNldCBjdXJzb3IgZXhwbGljaXRseSBpbiBjYXNlIEJ1dHRvbkJhc2UgaXMgdXNlZFxuICAgIGN1cnNvcjogJ3Vuc2V0JyxcbiAgICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICAgIG91dGxpbmU6IDAsXG4gICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICBib3JkZXI6IDAsXG4gICAgLy8gUmVtb3ZlIGBidXR0b25gIGJvcmRlclxuICAgIHBhZGRpbmc6IDAsXG4gICAgLy8gUmVtb3ZlIGBidXR0b25gIHBhZGRpbmdcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBbYCYuJHtjaGlwQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgb3BhY2l0eTogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkT3BhY2l0eSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICAgIH0sXG4gICAgW2AmIC4ke2NoaXBDbGFzc2VzLmF2YXRhcn1gXToge1xuICAgICAgbWFyZ2luTGVmdDogNSxcbiAgICAgIG1hcmdpblJpZ2h0OiAtNixcbiAgICAgIHdpZHRoOiAyNCxcbiAgICAgIGhlaWdodDogMjQsXG4gICAgICBjb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5DaGlwLmRlZmF1bHRBdmF0YXJDb2xvciA6IHRleHRDb2xvcixcbiAgICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTIpXG4gICAgfSxcbiAgICBbYCYgLiR7Y2hpcENsYXNzZXMuYXZhdGFyQ29sb3JQcmltYXJ5fWBdOiB7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUucHJpbWFyeS5jb250cmFzdFRleHQsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnByaW1hcnkuZGFya1xuICAgIH0sXG4gICAgW2AmIC4ke2NoaXBDbGFzc2VzLmF2YXRhckNvbG9yU2Vjb25kYXJ5fWBdOiB7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuc2Vjb25kYXJ5LmNvbnRyYXN0VGV4dCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuc2Vjb25kYXJ5LmRhcmtcbiAgICB9LFxuICAgIFtgJiAuJHtjaGlwQ2xhc3Nlcy5hdmF0YXJTbWFsbH1gXToge1xuICAgICAgbWFyZ2luTGVmdDogNCxcbiAgICAgIG1hcmdpblJpZ2h0OiAtNCxcbiAgICAgIHdpZHRoOiAxOCxcbiAgICAgIGhlaWdodDogMTgsXG4gICAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEwKVxuICAgIH0sXG4gICAgW2AmIC4ke2NoaXBDbGFzc2VzLmljb259YF06IF9leHRlbmRzKHtcbiAgICAgIG1hcmdpbkxlZnQ6IDUsXG4gICAgICBtYXJnaW5SaWdodDogLTZcbiAgICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgICAgZm9udFNpemU6IDE4LFxuICAgICAgbWFyZ2luTGVmdDogNCxcbiAgICAgIG1hcmdpblJpZ2h0OiAtNFxuICAgIH0sIG93bmVyU3RhdGUuaWNvbkNvbG9yID09PSBvd25lclN0YXRlLmNvbG9yICYmIF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkNoaXAuZGVmYXVsdEljb25Db2xvciA6IHRleHRDb2xvclxuICAgIH0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gICAgICBjb2xvcjogJ2luaGVyaXQnXG4gICAgfSkpLFxuICAgIFtgJiAuJHtjaGlwQ2xhc3Nlcy5kZWxldGVJY29ufWBdOiBfZXh0ZW5kcyh7XG4gICAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIGNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5Q2hhbm5lbH0gLyAwLjI2KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwgMC4yNiksXG4gICAgICBmb250U2l6ZTogMjIsXG4gICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgIG1hcmdpbjogJzAgNXB4IDAgLTZweCcsXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgY29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnlDaGFubmVsfSAvIDAuNClgIDogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIDAuNClcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgbWFyZ2luUmlnaHQ6IDQsXG4gICAgICBtYXJnaW5MZWZ0OiAtNFxuICAgIH0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gICAgICBjb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dENoYW5uZWx9IC8gMC43KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCwgMC43KSxcbiAgICAgICcmOmhvdmVyLCAmOmFjdGl2ZSc6IHtcbiAgICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dFxuICAgICAgfVxuICAgIH0pXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgaGVpZ2h0OiAyNFxuICB9LCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0XG4gIH0sIG93bmVyU3RhdGUub25EZWxldGUgJiYge1xuICAgIFtgJi4ke2NoaXBDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZCwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5KVxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5vbkRlbGV0ZSAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYge1xuICAgIFtgJi4ke2NoaXBDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5kYXJrXG4gICAgfVxuICB9KTtcbn0sICh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5jbGlja2FibGUgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkQ2hhbm5lbH0gLyBjYWxjKCR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9ICsgJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pKWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZCwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5ICsgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KVxuICB9LFxuICBbYCYuJHtjaGlwQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRDaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gIH0sXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzFdXG4gIH1cbn0sIG93bmVyU3RhdGUuY2xpY2thYmxlICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJjpob3ZlciwgJi4ke2NoaXBDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uZGFya1xuICB9XG59KSwgKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgJHt0aGVtZS52YXJzLnBhbGV0dGUuQ2hpcC5kZWZhdWx0Qm9yZGVyfWAgOiBgMXB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5WzQwMF0gOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXX1gLFxuICBbYCYuJHtjaGlwQ2xhc3Nlcy5jbGlja2FibGV9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5ob3ZlclxuICB9LFxuICBbYCYuJHtjaGlwQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYgLiR7Y2hpcENsYXNzZXMuYXZhdGFyfWBdOiB7XG4gICAgbWFyZ2luTGVmdDogNFxuICB9LFxuICBbYCYgLiR7Y2hpcENsYXNzZXMuYXZhdGFyU21hbGx9YF06IHtcbiAgICBtYXJnaW5MZWZ0OiAyXG4gIH0sXG4gIFtgJiAuJHtjaGlwQ2xhc3Nlcy5pY29ufWBdOiB7XG4gICAgbWFyZ2luTGVmdDogNFxuICB9LFxuICBbYCYgLiR7Y2hpcENsYXNzZXMuaWNvblNtYWxsfWBdOiB7XG4gICAgbWFyZ2luTGVmdDogMlxuICB9LFxuICBbYCYgLiR7Y2hpcENsYXNzZXMuZGVsZXRlSWNvbn1gXToge1xuICAgIG1hcmdpblJpZ2h0OiA1XG4gIH0sXG4gIFtgJiAuJHtjaGlwQ2xhc3Nlcy5kZWxldGVJY29uU21hbGx9YF06IHtcbiAgICBtYXJnaW5SaWdodDogM1xuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gIGJvcmRlcjogYDFweCBzb2xpZCAke3RoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjcpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgMC43KX1gLFxuICBbYCYuJHtjaGlwQ2xhc3Nlcy5jbGlja2FibGV9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpXG4gIH0sXG4gIFtgJi4ke2NoaXBDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmZvY3VzT3BhY2l0eSlcbiAgfSxcbiAgW2AmIC4ke2NoaXBDbGFzc2VzLmRlbGV0ZUljb259YF06IHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvIDAuNylgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCAwLjcpLFxuICAgICcmOmhvdmVyLCAmOmFjdGl2ZSc6IHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gICAgfVxuICB9XG59KSk7XG5jb25zdCBDaGlwTGFiZWwgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlDaGlwJyxcbiAgc2xvdDogJ0xhYmVsJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBzaXplXG4gICAgfSA9IG93bmVyU3RhdGU7XG4gICAgcmV0dXJuIFtzdHlsZXMubGFiZWwsIHN0eWxlc1tgbGFiZWwke2NhcGl0YWxpemUoc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBwYWRkaW5nTGVmdDogMTIsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICBwYWRkaW5nTGVmdDogMTEsXG4gIHBhZGRpbmdSaWdodDogMTFcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiA4LFxuICBwYWRkaW5nUmlnaHQ6IDhcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICBwYWRkaW5nTGVmdDogNyxcbiAgcGFkZGluZ1JpZ2h0OiA3XG59KSk7XG5mdW5jdGlvbiBpc0RlbGV0ZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCkge1xuICByZXR1cm4ga2V5Ym9hcmRFdmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8IGtleWJvYXJkRXZlbnQua2V5ID09PSAnRGVsZXRlJztcbn1cblxuLyoqXG4gKiBDaGlwcyByZXByZXNlbnQgY29tcGxleCBlbnRpdGllcyBpbiBzbWFsbCBibG9ja3MsIHN1Y2ggYXMgYSBjb250YWN0LlxuICovXG5jb25zdCBDaGlwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2hpcChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaGlwJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXZhdGFyOiBhdmF0YXJQcm9wLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xpY2thYmxlOiBjbGlja2FibGVQcm9wLFxuICAgICAgY29sb3IgPSAnZGVmYXVsdCcsXG4gICAgICBjb21wb25lbnQ6IENvbXBvbmVudFByb3AsXG4gICAgICBkZWxldGVJY29uOiBkZWxldGVJY29uUHJvcCxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBpY29uOiBpY29uUHJvcCxcbiAgICAgIGxhYmVsLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRGVsZXRlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnZmlsbGVkJyxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgc2tpcEZvY3VzV2hlbkRpc2FibGVkID0gZmFsc2UgLy8gVE9ETyB2NjogUmVuYW1lIHRvIGBmb2N1c2FibGVXaGVuRGlzYWJsZWRgLlxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjaGlwUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGNoaXBSZWYsIHJlZik7XG4gIGNvbnN0IGhhbmRsZURlbGV0ZUljb25DbGljayA9IGV2ZW50ID0+IHtcbiAgICAvLyBTdG9wIHRoZSBldmVudCBmcm9tIGJ1YmJsaW5nIHVwIHRvIHRoZSBgQ2hpcGBcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAob25EZWxldGUpIHtcbiAgICAgIG9uRGVsZXRlKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIGV2ZW50cyBmcm9tIGNoaWxkcmVuIG9mIGBDaGlwYC5cbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0ICYmIGlzRGVsZXRlS2V5Ym9hcmRFdmVudChldmVudCkpIHtcbiAgICAgIC8vIFdpbGwgYmUgaGFuZGxlZCBpbiBrZXlVcCwgb3RoZXJ3aXNlIHNvbWUgYnJvd3NlcnNcbiAgICAgIC8vIG1pZ2h0IGluaXQgbmF2aWdhdGlvblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVudHMgZnJvbSBjaGlsZHJlbiBvZiBgQ2hpcGAuXG4gICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQgPT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgaWYgKG9uRGVsZXRlICYmIGlzRGVsZXRlS2V5Ym9hcmRFdmVudChldmVudCkpIHtcbiAgICAgICAgb25EZWxldGUoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnICYmIGNoaXBSZWYuY3VycmVudCkge1xuICAgICAgICBjaGlwUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25LZXlVcCkge1xuICAgICAgb25LZXlVcChldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBjbGlja2FibGUgPSBjbGlja2FibGVQcm9wICE9PSBmYWxzZSAmJiBvbkNsaWNrID8gdHJ1ZSA6IGNsaWNrYWJsZVByb3A7XG4gIGNvbnN0IGNvbXBvbmVudCA9IGNsaWNrYWJsZSB8fCBvbkRlbGV0ZSA/IEJ1dHRvbkJhc2UgOiBDb21wb25lbnRQcm9wIHx8ICdkaXYnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIHNpemUsXG4gICAgY29sb3IsXG4gICAgaWNvbkNvbG9yOiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoaWNvblByb3ApID8gaWNvblByb3AucHJvcHMuY29sb3IgfHwgY29sb3IgOiBjb2xvcixcbiAgICBvbkRlbGV0ZTogISFvbkRlbGV0ZSxcbiAgICBjbGlja2FibGUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBtb3JlUHJvcHMgPSBjb21wb25lbnQgPT09IEJ1dHRvbkJhc2UgPyBfZXh0ZW5kcyh7XG4gICAgY29tcG9uZW50OiBDb21wb25lbnRQcm9wIHx8ICdkaXYnLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogY2xhc3Nlcy5mb2N1c1Zpc2libGVcbiAgfSwgb25EZWxldGUgJiYge1xuICAgIGRpc2FibGVSaXBwbGU6IHRydWVcbiAgfSkgOiB7fTtcbiAgbGV0IGRlbGV0ZUljb24gPSBudWxsO1xuICBpZiAob25EZWxldGUpIHtcbiAgICBkZWxldGVJY29uID0gZGVsZXRlSWNvblByb3AgJiYgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGRlbGV0ZUljb25Qcm9wKSA/ICggLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChkZWxldGVJY29uUHJvcCwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGRlbGV0ZUljb25Qcm9wLnByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5kZWxldGVJY29uKSxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZURlbGV0ZUljb25DbGlja1xuICAgIH0pKSA6IC8qI19fUFVSRV9fKi9fanN4KENhbmNlbEljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmRlbGV0ZUljb24pLFxuICAgICAgb25DbGljazogaGFuZGxlRGVsZXRlSWNvbkNsaWNrXG4gICAgfSk7XG4gIH1cbiAgbGV0IGF2YXRhciA9IG51bGw7XG4gIGlmIChhdmF0YXJQcm9wICYmIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChhdmF0YXJQcm9wKSkge1xuICAgIGF2YXRhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoYXZhdGFyUHJvcCwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuYXZhdGFyLCBhdmF0YXJQcm9wLnByb3BzLmNsYXNzTmFtZSlcbiAgICB9KTtcbiAgfVxuICBsZXQgaWNvbiA9IG51bGw7XG4gIGlmIChpY29uUHJvcCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoaWNvblByb3ApKSB7XG4gICAgaWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvblByb3AsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLmljb24sIGljb25Qcm9wLnByb3BzLmNsYXNzTmFtZSlcbiAgICB9KTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChhdmF0YXIgJiYgaWNvbikge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBUaGUgQ2hpcCBjb21wb25lbnQgY2FuIG5vdCBoYW5kbGUgdGhlIGF2YXRhciAnICsgJ2FuZCB0aGUgaWNvbiBwcm9wIGF0IHRoZSBzYW1lIHRpbWUuIFBpY2sgb25lLicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKENoaXBSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBjbGlja2FibGUgJiYgZGlzYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIHRhYkluZGV4OiBza2lwRm9jdXNXaGVuRGlzYWJsZWQgJiYgZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgbW9yZVByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbYXZhdGFyIHx8IGljb24sIC8qI19fUFVSRV9fKi9fanN4KENoaXBMYWJlbCwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGFiZWwpLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgIH0pLCBkZWxldGVJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENoaXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIEF2YXRhciBlbGVtZW50IHRvIGRpc3BsYXkuXG4gICAqL1xuICBhdmF0YXI6IFByb3BUeXBlcy5lbGVtZW50LFxuICAvKipcbiAgICogVGhpcyBwcm9wIGlzbid0IHN1cHBvcnRlZC5cbiAgICogVXNlIHRoZSBgY29tcG9uZW50YCBwcm9wIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgY2hpbGRyZW4gc3RydWN0dXJlLlxuICAgKi9cbiAgY2hpbGRyZW46IHVuc3VwcG9ydGVkUHJvcCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjaGlwIHdpbGwgYXBwZWFyIGNsaWNrYWJsZSwgYW5kIHdpbGwgcmFpc2Ugd2hlbiBwcmVzc2VkLFxuICAgKiBldmVuIGlmIHRoZSBvbkNsaWNrIHByb3AgaXMgbm90IGRlZmluZWQuXG4gICAqIElmIGBmYWxzZWAsIHRoZSBjaGlwIHdpbGwgbm90IGFwcGVhciBjbGlja2FibGUsIGV2ZW4gaWYgb25DbGljayBwcm9wIGlzIGRlZmluZWQuXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLFxuICAgKiBhbG9uZyB3aXRoIHRoZSBjb21wb25lbnQgcHJvcCB0byBpbmRpY2F0ZSBhbiBhbmNob3IgQ2hpcCBpcyBjbGlja2FibGUuXG4gICAqIE5vdGU6IHRoaXMgY29udHJvbHMgdGhlIFVJIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIG9uQ2xpY2sgZXZlbnQuXG4gICAqL1xuICBjbGlja2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRlbGV0ZSBpY29uIGVsZW1lbnQuIFNob3duIG9ubHkgaWYgYG9uRGVsZXRlYCBpcyBzZXQuXG4gICAqL1xuICBkZWxldGVJY29uOiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEljb24gZWxlbWVudC5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5lbGVtZW50LFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgZGVsZXRlIGljb24gaXMgY2xpY2tlZC5cbiAgICogSWYgc2V0LCB0aGUgZGVsZXRlIGljb24gd2lsbCBiZSBzaG93bi5cbiAgICovXG4gIG9uRGVsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhbGxvd3MgdGhlIGRpc2FibGVkIGNoaXAgdG8gZXNjYXBlIGZvY3VzLlxuICAgKiBJZiBgZmFsc2VgLCBhbGxvd3MgdGhlIGRpc2FibGVkIGNoaXAgdG8gcmVjZWl2ZSBmb2N1cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBGb2N1c1doZW5EaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2ZpbGxlZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaGlwOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b24nLCBbJ3Jvb3QnLCAndGV4dCcsICd0ZXh0SW5oZXJpdCcsICd0ZXh0UHJpbWFyeScsICd0ZXh0U2Vjb25kYXJ5JywgJ3RleHRTdWNjZXNzJywgJ3RleHRFcnJvcicsICd0ZXh0SW5mbycsICd0ZXh0V2FybmluZycsICdvdXRsaW5lZCcsICdvdXRsaW5lZEluaGVyaXQnLCAnb3V0bGluZWRQcmltYXJ5JywgJ291dGxpbmVkU2Vjb25kYXJ5JywgJ291dGxpbmVkU3VjY2VzcycsICdvdXRsaW5lZEVycm9yJywgJ291dGxpbmVkSW5mbycsICdvdXRsaW5lZFdhcm5pbmcnLCAnY29udGFpbmVkJywgJ2NvbnRhaW5lZEluaGVyaXQnLCAnY29udGFpbmVkUHJpbWFyeScsICdjb250YWluZWRTZWNvbmRhcnknLCAnY29udGFpbmVkU3VjY2VzcycsICdjb250YWluZWRFcnJvcicsICdjb250YWluZWRJbmZvJywgJ2NvbnRhaW5lZFdhcm5pbmcnLCAnZGlzYWJsZUVsZXZhdGlvbicsICdmb2N1c1Zpc2libGUnLCAnZGlzYWJsZWQnLCAnY29sb3JJbmhlcml0JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvclN1Y2Nlc3MnLCAnY29sb3JFcnJvcicsICdjb2xvckluZm8nLCAnY29sb3JXYXJuaW5nJywgJ3RleHRTaXplU21hbGwnLCAndGV4dFNpemVNZWRpdW0nLCAndGV4dFNpemVMYXJnZScsICdvdXRsaW5lZFNpemVTbWFsbCcsICdvdXRsaW5lZFNpemVNZWRpdW0nLCAnb3V0bGluZWRTaXplTGFyZ2UnLCAnY29udGFpbmVkU2l6ZVNtYWxsJywgJ2NvbnRhaW5lZFNpemVNZWRpdW0nLCAnY29udGFpbmVkU2l6ZUxhcmdlJywgJ3NpemVNZWRpdW0nLCAnc2l6ZVNtYWxsJywgJ3NpemVMYXJnZScsICdmdWxsV2lkdGgnLCAnc3RhcnRJY29uJywgJ2VuZEljb24nLCAnaWNvbicsICdpY29uU2l6ZVNtYWxsJywgJ2ljb25TaXplTWVkaXVtJywgJ2ljb25TaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25DbGFzc2VzOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgQnV0dG9uR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cENvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0LmRpc3BsYXlOYW1lID0gJ0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUVsZXZhdGlvblwiLCBcImRpc2FibGVGb2N1c1JpcHBsZVwiLCBcImVuZEljb25cIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJmdWxsV2lkdGhcIiwgXCJzaXplXCIsIFwic3RhcnRJY29uXCIsIFwidHlwZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBidXR0b25DbGFzc2VzLCB7IGdldEJ1dHRvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQ2xhc3Nlcyc7XG5pbXBvcnQgQnV0dG9uR3JvdXBDb250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0IGZyb20gJy4uL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVFbGV2YXRpb24sXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgJHt2YXJpYW50fSR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgYCR7dmFyaWFudH1TaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZUVsZXZhdGlvbiAmJiAnZGlzYWJsZUVsZXZhdGlvbicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnXSxcbiAgICBzdGFydEljb246IFsnaWNvbicsICdzdGFydEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF0sXG4gICAgZW5kSWNvbjogWydpY29uJywgJ2VuZEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBjb21tb25JY29uU3R5bGVzID0gb3duZXJTdGF0ZSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAxOFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdtZWRpdW0nICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMFxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIyXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9JHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH1TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiBzdHlsZXMuY29sb3JJbmhlcml0LCBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYgc3R5bGVzLmRpc2FibGVFbGV2YXRpb24sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLCBfdGhlbWUkcGFsZXR0ZTtcbiAgY29uc3QgaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdIDogdGhlbWUucGFsZXR0ZS5ncmV5WzgwMF07XG4gIGNvbnN0IGluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHRoZW1lLnBhbGV0dGUuZ3JleS5BMTAwIDogdGhlbWUucGFsZXR0ZS5ncmV5WzcwMF07XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5idXR0b24sIHtcbiAgICBtaW5XaWR0aDogNjQsXG4gICAgcGFkZGluZzogJzZweCAxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMsXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnYmFja2dyb3VuZC1jb2xvcicsICdib3gtc2hhZG93JywgJ2JvcmRlci1jb2xvcicsICdjb2xvciddLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRcbiAgICB9KSxcbiAgICAnJjpob3Zlcic6IF9leHRlbmRzKHtcbiAgICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnlDaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnRleHQucHJpbWFyeSwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWlufWAsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuQnV0dG9uLmluaGVyaXRDb250YWluZWRIb3ZlckJnIDogaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yLFxuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s0XSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMl0sXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZ3JleVszMDBdXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5kYXJrLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gICAgICB9XG4gICAgfSksXG4gICAgJyY6YWN0aXZlJzogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s4XVxuICAgIH0pLFxuICAgIFtgJi4ke2J1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzZdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXTogX2V4dGVuZHMoe1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kfWBcbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWQsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzBdLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRCYWNrZ3JvdW5kXG4gICAgfSlcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc2cHggOHB4J1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzVweCAxNXB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgICBib3JkZXI6IHRoZW1lLnZhcnMgPyBgMXB4IHNvbGlkIHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gMC41KWAgOiBgMXB4IHNvbGlkICR7YWxwaGEodGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCAwLjUpfWBcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgY29sb3I6IHRoZW1lLnZhcnMgP1xuICAgIC8vIHRoaXMgaXMgc2FmZSBiZWNhdXNlIGdyZXkgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gZGVmYXVsdCBsaWdodC9kYXJrIG1vZGVcbiAgICB0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5IDogKF90aGVtZSRwYWxldHRlJGdldENvbiA9IChfdGhlbWUkcGFsZXR0ZSA9IHRoZW1lLnBhbGV0dGUpLmdldENvbnRyYXN0VGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRwYWxldHRlJGdldENvbi5jYWxsKF90aGVtZSRwYWxldHRlLCB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSksXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkJ1dHRvbi5pbmhlcml0Q29udGFpbmVkQmcgOiBpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yLFxuICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMl1cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5jb250cmFzdFRleHQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgPT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICdpbmhlcml0JyxcbiAgICBib3JkZXJDb2xvcjogJ2N1cnJlbnRDb2xvcidcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnNHB4IDVweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnOHB4IDExcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICczcHggOXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnN3B4IDIxcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNHB4IDEwcHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnOHB4IDIycHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTUpXG4gIH0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgICB3aWR0aDogJzEwMCUnXG4gIH0pO1xufSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS5kaXNhYmxlRWxldmF0aW9uICYmIHtcbiAgYm94U2hhZG93OiAnbm9uZScsXG4gICcmOmhvdmVyJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgJyY6YWN0aXZlJzoge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9XG59KTtcbmNvbnN0IEJ1dHRvblN0YXJ0SWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdTdGFydEljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnN0YXJ0SWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiA4LFxuICBtYXJnaW5MZWZ0OiAtNFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luTGVmdDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbkVuZEljb24gPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnRW5kSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuZW5kSWNvbiwgc3R5bGVzW2BpY29uU2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5oZXJpdCcsXG4gIG1hcmdpblJpZ2h0OiAtNCxcbiAgbWFyZ2luTGVmdDogOFxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IC0yXG59LCBjb21tb25JY29uU3R5bGVzKG93bmVyU3RhdGUpKSk7XG5jb25zdCBCdXR0b24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b24oaW5Qcm9wcywgcmVmKSB7XG4gIC8vIHByb3BzIHByaW9yaXR5OiBgaW5Qcm9wc2AgPiBgY29udGV4dFByb3BzYCA+IGB0aGVtZURlZmF1bHRQcm9wc2BcbiAgY29uc3QgY29udGV4dFByb3BzID0gUmVhY3QudXNlQ29udGV4dChCdXR0b25Hcm91cENvbnRleHQpO1xuICBjb25zdCBidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSA9IFJlYWN0LnVzZUNvbnRleHQoQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0KTtcbiAgY29uc3QgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVQcm9wcyhjb250ZXh0UHJvcHMsIGluUHJvcHMpO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IHJlc29sdmVkUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRWxldmF0aW9uID0gZmFsc2UsXG4gICAgICBkaXNhYmxlRm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGVuZEljb246IGVuZEljb25Qcm9wLFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICBzdGFydEljb246IHN0YXJ0SWNvblByb3AsXG4gICAgICB0eXBlLFxuICAgICAgdmFyaWFudCA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVFbGV2YXRpb24sXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHR5cGUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBzdGFydEljb24gPSBzdGFydEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvblN0YXJ0SWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdGFydEljb24sXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogc3RhcnRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgZW5kSWNvbiA9IGVuZEljb25Qcm9wICYmIC8qI19fUFVSRV9fKi9fanN4KEJ1dHRvbkVuZEljb24sIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMuZW5kSWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBlbmRJY29uUHJvcFxuICB9KTtcbiAgY29uc3QgcG9zaXRpb25DbGFzc05hbWUgPSBidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSB8fCAnJztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25Sb290LCBfZXh0ZW5kcyh7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY29udGV4dFByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUsIHBvc2l0aW9uQ2xhc3NOYW1lKSxcbiAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIGNoaWxkcmVuOiBbc3RhcnRJY29uLCBjaGlsZHJlbiwgZW5kSWNvbl1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICdlcnJvcicsICdpbmZvJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBubyBlbGV2YXRpb24gaXMgdXNlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbGV2YXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYWZ0ZXIgdGhlIGNoaWxkcmVuLlxuICAgKi9cbiAgZW5kSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBidXR0b24gd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIFVSTCB0byBsaW5rIHRvIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBJZiBkZWZpbmVkLCBhbiBgYWAgZWxlbWVudCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3Qgbm9kZS5cbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBgc21hbGxgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGRlbnNlIGJ1dHRvbiBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEVsZW1lbnQgcGxhY2VkIGJlZm9yZSB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBzdGFydEljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29udGFpbmVkJywgJ291dGxpbmVkJywgJ3RleHQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QWRvcm5tZW50VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dEFkb3JubWVudCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRBZG9ybm1lbnRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRBZG9ybm1lbnQnLCBbJ3Jvb3QnLCAnZmlsbGVkJywgJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ3Bvc2l0aW9uU3RhcnQnLCAncG9zaXRpb25FbmQnLCAnZGlzYWJsZVBvaW50ZXJFdmVudHMnLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZVNtYWxsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRBZG9ybm1lbnRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZVBvaW50ZXJFdmVudHNcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcInBvc2l0aW9uXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4uL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBpbnB1dEFkb3JubWVudENsYXNzZXMsIHsgZ2V0SW5wdXRBZG9ybm1lbnRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0QWRvcm5tZW50Q2xhc3Nlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgcG9zaXRpb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wb3NpdGlvbil9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVBvaW50ZXJFdmVudHMgPT09IHRydWUgJiYgc3R5bGVzLmRpc2FibGVQb2ludGVyRXZlbnRzLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVBvaW50ZXJFdmVudHMsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgcG9zaXRpb24sXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50XG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlUG9pbnRlckV2ZW50cyAmJiAnZGlzYWJsZVBvaW50ZXJFdmVudHMnLCBwb3NpdGlvbiAmJiBgcG9zaXRpb24ke2NhcGl0YWxpemUocG9zaXRpb24pfWAsIHZhcmlhbnQsIGhpZGRlbkxhYmVsICYmICdoaWRkZW5MYWJlbCcsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dEFkb3JubWVudFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRBZG9ybm1lbnRSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEFkb3JubWVudCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgaGVpZ2h0OiAnMC4wMWVtJyxcbiAgLy8gRml4IElFMTEgZmxleGJveCBhbGlnbm1lbnQuIFRvIHJlbW92ZSBhdCBzb21lIHBvaW50LlxuICBtYXhIZWlnaHQ6ICcyZW0nLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uYWN0aXZlXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgLy8gU3R5bGVzIGFwcGxpZWQgdG8gdGhlIHJvb3QgZWxlbWVudCBpZiBgdmFyaWFudD1cImZpbGxlZFwiYC5cbiAgW2AmLiR7aW5wdXRBZG9ybm1lbnRDbGFzc2VzLnBvc2l0aW9uU3RhcnR9Jjpub3QoLiR7aW5wdXRBZG9ybm1lbnRDbGFzc2VzLmhpZGRlbkxhYmVsfSlgXToge1xuICAgIG1hcmdpblRvcDogMTZcbiAgfVxufSwgb3duZXJTdGF0ZS5wb3NpdGlvbiA9PT0gJ3N0YXJ0JyAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYHBvc2l0aW9uPVwic3RhcnRcImAuXG4gIG1hcmdpblJpZ2h0OiA4XG59LCBvd25lclN0YXRlLnBvc2l0aW9uID09PSAnZW5kJyAmJiB7XG4gIC8vIFN0eWxlcyBhcHBsaWVkIHRvIHRoZSByb290IGVsZW1lbnQgaWYgYHBvc2l0aW9uPVwiZW5kXCJgLlxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLmRpc2FibGVQb2ludGVyRXZlbnRzID09PSB0cnVlICYmIHtcbiAgLy8gU3R5bGVzIGFwcGxpZWQgdG8gdGhlIHJvb3QgZWxlbWVudCBpZiBgZGlzYWJsZVBvaW50ZXJFdmVudHM9e3RydWV9YC5cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59KSk7XG5jb25zdCBJbnB1dEFkb3JubWVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QWRvcm5tZW50KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QWRvcm5tZW50J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVQb2ludGVyRXZlbnRzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlVHlwb2dyYXBoeSA9IGZhbHNlLFxuICAgICAgcG9zaXRpb24sXG4gICAgICB2YXJpYW50OiB2YXJpYW50UHJvcFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCkgfHwge307XG4gIGxldCB2YXJpYW50ID0gdmFyaWFudFByb3A7XG4gIGlmICh2YXJpYW50UHJvcCAmJiBtdWlGb3JtQ29udHJvbC52YXJpYW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh2YXJpYW50UHJvcCA9PT0gbXVpRm9ybUNvbnRyb2wudmFyaWFudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IFRoZSBgSW5wdXRBZG9ybm1lbnRgIHZhcmlhbnQgaW5mZXJzIHRoZSB2YXJpYW50IHByb3AgJyArICd5b3UgZG8gbm90IGhhdmUgdG8gcHJvdmlkZSBvbmUuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChtdWlGb3JtQ29udHJvbCAmJiAhdmFyaWFudCkge1xuICAgIHZhcmlhbnQgPSBtdWlGb3JtQ29udHJvbC52YXJpYW50O1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBoaWRkZW5MYWJlbDogbXVpRm9ybUNvbnRyb2wuaGlkZGVuTGFiZWwsXG4gICAgc2l6ZTogbXVpRm9ybUNvbnRyb2wuc2l6ZSxcbiAgICBkaXNhYmxlUG9pbnRlckV2ZW50cyxcbiAgICBwb3NpdGlvbixcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goSW5wdXRBZG9ybm1lbnRSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogdHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJyAmJiAhZGlzYWJsZVR5cG9ncmFwaHkgPyAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5LCB7XG4gICAgICAgIGNvbG9yOiBcInRleHQuc2Vjb25kYXJ5XCIsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkgOiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtwb3NpdGlvbiA9PT0gJ3N0YXJ0JyA/ICggLyogbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWUgKi9fc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgICB9KSkpIDogbnVsbCwgY2hpbGRyZW5dXG4gICAgICB9KVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXRBZG9ybm1lbnQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCwgbm9ybWFsbHkgYW4gYEljb25CdXR0b25gIG9yIHN0cmluZy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERpc2FibGUgcG9pbnRlciBldmVudHMgb24gdGhlIHJvb3QuXG4gICAqIFRoaXMgYWxsb3dzIGZvciB0aGUgY29udGVudCBvZiB0aGUgYWRvcm5tZW50IHRvIGZvY3VzIHRoZSBgaW5wdXRgIG9uIGNsaWNrLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvaW50ZXJFdmVudHM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgY2hpbGRyZW4gaXMgYSBzdHJpbmcgdGhlbiBkaXNhYmxlIHdyYXBwaW5nIGluIGEgVHlwb2dyYXBoeSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVHlwb2dyYXBoeTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb24gdGhpcyBhZG9ybm1lbnQgc2hvdWxkIGFwcGVhciByZWxhdGl2ZSB0byB0aGUgYElucHV0YC5cbiAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoWydlbmQnLCAnc3RhcnQnXSkuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogTm90ZTogSWYgeW91IGFyZSB1c2luZyB0aGUgYFRleHRGaWVsZGAgY29tcG9uZW50IG9yIHRoZSBgRm9ybUNvbnRyb2xgIGNvbXBvbmVudFxuICAgKiB5b3UgZG8gbm90IGhhdmUgdG8gc2V0IHRoaXMgbWFudWFsbHkuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEFkb3JubWVudDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BwZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBvcHBlcicsIHNsb3QpO1xufVxuY29uc3QgcG9wcGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBvcHBlcicsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IHBvcHBlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYW5jaG9yRWxcIiwgXCJjaGlsZHJlblwiLCBcImRpcmVjdGlvblwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJtb2RpZmllcnNcIiwgXCJvcGVuXCIsIFwicGxhY2VtZW50XCIsIFwicG9wcGVyT3B0aW9uc1wiLCBcInBvcHBlclJlZlwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFuY2hvckVsXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJkaXJlY3Rpb25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJtb2RpZmllcnNcIiwgXCJvcGVuXCIsIFwicGxhY2VtZW50XCIsIFwicG9wcGVyT3B0aW9uc1wiLCBcInBvcHBlclJlZlwiLCBcInN0eWxlXCIsIFwidHJhbnNpdGlvblwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIEhUTUxFbGVtZW50VHlwZSwgcmVmVHlwZSwgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50LCB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCwgdW5zdGFibGVfdXNlRm9ya1JlZiBhcyB1c2VGb3JrUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVNsb3RQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3VzZVNsb3RQcm9wcyc7XG5pbXBvcnQgUG9ydGFsIGZyb20gJy4uL1BvcnRhbCc7XG5pbXBvcnQgeyBnZXRQb3BwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcHBlckNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGZsaXBQbGFjZW1lbnQocGxhY2VtZW50LCBkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ2x0cicpIHtcbiAgICByZXR1cm4gcGxhY2VtZW50O1xuICB9XG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYm90dG9tLWVuZCc6XG4gICAgICByZXR1cm4gJ2JvdHRvbS1zdGFydCc7XG4gICAgY2FzZSAnYm90dG9tLXN0YXJ0JzpcbiAgICAgIHJldHVybiAnYm90dG9tLWVuZCc7XG4gICAgY2FzZSAndG9wLWVuZCc6XG4gICAgICByZXR1cm4gJ3RvcC1zdGFydCc7XG4gICAgY2FzZSAndG9wLXN0YXJ0JzpcbiAgICAgIHJldHVybiAndG9wLWVuZCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVBbmNob3JFbChhbmNob3JFbCkge1xuICByZXR1cm4gdHlwZW9mIGFuY2hvckVsID09PSAnZnVuY3Rpb24nID8gYW5jaG9yRWwoKSA6IGFuY2hvckVsO1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1ZpcnR1YWxFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuICFpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wcGVyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBkZWZhdWx0UG9wcGVyT3B0aW9ucyA9IHt9O1xuY29uc3QgUG9wcGVyVG9vbHRpcCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBvcHBlclRvb2x0aXAocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICB2YXIgX3Nsb3RzJHJvb3Q7XG4gIGNvbnN0IHtcbiAgICAgIGFuY2hvckVsLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBkaXNhYmxlUG9ydGFsLFxuICAgICAgbW9kaWZpZXJzLFxuICAgICAgb3BlbixcbiAgICAgIHBsYWNlbWVudDogaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgIHBvcHBlck9wdGlvbnMsXG4gICAgICBwb3BwZXJSZWY6IHBvcHBlclJlZlByb3AsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBUcmFuc2l0aW9uUHJvcHNcbiAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWNcbiAgICAgIC8vIHByZXZlbnQgZnJvbSBzcHJlYWRpbmcgdG8gRE9NLCBpdCBjYW4gY29tZSBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50IGUuZy4gU2VsZWN0LlxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0b29sdGlwUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBvd25SZWYgPSB1c2VGb3JrUmVmKHRvb2x0aXBSZWYsIGZvcndhcmRlZFJlZik7XG4gIGNvbnN0IHBvcHBlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUG9wcGVyUmVmID0gdXNlRm9ya1JlZihwb3BwZXJSZWYsIHBvcHBlclJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVQb3BwZXJSZWZSZWYgPSBSZWFjdC51c2VSZWYoaGFuZGxlUG9wcGVyUmVmKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50ID0gaGFuZGxlUG9wcGVyUmVmO1xuICB9LCBbaGFuZGxlUG9wcGVyUmVmXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocG9wcGVyUmVmUHJvcCwgKCkgPT4gcG9wcGVyUmVmLmN1cnJlbnQsIFtdKTtcbiAgY29uc3QgcnRsUGxhY2VtZW50ID0gZmxpcFBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50LCBkaXJlY3Rpb24pO1xuICAvKipcbiAgICogcGxhY2VtZW50IGluaXRpYWxpemVkIGZyb20gcHJvcCBidXQgY2FuIGNoYW5nZSBkdXJpbmcgbGlmZXRpbWUgaWYgbW9kaWZpZXJzLmZsaXAuXG4gICAqIG1vZGlmaWVycy5mbGlwIGlzIGVzc2VudGlhbGx5IGEgZmxpcCBmb3IgY29udHJvbGxlZC91bmNvbnRyb2xsZWQgYmVoYXZpb3JcbiAgICovXG4gIGNvbnN0IFtwbGFjZW1lbnQsIHNldFBsYWNlbWVudF0gPSBSZWFjdC51c2VTdGF0ZShydGxQbGFjZW1lbnQpO1xuICBjb25zdCBbcmVzb2x2ZWRBbmNob3JFbGVtZW50LCBzZXRSZXNvbHZlZEFuY2hvckVsZW1lbnRdID0gUmVhY3QudXNlU3RhdGUocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHBvcHBlclJlZi5jdXJyZW50KSB7XG4gICAgICBwb3BwZXJSZWYuY3VycmVudC5mb3JjZVVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFuY2hvckVsKSB7XG4gICAgICBzZXRSZXNvbHZlZEFuY2hvckVsZW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG4gICAgfVxuICB9LCBbYW5jaG9yRWxdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcmVzb2x2ZWRBbmNob3JFbGVtZW50IHx8ICFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVQb3BwZXJVcGRhdGUgPSBkYXRhID0+IHtcbiAgICAgIHNldFBsYWNlbWVudChkYXRhLnBsYWNlbWVudCk7XG4gICAgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWxlbWVudCAmJiBpc0hUTUxFbGVtZW50KHJlc29sdmVkQW5jaG9yRWxlbWVudCkgJiYgcmVzb2x2ZWRBbmNob3JFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiYgYm94LnRvcCA9PT0gMCAmJiBib3gubGVmdCA9PT0gMCAmJiBib3gucmlnaHQgPT09IDAgJiYgYm94LmJvdHRvbSA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHBvcHBlck1vZGlmaWVycyA9IFt7XG4gICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgYWx0Qm91bmRhcnk6IGRpc2FibGVQb3J0YWxcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGFsdEJvdW5kYXJ5OiBkaXNhYmxlUG9ydGFsXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgbmFtZTogJ29uVXBkYXRlJyxcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgZm46ICh7XG4gICAgICAgIHN0YXRlXG4gICAgICB9KSA9PiB7XG4gICAgICAgIGhhbmRsZVBvcHBlclVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfV07XG4gICAgaWYgKG1vZGlmaWVycyAhPSBudWxsKSB7XG4gICAgICBwb3BwZXJNb2RpZmllcnMgPSBwb3BwZXJNb2RpZmllcnMuY29uY2F0KG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGlmIChwb3BwZXJPcHRpb25zICYmIHBvcHBlck9wdGlvbnMubW9kaWZpZXJzICE9IG51bGwpIHtcbiAgICAgIHBvcHBlck1vZGlmaWVycyA9IHBvcHBlck1vZGlmaWVycy5jb25jYXQocG9wcGVyT3B0aW9ucy5tb2RpZmllcnMpO1xuICAgIH1cbiAgICBjb25zdCBwb3BwZXIgPSBjcmVhdGVQb3BwZXIocmVzb2x2ZWRBbmNob3JFbGVtZW50LCB0b29sdGlwUmVmLmN1cnJlbnQsIF9leHRlbmRzKHtcbiAgICAgIHBsYWNlbWVudDogcnRsUGxhY2VtZW50XG4gICAgfSwgcG9wcGVyT3B0aW9ucywge1xuICAgICAgbW9kaWZpZXJzOiBwb3BwZXJNb2RpZmllcnNcbiAgICB9KSk7XG4gICAgaGFuZGxlUG9wcGVyUmVmUmVmLmN1cnJlbnQocG9wcGVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIGhhbmRsZVBvcHBlclJlZlJlZi5jdXJyZW50KG51bGwpO1xuICAgIH07XG4gIH0sIFtyZXNvbHZlZEFuY2hvckVsZW1lbnQsIGRpc2FibGVQb3J0YWwsIG1vZGlmaWVycywgb3BlbiwgcG9wcGVyT3B0aW9ucywgcnRsUGxhY2VtZW50XSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfTtcbiAgaWYgKFRyYW5zaXRpb25Qcm9wcyAhPT0gbnVsbCkge1xuICAgIGNoaWxkUHJvcHMuVHJhbnNpdGlvblByb3BzID0gVHJhbnNpdGlvblByb3BzO1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IFJvb3QgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiAnZGl2JztcbiAgY29uc3Qgcm9vdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUm9vdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogc2xvdFByb3BzLnJvb3QsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICByb2xlOiAndG9vbHRpcCcsXG4gICAgICByZWY6IG93blJlZlxuICAgIH0sXG4gICAgb3duZXJTdGF0ZTogcHJvcHMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3RcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSb290LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgY2hpbGRyZW46IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKGNoaWxkUHJvcHMpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUG9wcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wcGVyKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYW5jaG9yRWwsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyUHJvcCxcbiAgICAgIGRpcmVjdGlvbiA9ICdsdHInLFxuICAgICAgZGlzYWJsZVBvcnRhbCA9IGZhbHNlLFxuICAgICAga2VlcE1vdW50ZWQgPSBmYWxzZSxcbiAgICAgIG1vZGlmaWVycyxcbiAgICAgIG9wZW4sXG4gICAgICBwbGFjZW1lbnQgPSAnYm90dG9tJyxcbiAgICAgIHBvcHBlck9wdGlvbnMgPSBkZWZhdWx0UG9wcGVyT3B0aW9ucyxcbiAgICAgIHBvcHBlclJlZixcbiAgICAgIHN0eWxlLFxuICAgICAgdHJhbnNpdGlvbiA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBbZXhpdGVkLCBzZXRFeGl0ZWRdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IGhhbmRsZUVudGVyID0gKCkgPT4ge1xuICAgIHNldEV4aXRlZChmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9ICgpID0+IHtcbiAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gIH07XG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCF0cmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIHRoZSBjb250YWluZXIgcHJvcCBpcyBwcm92aWRlZCwgdXNlIHRoYXRcbiAgLy8gSWYgdGhlIGFuY2hvckVsIHByb3AgaXMgcHJvdmlkZWQsIHVzZSBpdHMgcGFyZW50IGJvZHkgZWxlbWVudCBhcyB0aGUgY29udGFpbmVyXG4gIC8vIElmIG5laXRoZXIgYXJlIHByb3ZpZGVkIGxldCB0aGUgTW9kYWwgdGFrZSBjYXJlIG9mIGNob29zaW5nIHRoZSBjb250YWluZXJcbiAgbGV0IGNvbnRhaW5lcjtcbiAgaWYgKGNvbnRhaW5lclByb3ApIHtcbiAgICBjb250YWluZXIgPSBjb250YWluZXJQcm9wO1xuICB9IGVsc2UgaWYgKGFuY2hvckVsKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChhbmNob3JFbCk7XG4gICAgY29udGFpbmVyID0gcmVzb2x2ZWRBbmNob3JFbCAmJiBpc0hUTUxFbGVtZW50KHJlc29sdmVkQW5jaG9yRWwpID8gb3duZXJEb2N1bWVudChyZXNvbHZlZEFuY2hvckVsKS5ib2R5IDogb3duZXJEb2N1bWVudChudWxsKS5ib2R5O1xuICB9XG4gIGNvbnN0IGRpc3BsYXkgPSAhb3BlbiAmJiBrZWVwTW91bnRlZCAmJiAoIXRyYW5zaXRpb24gfHwgZXhpdGVkKSA/ICdub25lJyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gdHJhbnNpdGlvbiA/IHtcbiAgICBpbjogb3BlbixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3J0YWwsIHtcbiAgICBkaXNhYmxlUG9ydGFsOiBkaXNhYmxlUG9ydGFsLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChQb3BwZXJUb29sdGlwLCBfZXh0ZW5kcyh7XG4gICAgICBhbmNob3JFbDogYW5jaG9yRWwsXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgICBtb2RpZmllcnM6IG1vZGlmaWVycyxcbiAgICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgICAgb3BlbjogdHJhbnNpdGlvbiA/ICFleGl0ZWQgOiBvcGVuLFxuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwb3BwZXJPcHRpb25zOiBwb3BwZXJPcHRpb25zLFxuICAgICAgcG9wcGVyUmVmOiBwb3BwZXJSZWYsXG4gICAgICBzbG90UHJvcHM6IHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzOiBzbG90c1xuICAgIH0sIG90aGVyLCB7XG4gICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAvLyBQcmV2ZW50cyBzY3JvbGwgaXNzdWUsIHdhaXRpbmcgZm9yIFBvcHBlci5qcyB0byBhZGQgdGhpcyBzdHlsZSBvbmNlIGluaXRpYXRlZC5cbiAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgIC8vIEZpeCBQb3BwZXIuanMgZGlzcGxheSBpc3N1ZVxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIGRpc3BsYXlcbiAgICAgIH0sIHN0eWxlKSxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczogdHJhbnNpdGlvblByb3BzLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3BwZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBbdmlydHVhbEVsZW1lbnRdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3ZpcnR1YWwtZWxlbWVudHMvKSxcbiAgICogb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyLlxuICAgKiBJdCdzIHVzZWQgdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgcGFzc2VkIGFzIHRoZSByZWZlcmVuY2Ugb2JqZWN0IG9mIHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkQW5jaG9yRWwgPSByZXNvbHZlQW5jaG9yRWwocHJvcHMuYW5jaG9yRWwpO1xuICAgICAgaWYgKHJlc29sdmVkQW5jaG9yRWwgJiYgaXNIVE1MRWxlbWVudChyZXNvbHZlZEFuY2hvckVsKSAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcmVzb2x2ZWRBbmNob3JFbCB8fCB0eXBlb2YgcmVzb2x2ZWRBbmNob3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbicgfHwgaXNWaXJ0dWFsRWxlbWVudChyZXNvbHZlZEFuY2hvckVsKSAmJiByZXNvbHZlZEFuY2hvckVsLmNvbnRleHRFbGVtZW50ICE9IG51bGwgJiYgcmVzb2x2ZWRBbmNob3JFbC5jb250ZXh0RWxlbWVudC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnSXQgc2hvdWxkIGJlIGFuIEhUTUwgZWxlbWVudCBpbnN0YW5jZSBvciBhIHZpcnR1YWxFbGVtZW50ICcsICcoaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdmlydHVhbC1lbGVtZW50cy8pLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogUG9wcGVyIHJlbmRlciBmdW5jdGlvbiBvciBub2RlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogRGlyZWN0aW9uIG9mIHRoZSB0ZXh0LlxuICAgKiBAZGVmYXVsdCAnbHRyJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoWydsdHInLCAncnRsJ10pLFxuICAvKipcbiAgICogVGhlIGBjaGlsZHJlbmAgd2lsbCBiZSB1bmRlciB0aGUgRE9NIGhpZXJhcmNoeSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVQb3J0YWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIFBvcHBlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGtlZXBNb3VudGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBvcHBlci5qcyBpcyBiYXNlZCBvbiBhIFwicGx1Z2luLWxpa2VcIiBhcmNoaXRlY3R1cmUsXG4gICAqIG1vc3Qgb2YgaXRzIGZlYXR1cmVzIGFyZSBmdWxseSBlbmNhcHN1bGF0ZWQgXCJtb2RpZmllcnNcIi5cbiAgICpcbiAgICogQSBtb2RpZmllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGVhY2ggdGltZSBQb3BwZXIuanMgbmVlZHMgdG9cbiAgICogY29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogRm9yIHRoaXMgcmVhc29uLCBtb2RpZmllcnMgc2hvdWxkIGJlIHZlcnkgcGVyZm9ybWFudCB0byBhdm9pZCBib3R0bGVuZWNrcy5cbiAgICogVG8gbGVhcm4gaG93IHRvIGNyZWF0ZSBhIG1vZGlmaWVyLCBbcmVhZCB0aGUgbW9kaWZpZXJzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL21vZGlmaWVycy8pLlxuICAgKi9cbiAgbW9kaWZpZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZWZmZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmbjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbmFtZTogUHJvcFR5cGVzLmFueSxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHBoYXNlOiBQcm9wVHlwZXMub25lT2YoWydhZnRlck1haW4nLCAnYWZ0ZXJSZWFkJywgJ2FmdGVyV3JpdGUnLCAnYmVmb3JlTWFpbicsICdiZWZvcmVSZWFkJywgJ2JlZm9yZVdyaXRlJywgJ21haW4nLCAncmVhZCcsICd3cml0ZSddKSxcbiAgICByZXF1aXJlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgcmVxdWlyZXNJZkV4aXN0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZylcbiAgfSkpLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFBvcHBlciBwbGFjZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdib3R0b20nXG4gICAqL1xuICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8tZW5kJywgJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBPcHRpb25zIHByb3ZpZGVkIHRvIHRoZSBbYFBvcHBlci5qc2BdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL2NvbnN0cnVjdG9ycy8jb3B0aW9ucykgaW5zdGFuY2UuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBwb3BwZXJPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uRmlyc3RVcGRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYXV0by1lbmQnLCAnYXV0by1zdGFydCcsICdhdXRvJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbScsICdsZWZ0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQnLCAncmlnaHQtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3RvcC1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCddKSxcbiAgICBzdHJhdGVneTogUHJvcFR5cGVzLm9uZU9mKFsnYWJzb2x1dGUnLCAnZml4ZWQnXSlcbiAgfSksXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgdXNlZCBwb3BwZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwb3BwZXJSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBQb3BwZXIuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBIZWxwIHN1cHBvcnRpbmcgYSByZWFjdC10cmFuc2l0aW9uLWdyb3VwL1RyYW5zaXRpb24gY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdHJhbnNpdGlvbjogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQb3BwZXI7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYW5jaG9yRWxcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiY29udGFpbmVyXCIsIFwiZGlzYWJsZVBvcnRhbFwiLCBcImtlZXBNb3VudGVkXCIsIFwibW9kaWZpZXJzXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcInBvcHBlck9wdGlvbnNcIiwgXCJwb3BwZXJSZWZcIiwgXCJ0cmFuc2l0aW9uXCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vdXNlVGhlbWVXaXRob3V0RGVmYXVsdCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IEhUTUxFbGVtZW50VHlwZSBmcm9tICdAbXVpL3V0aWxzL0hUTUxFbGVtZW50VHlwZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJhc2VQb3BwZXIgZnJvbSAnLi9CYXNlUG9wcGVyJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUG9wcGVyUm9vdCA9IHN0eWxlZChCYXNlUG9wcGVyLCB7XG4gIG5hbWU6ICdNdWlQb3BwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcblxuLyoqXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbQXV0b2NvbXBsZXRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtYXV0b2NvbXBsZXRlLylcbiAqIC0gW01lbnVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9yZWFjdC1tZW51LylcbiAqIC0gW1BvcHBlcl0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL3JlYWN0LXBvcHBlci8pXG4gKlxuICogQVBJOlxuICpcbiAqIC0gW1BvcHBlciBBUEldKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9hcGkvcG9wcGVyLylcbiAqL1xuY29uc3QgUG9wcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wcGVyKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RzJHJvb3Q7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQb3BwZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhbmNob3JFbCxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBjb21wb25lbnRzUHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkaXNhYmxlUG9ydGFsLFxuICAgICAga2VlcE1vdW50ZWQsXG4gICAgICBtb2RpZmllcnMsXG4gICAgICBvcGVuLFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcG9wcGVyT3B0aW9ucyxcbiAgICAgIHBvcHBlclJlZixcbiAgICAgIHRyYW5zaXRpb24sXG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBSb290Q29tcG9uZW50ID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbXBvbmVudHMuUm9vdDtcbiAgY29uc3Qgb3RoZXJQcm9wcyA9IF9leHRlbmRzKHtcbiAgICBhbmNob3JFbCxcbiAgICBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbCxcbiAgICBrZWVwTW91bnRlZCxcbiAgICBtb2RpZmllcnMsXG4gICAgb3BlbixcbiAgICBwbGFjZW1lbnQsXG4gICAgcG9wcGVyT3B0aW9ucyxcbiAgICBwb3BwZXJSZWYsXG4gICAgdHJhbnNpdGlvblxuICB9LCBvdGhlcik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQb3BwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBkaXJlY3Rpb246IHRoZW1lID09IG51bGwgPyB2b2lkIDAgOiB0aGVtZS5kaXJlY3Rpb24sXG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RDb21wb25lbnRcbiAgICB9LFxuICAgIHNsb3RQcm9wczogc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNcbiAgfSwgb3RoZXJQcm9wcywge1xuICAgIHJlZjogcmVmXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wcGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW3ZpcnR1YWxFbGVtZW50XShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi92aXJ0dWFsLWVsZW1lbnRzLyksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcHBlci5cbiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIHBhc3NlZCBhcyB0aGUgcmVmZXJlbmNlIG9iamVjdCBvZiB0aGUgUG9wcGVyIGluc3RhbmNlLlxuICAgKi9cbiAgYW5jaG9yRWw6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogUG9wcGVyIHJlbmRlciBmdW5jdGlvbiBvciBub2RlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFBvcHBlci5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFBvcHBlci5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50IG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmUuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIGhhdmUgdGhlIHBvcnRhbCBjaGlsZHJlbiBhcHBlbmRlZCB0byBpdC5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIGluIGEgUmVhY3QgbGF5b3V0IGVmZmVjdC5cbiAgICogVGhpcyBsZXRzIHlvdSBzZXQgdGhlIGNvbnRhaW5lciBmcm9tIGEgcmVmLCBhbmQgYWxzbyBtYWtlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcG9zc2libGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgdGhlIGJvZHkgb2YgdGhlIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEFsd2F5cyBrZWVwIHRoZSBjaGlsZHJlbiBpbiB0aGUgRE9NLlxuICAgKiBUaGlzIHByb3AgY2FuIGJlIHVzZWZ1bCBpbiBTRU8gc2l0dWF0aW9uIG9yXG4gICAqIHdoZW4geW91IHdhbnQgdG8gbWF4aW1pemUgdGhlIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBQb3BwZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQb3BwZXIuanMgaXMgYmFzZWQgb24gYSBcInBsdWdpbi1saWtlXCIgYXJjaGl0ZWN0dXJlLFxuICAgKiBtb3N0IG9mIGl0cyBmZWF0dXJlcyBhcmUgZnVsbHkgZW5jYXBzdWxhdGVkIFwibW9kaWZpZXJzXCIuXG4gICAqXG4gICAqIEEgbW9kaWZpZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBlYWNoIHRpbWUgUG9wcGVyLmpzIG5lZWRzIHRvXG4gICAqIGNvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIuXG4gICAqIEZvciB0aGlzIHJlYXNvbiwgbW9kaWZpZXJzIHNob3VsZCBiZSB2ZXJ5IHBlcmZvcm1hbnQgdG8gYXZvaWQgYm90dGxlbmVja3MuXG4gICAqIFRvIGxlYXJuIGhvdyB0byBjcmVhdGUgYSBtb2RpZmllciwgW3JlYWQgdGhlIG1vZGlmaWVycyBkb2N1bWVudGF0aW9uXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9tb2RpZmllcnMvKS5cbiAgICovXG4gIG1vZGlmaWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGVmZmVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZm46IFByb3BUeXBlcy5mdW5jLFxuICAgIG5hbWU6IFByb3BUeXBlcy5hbnksXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwaGFzZTogUHJvcFR5cGVzLm9uZU9mKFsnYWZ0ZXJNYWluJywgJ2FmdGVyUmVhZCcsICdhZnRlcldyaXRlJywgJ2JlZm9yZU1haW4nLCAnYmVmb3JlUmVhZCcsICdiZWZvcmVXcml0ZScsICdtYWluJywgJ3JlYWQnLCAnd3JpdGUnXSksXG4gICAgcmVxdWlyZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHJlcXVpcmVzSWZFeGlzdHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpXG4gIH0pKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQb3BwZXIgcGxhY2VtZW50LlxuICAgKiBAZGVmYXVsdCAnYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoWydhdXRvLWVuZCcsICdhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuICAvKipcbiAgICogT3B0aW9ucyBwcm92aWRlZCB0byB0aGUgW2BQb3BwZXIuanNgXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi9jb25zdHJ1Y3RvcnMvI29wdGlvbnMpIGluc3RhbmNlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcG9wcGVyT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtb2RpZmllcnM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBvbkZpcnN0VXBkYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8tZW5kJywgJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdib3R0b20tZW5kJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20nLCAnbGVmdC1lbmQnLCAnbGVmdC1zdGFydCcsICdsZWZ0JywgJ3JpZ2h0LWVuZCcsICdyaWdodC1zdGFydCcsICdyaWdodCcsICd0b3AtZW5kJywgJ3RvcC1zdGFydCcsICd0b3AnXSksXG4gICAgc3RyYXRlZ3k6IFByb3BUeXBlcy5vbmVPZihbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pXG4gIH0pLFxuICAvKipcbiAgICogQSByZWYgdGhhdCBwb2ludHMgdG8gdGhlIHVzZWQgcG9wcGVyIGluc3RhbmNlLlxuICAgKi9cbiAgcG9wcGVyUmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIFBvcHBlci5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgUG9wcGVyLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogSGVscCBzdXBwb3J0aW5nIGEgcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9UcmFuc2l0aW9uIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wcGVyOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG9vbHRpcCcsIHNsb3QpO1xufVxuY29uc3QgdG9vbHRpcENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb29sdGlwJywgWydwb3BwZXInLCAncG9wcGVySW50ZXJhY3RpdmUnLCAncG9wcGVyQXJyb3cnLCAncG9wcGVyQ2xvc2UnLCAndG9vbHRpcCcsICd0b29sdGlwQXJyb3cnLCAndG91Y2gnLCAndG9vbHRpcFBsYWNlbWVudExlZnQnLCAndG9vbHRpcFBsYWNlbWVudFJpZ2h0JywgJ3Rvb2x0aXBQbGFjZW1lbnRUb3AnLCAndG9vbHRpcFBsYWNlbWVudEJvdHRvbScsICdhcnJvdyddKTtcbmV4cG9ydCBkZWZhdWx0IHRvb2x0aXBDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFycm93XCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc2VzXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlc2NyaWJlQ2hpbGRcIiwgXCJkaXNhYmxlRm9jdXNMaXN0ZW5lclwiLCBcImRpc2FibGVIb3Zlckxpc3RlbmVyXCIsIFwiZGlzYWJsZUludGVyYWN0aXZlXCIsIFwiZGlzYWJsZVRvdWNoTGlzdGVuZXJcIiwgXCJlbnRlckRlbGF5XCIsIFwiZW50ZXJOZXh0RGVsYXlcIiwgXCJlbnRlclRvdWNoRGVsYXlcIiwgXCJmb2xsb3dDdXJzb3JcIiwgXCJpZFwiLCBcImxlYXZlRGVsYXlcIiwgXCJsZWF2ZVRvdWNoRGVsYXlcIiwgXCJvbkNsb3NlXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInBsYWNlbWVudFwiLCBcIlBvcHBlckNvbXBvbmVudFwiLCBcIlBvcHBlclByb3BzXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0aXRsZVwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIiwgXCJUcmFuc2l0aW9uUHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgdXNlVGltZW91dCwgeyBUaW1lb3V0IH0gZnJvbSAnQG11aS91dGlscy91c2VUaW1lb3V0JztcbmltcG9ydCBlbGVtZW50QWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudEFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IHsgdXNlUnRsIH0gZnJvbSAnQG11aS9zeXN0ZW0vUnRsUHJvdmlkZXInO1xuaW1wb3J0IGFwcGVuZE93bmVyU3RhdGUgZnJvbSAnQG11aS91dGlscy9hcHBlbmRPd25lclN0YXRlJztcbmltcG9ydCBnZXRSZWFjdEVsZW1lbnRSZWYgZnJvbSAnQG11aS91dGlscy9nZXRSZWFjdEVsZW1lbnRSZWYnO1xuaW1wb3J0IHsgc3R5bGVkLCB1c2VUaGVtZSB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBHcm93IGZyb20gJy4uL0dyb3cnO1xuaW1wb3J0IFBvcHBlciBmcm9tICcuLi9Qb3BwZXInO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VJZCBmcm9tICcuLi91dGlscy91c2VJZCc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgdG9vbHRpcENsYXNzZXMsIHsgZ2V0VG9vbHRpcFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdG9vbHRpcENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIHJvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWU1KSAvIDFlNTtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVJbnRlcmFjdGl2ZSxcbiAgICBhcnJvdyxcbiAgICB0b3VjaCxcbiAgICBwbGFjZW1lbnRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHBvcHBlcjogWydwb3BwZXInLCAhZGlzYWJsZUludGVyYWN0aXZlICYmICdwb3BwZXJJbnRlcmFjdGl2ZScsIGFycm93ICYmICdwb3BwZXJBcnJvdyddLFxuICAgIHRvb2x0aXA6IFsndG9vbHRpcCcsIGFycm93ICYmICd0b29sdGlwQXJyb3cnLCB0b3VjaCAmJiAndG91Y2gnLCBgdG9vbHRpcFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShwbGFjZW1lbnQuc3BsaXQoJy0nKVswXSl9YF0sXG4gICAgYXJyb3c6IFsnYXJyb3cnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFRvb2x0aXBVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFRvb2x0aXBQb3BwZXIgPSBzdHlsZWQoUG9wcGVyLCB7XG4gIG5hbWU6ICdNdWlUb29sdGlwJyxcbiAgc2xvdDogJ1BvcHBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucG9wcGVyLCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYgc3R5bGVzLnBvcHBlckludGVyYWN0aXZlLCBvd25lclN0YXRlLmFycm93ICYmIHN0eWxlcy5wb3BwZXJBcnJvdywgIW93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMucG9wcGVyQ2xvc2VdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZSxcbiAgb3BlblxufSkgPT4gX2V4dGVuZHMoe1xuICB6SW5kZXg6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS56SW5kZXgudG9vbHRpcCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlSW50ZXJhY3RpdmUgJiYge1xuICBwb2ludGVyRXZlbnRzOiAnYXV0bydcbn0sICFvcGVuICYmIHtcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgW2AmW2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJib3R0b21cIl0gLiR7dG9vbHRpcENsYXNzZXMuYXJyb3d9YF06IHtcbiAgICB0b3A6IDAsXG4gICAgbWFyZ2luVG9wOiAnLTAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMTAwJSdcbiAgICB9XG4gIH0sXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiB7XG4gICAgYm90dG9tOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogJy0wLjcxZW0nLFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICB0cmFuc2Zvcm1PcmlnaW46ICcxMDAlIDAnXG4gICAgfVxuICB9LFxuICBbYCZbZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdIC4ke3Rvb2x0aXBDbGFzc2VzLmFycm93fWBdOiBfZXh0ZW5kcyh7fSwgIW93bmVyU3RhdGUuaXNSdGwgPyB7XG4gICAgbGVmdDogMCxcbiAgICBtYXJnaW5MZWZ0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICByaWdodDogMCxcbiAgICBtYXJnaW5SaWdodDogJy0wLjcxZW0nXG4gIH0sIHtcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIHdpZHRoOiAnMC43MWVtJyxcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMTAwJSAxMDAlJ1xuICAgIH1cbiAgfSksXG4gIFtgJltkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwibGVmdFwiXSAuJHt0b29sdGlwQ2xhc3Nlcy5hcnJvd31gXTogX2V4dGVuZHMoe30sICFvd25lclN0YXRlLmlzUnRsID8ge1xuICAgIHJpZ2h0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAnLTAuNzFlbSdcbiAgfSA6IHtcbiAgICBsZWZ0OiAwLFxuICAgIG1hcmdpbkxlZnQ6ICctMC43MWVtJ1xuICB9LCB7XG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICB3aWR0aDogJzAuNzFlbScsXG4gICAgJyY6OmJlZm9yZSc6IHtcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAgMCdcbiAgICB9XG4gIH0pXG59KSk7XG5jb25zdCBUb29sdGlwVG9vbHRpcCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdUb29sdGlwJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy50b29sdGlwLCBvd25lclN0YXRlLnRvdWNoICYmIHN0eWxlcy50b3VjaCwgb3duZXJTdGF0ZS5hcnJvdyAmJiBzdHlsZXMudG9vbHRpcEFycm93LCBzdHlsZXNbYHRvb2x0aXBQbGFjZW1lbnQke2NhcGl0YWxpemUob3duZXJTdGF0ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuVG9vbHRpcC5iZyA6IGFscGhhKHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdLCAwLjkyKSxcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuY29tbW9uLndoaXRlLFxuICBmb250RmFtaWx5OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gIHBhZGRpbmc6ICc0cHggOHB4JyxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMSksXG4gIG1heFdpZHRoOiAzMDAsXG4gIG1hcmdpbjogMixcbiAgd29yZFdyYXA6ICdicmVhay13b3JkJyxcbiAgZm9udFdlaWdodDogdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0TWVkaXVtXG59LCBvd25lclN0YXRlLmFycm93ICYmIHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTQpLFxuICBsaW5lSGVpZ2h0OiBgJHtyb3VuZCgxNiAvIDE0KX1lbWAsXG4gIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodFJlZ3VsYXJcbn0sIHtcbiAgW2AuJHt0b29sdGlwQ2xhc3Nlcy5wb3BwZXJ9W2RhdGEtcG9wcGVyLXBsYWNlbWVudCo9XCJsZWZ0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ3JpZ2h0IGNlbnRlcidcbiAgfSwgIW93bmVyU3RhdGUuaXNSdGwgPyBfZXh0ZW5kcyh7XG4gICAgbWFyZ2luUmlnaHQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5SaWdodDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpbkxlZnQ6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5MZWZ0OiAnMjRweCdcbiAgfSkpLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cInJpZ2h0XCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2xlZnQgY2VudGVyJ1xuICB9LCAhb3duZXJTdGF0ZS5pc1J0bCA/IF9leHRlbmRzKHtcbiAgICBtYXJnaW5MZWZ0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luTGVmdDogJzI0cHgnXG4gIH0pIDogX2V4dGVuZHMoe1xuICAgIG1hcmdpblJpZ2h0OiAnMTRweCdcbiAgfSwgb3duZXJTdGF0ZS50b3VjaCAmJiB7XG4gICAgbWFyZ2luUmlnaHQ6ICcyNHB4J1xuICB9KSksXG4gIFtgLiR7dG9vbHRpcENsYXNzZXMucG9wcGVyfVtkYXRhLXBvcHBlci1wbGFjZW1lbnQqPVwidG9wXCJdICZgXTogX2V4dGVuZHMoe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogJ2NlbnRlciBib3R0b20nLFxuICAgIG1hcmdpbkJvdHRvbTogJzE0cHgnXG4gIH0sIG93bmVyU3RhdGUudG91Y2ggJiYge1xuICAgIG1hcmdpbkJvdHRvbTogJzI0cHgnXG4gIH0pLFxuICBbYC4ke3Rvb2x0aXBDbGFzc2VzLnBvcHBlcn1bZGF0YS1wb3BwZXItcGxhY2VtZW50Kj1cImJvdHRvbVwiXSAmYF06IF9leHRlbmRzKHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICdjZW50ZXIgdG9wJyxcbiAgICBtYXJnaW5Ub3A6ICcxNHB4J1xuICB9LCBvd25lclN0YXRlLnRvdWNoICYmIHtcbiAgICBtYXJnaW5Ub3A6ICcyNHB4J1xuICB9KVxufSkpO1xuY29uc3QgVG9vbHRpcEFycm93ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG9vbHRpcCcsXG4gIHNsb3Q6ICdBcnJvdycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLmFycm93XG59KSgoe1xuICB0aGVtZVxufSkgPT4gKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgd2lkdGg6ICcxZW0nLFxuICBoZWlnaHQ6ICcwLjcxZW0nIC8qID0gd2lkdGggLyBzcXJ0KDIpID0gKGxlbmd0aCBvZiB0aGUgaHlwb3RlbnVzZSkgKi8sXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBjb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5Ub29sdGlwLmJnIDogYWxwaGEodGhlbWUucGFsZXR0ZS5ncmV5WzcwMF0sIDAuOSksXG4gICcmOjpiZWZvcmUnOiB7XG4gICAgY29udGVudDogJ1wiXCInLFxuICAgIG1hcmdpbjogJ2F1dG8nLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgIHRyYW5zZm9ybTogJ3JvdGF0ZSg0NWRlZyknXG4gIH1cbn0pKTtcbmxldCBoeXN0ZXJzaXNPcGVuID0gZmFsc2U7XG5jb25zdCBoeXN0ZXJzaXNUaW1lciA9IG5ldyBUaW1lb3V0KCk7XG5sZXQgY3Vyc29yUG9zaXRpb24gPSB7XG4gIHg6IDAsXG4gIHk6IDBcbn07XG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlc2V0KCkge1xuICBoeXN0ZXJzaXNPcGVuID0gZmFsc2U7XG4gIGh5c3RlcnNpc1RpbWVyLmNsZWFyKCk7XG59XG5mdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVyKGhhbmRsZXIsIGV2ZW50SGFuZGxlcikge1xuICByZXR1cm4gKGV2ZW50LCAuLi5wYXJhbXMpID0+IHtcbiAgICBpZiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICBldmVudEhhbmRsZXIoZXZlbnQsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGhhbmRsZXIoZXZlbnQsIC4uLnBhcmFtcyk7XG4gIH07XG59XG5cbi8vIFRPRE8gdjY6IFJlbW92ZSBQb3BwZXJDb21wb25lbnQsIFBvcHBlclByb3BzLCBUcmFuc2l0aW9uQ29tcG9uZW50IGFuZCBUcmFuc2l0aW9uUHJvcHMuXG5jb25zdCBUb29sdGlwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG9vbHRpcChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRwb3BwZXIsIF9yZWYyLCBfcmVmMywgX3Nsb3RzJHRyYW5zaXRpb24sIF9yZWY0LCBfc2xvdHMkdG9vbHRpcCwgX3JlZjUsIF9zbG90cyRhcnJvdywgX3Nsb3RQcm9wcyRwb3BwZXIsIF9yZWY2LCBfc2xvdFByb3BzJHBvcHBlcjIsIF9zbG90UHJvcHMkdHJhbnNpdGlvbiwgX3Nsb3RQcm9wcyR0b29sdGlwLCBfcmVmNywgX3Nsb3RQcm9wcyR0b29sdGlwMiwgX3Nsb3RQcm9wcyRhcnJvdywgX3JlZjgsIF9zbG90UHJvcHMkYXJyb3cyO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvb2x0aXAnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhcnJvdyA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuUHJvcCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGVzY3JpYmVDaGlsZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUZvY3VzTGlzdGVuZXIgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVIb3Zlckxpc3RlbmVyID0gZmFsc2UsXG4gICAgICBkaXNhYmxlSW50ZXJhY3RpdmU6IGRpc2FibGVJbnRlcmFjdGl2ZVByb3AgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVUb3VjaExpc3RlbmVyID0gZmFsc2UsXG4gICAgICBlbnRlckRlbGF5ID0gMTAwLFxuICAgICAgZW50ZXJOZXh0RGVsYXkgPSAwLFxuICAgICAgZW50ZXJUb3VjaERlbGF5ID0gNzAwLFxuICAgICAgZm9sbG93Q3Vyc29yID0gZmFsc2UsXG4gICAgICBpZDogaWRQcm9wLFxuICAgICAgbGVhdmVEZWxheSA9IDAsXG4gICAgICBsZWF2ZVRvdWNoRGVsYXkgPSAxNTAwLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW46IG9wZW5Qcm9wLFxuICAgICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgICBQb3BwZXJDb21wb25lbnQ6IFBvcHBlckNvbXBvbmVudFByb3AsXG4gICAgICBQb3BwZXJQcm9wcyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge30sXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdGl0bGUsXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50OiBUcmFuc2l0aW9uQ29tcG9uZW50UHJvcCA9IEdyb3csXG4gICAgICBUcmFuc2l0aW9uUHJvcHNcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAvLyB0byBwcmV2ZW50IHJ1bnRpbWUgZXJyb3JzLCBkZXZlbG9wZXJzIHdpbGwgbmVlZCB0byBwcm92aWRlIGEgY2hpbGQgYXMgYSBSZWFjdCBlbGVtZW50IGFueXdheS5cbiAgY29uc3QgY2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW5Qcm9wKSA/IGNoaWxkcmVuUHJvcCA6IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuUHJvcFxuICB9KTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBpc1J0bCA9IHVzZVJ0bCgpO1xuICBjb25zdCBbY2hpbGROb2RlLCBzZXRDaGlsZE5vZGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgW2Fycm93UmVmLCBzZXRBcnJvd1JlZl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgaWdub3JlTm9uVG91Y2hFdmVudHMgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBkaXNhYmxlSW50ZXJhY3RpdmUgPSBkaXNhYmxlSW50ZXJhY3RpdmVQcm9wIHx8IGZvbGxvd0N1cnNvcjtcbiAgY29uc3QgY2xvc2VUaW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgZW50ZXJUaW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgbGVhdmVUaW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgdG91Y2hUaW1lciA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgW29wZW5TdGF0ZSwgc2V0T3BlblN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IG9wZW5Qcm9wLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIG5hbWU6ICdUb29sdGlwJyxcbiAgICBzdGF0ZTogJ29wZW4nXG4gIH0pO1xuICBsZXQgb3BlbiA9IG9wZW5TdGF0ZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9PSB1bmRlZmluZWQpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRpc2FibGVkICYmICFpc0NvbnRyb2xsZWQgJiYgdGl0bGUgIT09ICcnICYmIGNoaWxkTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdidXR0b24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBhcmUgcHJvdmlkaW5nIGEgZGlzYWJsZWQgYGJ1dHRvbmAgY2hpbGQgdG8gdGhlIFRvb2x0aXAgY29tcG9uZW50LicsICdBIGRpc2FibGVkIGVsZW1lbnQgZG9lcyBub3QgZmlyZSBldmVudHMuJywgXCJUb29sdGlwIG5lZWRzIHRvIGxpc3RlbiB0byB0aGUgY2hpbGQgZWxlbWVudCdzIGV2ZW50cyB0byBkaXNwbGF5IHRoZSB0aXRsZS5cIiwgJycsICdBZGQgYSBzaW1wbGUgd3JhcHBlciBlbGVtZW50LCBzdWNoIGFzIGEgYHNwYW5gLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbdGl0bGUsIGNoaWxkTm9kZSwgaXNDb250cm9sbGVkXSk7XG4gIH1cbiAgY29uc3QgaWQgPSB1c2VJZChpZFByb3ApO1xuICBjb25zdCBwcmV2VXNlclNlbGVjdCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBzdG9wVG91Y2hJbnRlcmFjdGlvbiA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcmV2VXNlclNlbGVjdC5jdXJyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9IHByZXZVc2VyU2VsZWN0LmN1cnJlbnQ7XG4gICAgICBwcmV2VXNlclNlbGVjdC5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0b3VjaFRpbWVyLmNsZWFyKCk7XG4gIH0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gc3RvcFRvdWNoSW50ZXJhY3Rpb24sIFtzdG9wVG91Y2hJbnRlcmFjdGlvbl0pO1xuICBjb25zdCBoYW5kbGVPcGVuID0gZXZlbnQgPT4ge1xuICAgIGh5c3RlcnNpc1RpbWVyLmNsZWFyKCk7XG4gICAgaHlzdGVyc2lzT3BlbiA9IHRydWU7XG5cbiAgICAvLyBUaGUgbW91c2VvdmVyIGV2ZW50IHdpbGwgdHJpZ2dlciBmb3IgZXZlcnkgbmVzdGVkIGVsZW1lbnQgaW4gdGhlIHRvb2x0aXAuXG4gICAgLy8gV2UgY2FuIHNraXAgcmVyZW5kZXJpbmcgd2hlbiB0aGUgdG9vbHRpcCBpcyBhbHJlYWR5IG9wZW4uXG4gICAgLy8gV2UgYXJlIHVzaW5nIHRoZSBtb3VzZW92ZXIgZXZlbnQgaW5zdGVhZCBvZiB0aGUgbW91c2VlbnRlciBldmVudCB0byBmaXggYSBoaWRlL3Nob3cgaXNzdWUuXG4gICAgc2V0T3BlblN0YXRlKHRydWUpO1xuICAgIGlmIChvbk9wZW4gJiYgIW9wZW4pIHtcbiAgICAgIG9uT3BlbihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IHVzZUV2ZW50Q2FsbGJhY2soXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0LlN5bnRoZXRpY0V2ZW50IHwgRXZlbnR9IGV2ZW50XG4gICAqL1xuICBldmVudCA9PiB7XG4gICAgaHlzdGVyc2lzVGltZXIuc3RhcnQoODAwICsgbGVhdmVEZWxheSwgKCkgPT4ge1xuICAgICAgaHlzdGVyc2lzT3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHNldE9wZW5TdGF0ZShmYWxzZSk7XG4gICAgaWYgKG9uQ2xvc2UgJiYgb3Blbikge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICAgIGNsb3NlVGltZXIuc3RhcnQodGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3QsICgpID0+IHtcbiAgICAgIGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlT3ZlciA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaWdub3JlTm9uVG91Y2hFdmVudHMuY3VycmVudCAmJiBldmVudC50eXBlICE9PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRpdGxlIGFoZWFkIG9mIHRpbWUuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB3YWl0IGZvciB0aGUgbmV4dCByZW5kZXIgY29tbWl0LlxuICAgIC8vIFdlIHdvdWxkIHJpc2sgZGlzcGxheWluZyB0d28gdG9vbHRpcHMgYXQgdGhlIHNhbWUgdGltZSAobmF0aXZlICsgdGhpcyBvbmUpLlxuICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAgIGNoaWxkTm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgfVxuICAgIGVudGVyVGltZXIuY2xlYXIoKTtcbiAgICBsZWF2ZVRpbWVyLmNsZWFyKCk7XG4gICAgaWYgKGVudGVyRGVsYXkgfHwgaHlzdGVyc2lzT3BlbiAmJiBlbnRlck5leHREZWxheSkge1xuICAgICAgZW50ZXJUaW1lci5zdGFydChoeXN0ZXJzaXNPcGVuID8gZW50ZXJOZXh0RGVsYXkgOiBlbnRlckRlbGF5LCAoKSA9PiB7XG4gICAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZU9wZW4oZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IGV2ZW50ID0+IHtcbiAgICBlbnRlclRpbWVyLmNsZWFyKCk7XG4gICAgbGVhdmVUaW1lci5zdGFydChsZWF2ZURlbGF5LCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbG9zZShldmVudCk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgLy8gV2UgZG9uJ3QgbmVjZXNzYXJpbHkgY2FyZSBhYm91dCB0aGUgZm9jdXNWaXNpYmxlIHN0YXRlICh3aGljaCBpcyBzYWZlIHRvIGFjY2VzcyB2aWEgcmVmIGFueXdheSkuXG4gIC8vIFdlIGp1c3QgbmVlZCB0byByZS1yZW5kZXIgdGhlIFRvb2x0aXAgaWYgdGhlIGZvY3VzLXZpc2libGUgc3RhdGUgY2hhbmdlcy5cbiAgY29uc3QgWywgc2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgICBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIC8vIFRoZSBhdXRvRm9jdXMgb2YgUmVhY3QgbWlnaHQgdHJpZ2dlciB0aGUgZXZlbnQgYmVmb3JlIHRoZSBjb21wb25lbnREaWRNb3VudC5cbiAgICAvLyBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoaXMgZXZlbnR1YWxpdHkuXG4gICAgaWYgKCFjaGlsZE5vZGUpIHtcbiAgICAgIHNldENoaWxkTm9kZShldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Q2hpbGRJc0ZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGhhbmRsZU1vdXNlT3ZlcihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBkZXRlY3RUb3VjaFN0YXJ0ID0gZXZlbnQgPT4ge1xuICAgIGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSBjaGlsZHJlbi5wcm9wcztcbiAgICBpZiAoY2hpbGRyZW5Qcm9wcy5vblRvdWNoU3RhcnQpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHMub25Ub3VjaFN0YXJ0KGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSBldmVudCA9PiB7XG4gICAgZGV0ZWN0VG91Y2hTdGFydChldmVudCk7XG4gICAgbGVhdmVUaW1lci5jbGVhcigpO1xuICAgIGNsb3NlVGltZXIuY2xlYXIoKTtcbiAgICBzdG9wVG91Y2hJbnRlcmFjdGlvbigpO1xuICAgIHByZXZVc2VyU2VsZWN0LmN1cnJlbnQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLldlYmtpdFVzZXJTZWxlY3Q7XG4gICAgLy8gUHJldmVudCBpT1MgdGV4dCBzZWxlY3Rpb24gb24gbG9uZy10YXAuXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5XZWJraXRVc2VyU2VsZWN0ID0gJ25vbmUnO1xuICAgIHRvdWNoVGltZXIuc3RhcnQoZW50ZXJUb3VjaERlbGF5LCAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLldlYmtpdFVzZXJTZWxlY3QgPSBwcmV2VXNlclNlbGVjdC5jdXJyZW50O1xuICAgICAgaGFuZGxlTW91c2VPdmVyKGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSBldmVudCA9PiB7XG4gICAgaWYgKGNoaWxkcmVuLnByb3BzLm9uVG91Y2hFbmQpIHtcbiAgICAgIGNoaWxkcmVuLnByb3BzLm9uVG91Y2hFbmQoZXZlbnQpO1xuICAgIH1cbiAgICBzdG9wVG91Y2hJbnRlcmFjdGlvbigpO1xuICAgIGxlYXZlVGltZXIuc3RhcnQobGVhdmVUb3VjaERlbGF5LCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbG9zZShldmVudCk7XG4gICAgfSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gbmF0aXZlRXZlbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKG5hdGl2ZUV2ZW50KSB7XG4gICAgICAvLyBJRTExLCBFZGdlIChwcmlvciB0byB1c2luZyBCaW5rPykgdXNlICdFc2MnXG4gICAgICBpZiAobmF0aXZlRXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBuYXRpdmVFdmVudC5rZXkgPT09ICdFc2MnKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlLCBvcGVuXSk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoZ2V0UmVhY3RFbGVtZW50UmVmKGNoaWxkcmVuKSwgZm9jdXNWaXNpYmxlUmVmLCBzZXRDaGlsZE5vZGUsIHJlZik7XG5cbiAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgaW4gZGlzcGxheWluZyBhbiBlbXB0eSB0b29sdGlwLlxuICAvLyBTbyB3ZSBleGNsdWRlIGFsbCBmYWxzeSB2YWx1ZXMsIGV4Y2VwdCAwLCB3aGljaCBpcyB2YWxpZC5cbiAgaWYgKCF0aXRsZSAmJiB0aXRsZSAhPT0gMCkge1xuICAgIG9wZW4gPSBmYWxzZTtcbiAgfVxuICBjb25zdCBwb3BwZXJSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSBjaGlsZHJlbi5wcm9wcztcbiAgICBpZiAoY2hpbGRyZW5Qcm9wcy5vbk1vdXNlTW92ZSkge1xuICAgICAgY2hpbGRyZW5Qcm9wcy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfVxuICAgIGN1cnNvclBvc2l0aW9uID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgICB9O1xuICAgIGlmIChwb3BwZXJSZWYuY3VycmVudCkge1xuICAgICAgcG9wcGVyUmVmLmN1cnJlbnQudXBkYXRlKCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBuYW1lT3JEZXNjUHJvcHMgPSB7fTtcbiAgY29uc3QgdGl0bGVJc1N0cmluZyA9IHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZyc7XG4gIGlmIChkZXNjcmliZUNoaWxkKSB7XG4gICAgbmFtZU9yRGVzY1Byb3BzLnRpdGxlID0gIW9wZW4gJiYgdGl0bGVJc1N0cmluZyAmJiAhZGlzYWJsZUhvdmVyTGlzdGVuZXIgPyB0aXRsZSA6IG51bGw7XG4gICAgbmFtZU9yRGVzY1Byb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10gPSBvcGVuID8gaWQgOiBudWxsO1xuICB9IGVsc2Uge1xuICAgIG5hbWVPckRlc2NQcm9wc1snYXJpYS1sYWJlbCddID0gdGl0bGVJc1N0cmluZyA/IHRpdGxlIDogbnVsbDtcbiAgICBuYW1lT3JEZXNjUHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddID0gb3BlbiAmJiAhdGl0bGVJc1N0cmluZyA/IGlkIDogbnVsbDtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0gX2V4dGVuZHMoe30sIG5hbWVPckRlc2NQcm9wcywgb3RoZXIsIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbHN4KG90aGVyLmNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKSxcbiAgICBvblRvdWNoU3RhcnQ6IGRldGVjdFRvdWNoU3RhcnQsXG4gICAgcmVmOiBoYW5kbGVSZWZcbiAgfSwgZm9sbG93Q3Vyc29yID8ge1xuICAgIG9uTW91c2VNb3ZlOiBoYW5kbGVNb3VzZU1vdmVcbiAgfSA6IHt9KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaGlsZHJlblByb3BzWydkYXRhLW11aS1pbnRlcm5hbC1jbG9uZS1lbGVtZW50J10gPSB0cnVlO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChjaGlsZE5vZGUgJiYgIWNoaWxkTm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbXVpLWludGVybmFsLWNsb25lLWVsZW1lbnQnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNoaWxkcmVuYCBjb21wb25lbnQgb2YgdGhlIFRvb2x0aXAgaXMgbm90IGZvcndhcmRpbmcgaXRzIHByb3BzIGNvcnJlY3RseS4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHByb3BzIGFyZSBzcHJlYWQgb24gdGhlIHNhbWUgZWxlbWVudCB0aGF0IHRoZSByZWYgaXMgYXBwbGllZCB0by4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2NoaWxkTm9kZV0pO1xuICB9XG4gIGNvbnN0IGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycyA9IHt9O1xuICBpZiAoIWRpc2FibGVUb3VjaExpc3RlbmVyKSB7XG4gICAgY2hpbGRyZW5Qcm9wcy5vblRvdWNoU3RhcnQgPSBoYW5kbGVUb3VjaFN0YXJ0O1xuICAgIGNoaWxkcmVuUHJvcHMub25Ub3VjaEVuZCA9IGhhbmRsZVRvdWNoRW5kO1xuICB9XG4gIGlmICghZGlzYWJsZUhvdmVyTGlzdGVuZXIpIHtcbiAgICBjaGlsZHJlblByb3BzLm9uTW91c2VPdmVyID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVNb3VzZU92ZXIsIGNoaWxkcmVuUHJvcHMub25Nb3VzZU92ZXIpO1xuICAgIGNoaWxkcmVuUHJvcHMub25Nb3VzZUxlYXZlID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVNb3VzZUxlYXZlLCBjaGlsZHJlblByb3BzLm9uTW91c2VMZWF2ZSk7XG4gICAgaWYgKCFkaXNhYmxlSW50ZXJhY3RpdmUpIHtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlT3ZlciA9IGhhbmRsZU1vdXNlT3ZlcjtcbiAgICAgIGludGVyYWN0aXZlV3JhcHBlckxpc3RlbmVycy5vbk1vdXNlTGVhdmUgPSBoYW5kbGVNb3VzZUxlYXZlO1xuICAgIH1cbiAgfVxuICBpZiAoIWRpc2FibGVGb2N1c0xpc3RlbmVyKSB7XG4gICAgY2hpbGRyZW5Qcm9wcy5vbkZvY3VzID0gY29tcG9zZUV2ZW50SGFuZGxlcihoYW5kbGVGb2N1cywgY2hpbGRyZW5Qcm9wcy5vbkZvY3VzKTtcbiAgICBjaGlsZHJlblByb3BzLm9uQmx1ciA9IGNvbXBvc2VFdmVudEhhbmRsZXIoaGFuZGxlQmx1ciwgY2hpbGRyZW5Qcm9wcy5vbkJsdXIpO1xuICAgIGlmICghZGlzYWJsZUludGVyYWN0aXZlKSB7XG4gICAgICBpbnRlcmFjdGl2ZVdyYXBwZXJMaXN0ZW5lcnMub25Gb2N1cyA9IGhhbmRsZUZvY3VzO1xuICAgICAgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLm9uQmx1ciA9IGhhbmRsZUJsdXI7XG4gICAgfVxuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGNoaWxkcmVuLnByb3BzLnRpdGxlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGB0aXRsZWAgcHJvcCB0byB0aGUgY2hpbGQgb2YgPFRvb2x0aXAgLz4uJywgYFJlbW92ZSB0aGlzIHRpdGxlIHByb3AgXFxgJHtjaGlsZHJlbi5wcm9wcy50aXRsZX1cXGAgb3IgdGhlIFRvb2x0aXAgY29tcG9uZW50LmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcG9wcGVyT3B0aW9ucyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHZhciBfUG9wcGVyUHJvcHMkcG9wcGVyT3A7XG4gICAgbGV0IHRvb2x0aXBNb2RpZmllcnMgPSBbe1xuICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oYXJyb3dSZWYpLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBlbGVtZW50OiBhcnJvd1JlZixcbiAgICAgICAgcGFkZGluZzogNFxuICAgICAgfVxuICAgIH1dO1xuICAgIGlmICgoX1BvcHBlclByb3BzJHBvcHBlck9wID0gUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucykgIT0gbnVsbCAmJiBfUG9wcGVyUHJvcHMkcG9wcGVyT3AubW9kaWZpZXJzKSB7XG4gICAgICB0b29sdGlwTW9kaWZpZXJzID0gdG9vbHRpcE1vZGlmaWVycy5jb25jYXQoUG9wcGVyUHJvcHMucG9wcGVyT3B0aW9ucy5tb2RpZmllcnMpO1xuICAgIH1cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIFBvcHBlclByb3BzLnBvcHBlck9wdGlvbnMsIHtcbiAgICAgIG1vZGlmaWVyczogdG9vbHRpcE1vZGlmaWVyc1xuICAgIH0pO1xuICB9LCBbYXJyb3dSZWYsIFBvcHBlclByb3BzXSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBpc1J0bCxcbiAgICBhcnJvdyxcbiAgICBkaXNhYmxlSW50ZXJhY3RpdmUsXG4gICAgcGxhY2VtZW50LFxuICAgIFBvcHBlckNvbXBvbmVudFByb3AsXG4gICAgdG91Y2g6IGlnbm9yZU5vblRvdWNoRXZlbnRzLmN1cnJlbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUG9wcGVyQ29tcG9uZW50ID0gKF9yZWYgPSAoX3Nsb3RzJHBvcHBlciA9IHNsb3RzLnBvcHBlcikgIT0gbnVsbCA/IF9zbG90cyRwb3BwZXIgOiBjb21wb25lbnRzLlBvcHBlcikgIT0gbnVsbCA/IF9yZWYgOiBUb29sdGlwUG9wcGVyO1xuICBjb25zdCBUcmFuc2l0aW9uQ29tcG9uZW50ID0gKF9yZWYyID0gKF9yZWYzID0gKF9zbG90cyR0cmFuc2l0aW9uID0gc2xvdHMudHJhbnNpdGlvbikgIT0gbnVsbCA/IF9zbG90cyR0cmFuc2l0aW9uIDogY29tcG9uZW50cy5UcmFuc2l0aW9uKSAhPSBudWxsID8gX3JlZjMgOiBUcmFuc2l0aW9uQ29tcG9uZW50UHJvcCkgIT0gbnVsbCA/IF9yZWYyIDogR3JvdztcbiAgY29uc3QgVG9vbHRpcENvbXBvbmVudCA9IChfcmVmNCA9IChfc2xvdHMkdG9vbHRpcCA9IHNsb3RzLnRvb2x0aXApICE9IG51bGwgPyBfc2xvdHMkdG9vbHRpcCA6IGNvbXBvbmVudHMuVG9vbHRpcCkgIT0gbnVsbCA/IF9yZWY0IDogVG9vbHRpcFRvb2x0aXA7XG4gIGNvbnN0IEFycm93Q29tcG9uZW50ID0gKF9yZWY1ID0gKF9zbG90cyRhcnJvdyA9IHNsb3RzLmFycm93KSAhPSBudWxsID8gX3Nsb3RzJGFycm93IDogY29tcG9uZW50cy5BcnJvdykgIT0gbnVsbCA/IF9yZWY1IDogVG9vbHRpcEFycm93O1xuICBjb25zdCBwb3BwZXJQcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoUG9wcGVyQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgUG9wcGVyUHJvcHMsIChfc2xvdFByb3BzJHBvcHBlciA9IHNsb3RQcm9wcy5wb3BwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBvcHBlciA6IGNvbXBvbmVudHNQcm9wcy5wb3BwZXIsIHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wb3BwZXIsIFBvcHBlclByb3BzID09IG51bGwgPyB2b2lkIDAgOiBQb3BwZXJQcm9wcy5jbGFzc05hbWUsIChfcmVmNiA9IChfc2xvdFByb3BzJHBvcHBlcjIgPSBzbG90UHJvcHMucG9wcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwb3BwZXIyIDogY29tcG9uZW50c1Byb3BzLnBvcHBlcikgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWY2LmNsYXNzTmFtZSlcbiAgfSksIG93bmVyU3RhdGUpO1xuICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBhcHBlbmRPd25lclN0YXRlKFRyYW5zaXRpb25Db21wb25lbnQsIF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uUHJvcHMsIChfc2xvdFByb3BzJHRyYW5zaXRpb24gPSBzbG90UHJvcHMudHJhbnNpdGlvbikgIT0gbnVsbCA/IF9zbG90UHJvcHMkdHJhbnNpdGlvbiA6IGNvbXBvbmVudHNQcm9wcy50cmFuc2l0aW9uKSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IHRvb2x0aXBQcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoVG9vbHRpcENvbXBvbmVudCwgX2V4dGVuZHMoe30sIChfc2xvdFByb3BzJHRvb2x0aXAgPSBzbG90UHJvcHMudG9vbHRpcCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkdG9vbHRpcCA6IGNvbXBvbmVudHNQcm9wcy50b29sdGlwLCB7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMudG9vbHRpcCwgKF9yZWY3ID0gKF9zbG90UHJvcHMkdG9vbHRpcDIgPSBzbG90UHJvcHMudG9vbHRpcCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkdG9vbHRpcDIgOiBjb21wb25lbnRzUHJvcHMudG9vbHRpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWY3LmNsYXNzTmFtZSlcbiAgfSksIG93bmVyU3RhdGUpO1xuICBjb25zdCB0b29sdGlwQXJyb3dQcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoQXJyb3dDb21wb25lbnQsIF9leHRlbmRzKHt9LCAoX3Nsb3RQcm9wcyRhcnJvdyA9IHNsb3RQcm9wcy5hcnJvdykgIT0gbnVsbCA/IF9zbG90UHJvcHMkYXJyb3cgOiBjb21wb25lbnRzUHJvcHMuYXJyb3csIHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5hcnJvdywgKF9yZWY4ID0gKF9zbG90UHJvcHMkYXJyb3cyID0gc2xvdFByb3BzLmFycm93KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRhcnJvdzIgOiBjb21wb25lbnRzUHJvcHMuYXJyb3cpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmOC5jbGFzc05hbWUpXG4gIH0pLCBvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRyZW5Qcm9wcyksIC8qI19fUFVSRV9fKi9fanN4KFBvcHBlckNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IFBvcHBlckNvbXBvbmVudFByb3AgIT0gbnVsbCA/IFBvcHBlckNvbXBvbmVudFByb3AgOiBQb3BwZXIsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGFuY2hvckVsOiBmb2xsb3dDdXJzb3IgPyB7XG4gICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogKCkgPT4gKHtcbiAgICAgICAgICB0b3A6IGN1cnNvclBvc2l0aW9uLnksXG4gICAgICAgICAgbGVmdDogY3Vyc29yUG9zaXRpb24ueCxcbiAgICAgICAgICByaWdodDogY3Vyc29yUG9zaXRpb24ueCxcbiAgICAgICAgICBib3R0b206IGN1cnNvclBvc2l0aW9uLnksXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwXG4gICAgICAgIH0pXG4gICAgICB9IDogY2hpbGROb2RlLFxuICAgICAgcG9wcGVyUmVmOiBwb3BwZXJSZWYsXG4gICAgICBvcGVuOiBjaGlsZE5vZGUgPyBvcGVuIDogZmFsc2UsXG4gICAgICBpZDogaWQsXG4gICAgICB0cmFuc2l0aW9uOiB0cnVlXG4gICAgfSwgaW50ZXJhY3RpdmVXcmFwcGVyTGlzdGVuZXJzLCBwb3BwZXJQcm9wcywge1xuICAgICAgcG9wcGVyT3B0aW9uczogcG9wcGVyT3B0aW9ucyxcbiAgICAgIGNoaWxkcmVuOiAoe1xuICAgICAgICBUcmFuc2l0aW9uUHJvcHM6IFRyYW5zaXRpb25Qcm9wc0lubmVyXG4gICAgICB9KSA9PiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIHRpbWVvdXQ6IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0sIFRyYW5zaXRpb25Qcm9wc0lubmVyLCB0cmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhUb29sdGlwQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgdG9vbHRpcFByb3BzLCB7XG4gICAgICAgICAgY2hpbGRyZW46IFt0aXRsZSwgYXJyb3cgPyAvKiNfX1BVUkVfXyovX2pzeChBcnJvd0NvbXBvbmVudCwgX2V4dGVuZHMoe30sIHRvb2x0aXBBcnJvd1Byb3BzLCB7XG4gICAgICAgICAgICByZWY6IHNldEFycm93UmVmXG4gICAgICAgICAgfSkpIDogbnVsbF1cbiAgICAgICAgfSkpXG4gICAgICB9KSlcbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sdGlwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYWRkcyBhbiBhcnJvdyB0byB0aGUgdG9vbHRpcC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFycm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRvb2x0aXAgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBBcnJvdzogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFBvcHBlcjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFRvb2x0aXA6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBUcmFuc2l0aW9uOiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXJyb3c6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcG9wcGVyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvb2x0aXA6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdHJhbnNpdGlvbjogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGB0aXRsZWAgYWN0cyBhcyBhbiBhY2Nlc3NpYmxlIGRlc2NyaXB0aW9uLlxuICAgKiBCeSBkZWZhdWx0IHRoZSBgdGl0bGVgIGFjdHMgYXMgYW4gYWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGNoaWxkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVzY3JpYmVDaGlsZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEbyBub3QgcmVzcG9uZCB0byBmb2N1cy12aXNpYmxlIGV2ZW50cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c0xpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERvIG5vdCByZXNwb25kIHRvIGhvdmVyIGV2ZW50cy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVIb3Zlckxpc3RlbmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1ha2VzIGEgdG9vbHRpcCBub3QgaW50ZXJhY3RpdmUsIGkuZS4gaXQgd2lsbCBjbG9zZSB3aGVuIHRoZSB1c2VyXG4gICAqIGhvdmVycyBvdmVyIHRoZSB0b29sdGlwIGJlZm9yZSB0aGUgYGxlYXZlRGVsYXlgIGlzIGV4cGlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSW50ZXJhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRG8gbm90IHJlc3BvbmQgdG8gbG9uZyBwcmVzcyB0b3VjaCBldmVudHMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hMaXN0ZW5lcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwLlxuICAgKiBUaGlzIHByb3Agd29uJ3QgaW1wYWN0IHRoZSBlbnRlciB0b3VjaCBkZWxheSAoYGVudGVyVG91Y2hEZWxheWApLlxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIGVudGVyRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzaG93aW5nIHRoZSB0b29sdGlwIHdoZW4gb25lIHdhcyBhbHJlYWR5IHJlY2VudGx5IG9wZW5lZC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZW50ZXJOZXh0RGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhIHVzZXIgbXVzdCB0b3VjaCB0aGUgZWxlbWVudCBiZWZvcmUgc2hvd2luZyB0aGUgdG9vbHRpcC5cbiAgICogQGRlZmF1bHQgNzAwXG4gICAqL1xuICBlbnRlclRvdWNoRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0b29sdGlwIGZvbGxvdyB0aGUgY3Vyc29yIG92ZXIgdGhlIHdyYXBwZWQgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvbGxvd0N1cnNvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaXMgdXNlZCB0byBoZWxwIGltcGxlbWVudCB0aGUgYWNjZXNzaWJpbGl0eSBsb2dpYy5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLiBJdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIGlkLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBoaWRpbmcgdGhlIHRvb2x0aXAuXG4gICAqIFRoaXMgcHJvcCB3b24ndCBpbXBhY3QgdGhlIGxlYXZlIHRvdWNoIGRlbGF5IChgbGVhdmVUb3VjaERlbGF5YCkuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGxlYXZlRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgdXNlciBzdG9wcyB0b3VjaGluZyBhbiBlbGVtZW50IGJlZm9yZSBoaWRpbmcgdGhlIHRvb2x0aXAuXG4gICAqIEBkZWZhdWx0IDE1MDBcbiAgICovXG4gIGxlYXZlVG91Y2hEZWxheTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnR9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3Blbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBvbk9wZW46IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIHNob3duLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUb29sdGlwIHBsYWNlbWVudC5cbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIHBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tLWVuZCcsICdib3R0b20tc3RhcnQnLCAnYm90dG9tJywgJ2xlZnQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdCcsICdyaWdodC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAndG9wLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcG9wcGVyLlxuICAgKiBAZGVmYXVsdCBQb3BwZXJcbiAgICovXG4gIFBvcHBlckNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BQb3BwZXJgXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcHBlci8pIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBQb3BwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcnJvdzogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBwb3BwZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9vbHRpcDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0cmFuc2l0aW9uOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXJyb3c6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBwb3BwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICB0b29sdGlwOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgdHJhbnNpdGlvbjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVG9vbHRpcCB0aXRsZS4gWmVyby1sZW5ndGggdGl0bGVzIHN0cmluZywgdW5kZWZpbmVkLCBudWxsIGFuZCBmYWxzZSBhcmUgbmV2ZXIgZGlzcGxheWVkLlxuICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgdHJhbnNpdGlvbi5cbiAgICogW0ZvbGxvdyB0aGlzIGd1aWRlXSgvbWF0ZXJpYWwtdWkvdHJhbnNpdGlvbnMvI3RyYW5zaXRpb25jb21wb25lbnQtcHJvcCkgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgR3Jvd1xuICAgKi9cbiAgVHJhbnNpdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXA7IiwiLy8gc3JjL3V0aWxzL2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UudHNcbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gYE1pbmlmaWVkIFJlZHV4IGVycm9yICMke2NvZGV9OyB2aXNpdCBodHRwczovL3JlZHV4LmpzLm9yZy9FcnJvcnM/Y29kZT0ke2NvZGV9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuIGA7XG59XG5cbi8vIHNyYy91dGlscy9zeW1ib2wtb2JzZXJ2YWJsZS50c1xudmFyICQkb2JzZXJ2YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCIpKCk7XG52YXIgc3ltYm9sX29ic2VydmFibGVfZGVmYXVsdCA9ICQkb2JzZXJ2YWJsZTtcblxuLy8gc3JjL3V0aWxzL2FjdGlvblR5cGVzLnRzXG52YXIgcmFuZG9tU3RyaW5nID0gKCkgPT4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KFwiXCIpLmpvaW4oXCIuXCIpO1xudmFyIEFjdGlvblR5cGVzID0ge1xuICBJTklUOiBgQEByZWR1eC9JTklUJHsvKiBAX19QVVJFX18gKi8gcmFuZG9tU3RyaW5nKCl9YCxcbiAgUkVQTEFDRTogYEBAcmVkdXgvUkVQTEFDRSR7LyogQF9fUFVSRV9fICovIHJhbmRvbVN0cmluZygpfWAsXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiAoKSA9PiBgQEByZWR1eC9QUk9CRV9VTktOT1dOX0FDVElPTiR7cmFuZG9tU3RyaW5nKCl9YFxufTtcbnZhciBhY3Rpb25UeXBlc19kZWZhdWx0ID0gQWN0aW9uVHlwZXM7XG5cbi8vIHNyYy91dGlscy9pc1BsYWluT2JqZWN0LnRzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBvYmogPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBsZXQgcHJvdG8gPSBvYmo7XG4gIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9PSBudWxsKSB7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG8gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IG51bGw7XG59XG5cbi8vIHNyYy91dGlscy9raW5kT2YudHNcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMClcbiAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcInN5bWJvbFwiOlxuICAgIGNhc2UgXCJmdW5jdGlvblwiOiB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICByZXR1cm4gXCJhcnJheVwiO1xuICBpZiAoaXNEYXRlKHZhbCkpXG4gICAgcmV0dXJuIFwiZGF0ZVwiO1xuICBpZiAoaXNFcnJvcih2YWwpKVxuICAgIHJldHVybiBcImVycm9yXCI7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGN0b3JOYW1lKHZhbCk7XG4gIHN3aXRjaCAoY29uc3RydWN0b3JOYW1lKSB7XG4gICAgY2FzZSBcIlN5bWJvbFwiOlxuICAgIGNhc2UgXCJQcm9taXNlXCI6XG4gICAgY2FzZSBcIldlYWtNYXBcIjpcbiAgICBjYXNlIFwiV2Vha1NldFwiOlxuICAgIGNhc2UgXCJNYXBcIjpcbiAgICBjYXNlIFwiU2V0XCI6XG4gICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCJcIik7XG59XG5mdW5jdGlvbiBjdG9yTmFtZSh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwuY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiA/IHZhbC5jb25zdHJ1Y3Rvci5uYW1lIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRXJyb3IodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgdmFsLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIgJiYgdmFsLmNvbnN0cnVjdG9yICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3Iuc3RhY2tUcmFjZUxpbWl0ID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSlcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHZhbC5nZXREYXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIHZhbC5zZXREYXRlID09PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIGxldCB0eXBlT2ZWYWwgPSB0eXBlb2YgdmFsO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdHlwZU9mVmFsID0gbWluaUtpbmRPZih2YWwpO1xuICB9XG4gIHJldHVybiB0eXBlT2ZWYWw7XG59XG5cbi8vIHNyYy9jcmVhdGVTdG9yZS50c1xuZnVuY3Rpb24gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gIGlmICh0eXBlb2YgcmVkdWNlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMikgOiBgRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKHJlZHVjZXIpfSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGVuaGFuY2VyID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIGVuaGFuY2VyID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiBcIkl0IGxvb2tzIGxpa2UgeW91IGFyZSBwYXNzaW5nIHNldmVyYWwgc3RvcmUgZW5oYW5jZXJzIHRvIGNyZWF0ZVN0b3JlKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSW5zdGVhZCwgY29tcG9zZSB0aGVtIHRvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS5cIik7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB2b2lkIDA7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMSkgOiBgRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YoZW5oYW5jZXIpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cbiAgbGV0IGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgbGV0IGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICBsZXQgY3VycmVudExpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGxldCBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgbGV0IGxpc3RlbmVySWRDb3VudGVyID0gMDtcbiAgbGV0IGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcbiAgICBpZiAobmV4dExpc3RlbmVycyA9PT0gY3VycmVudExpc3RlbmVycykge1xuICAgICAgbmV4dExpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICBjdXJyZW50TGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyLCBrZXkpID0+IHtcbiAgICAgICAgbmV4dExpc3RlbmVycy5zZXQoa2V5LCBsaXN0ZW5lcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogXCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBUaGUgcmVkdWNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCB0aGUgc3RhdGUgYXMgYW4gYXJndW1lbnQuIFBhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNCkgOiBgRXhwZWN0ZWQgdGhlIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YobGlzdGVuZXIpfSdgKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogXCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLnN1YnNjcmliZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgbm90aWZpZWQgYWZ0ZXIgdGhlIHN0b3JlIGhhcyBiZWVuIHVwZGF0ZWQsIHN1YnNjcmliZSBmcm9tIGEgY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy5cIik7XG4gICAgfVxuICAgIGxldCBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBjb25zdCBsaXN0ZW5lcklkID0gbGlzdGVuZXJJZENvdW50ZXIrKztcbiAgICBuZXh0TGlzdGVuZXJzLnNldChsaXN0ZW5lcklkLCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiBcIllvdSBtYXkgbm90IHVuc3Vic2NyaWJlIGZyb20gYSBzdG9yZSBsaXN0ZW5lciB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy5cIik7XG4gICAgICB9XG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVySWQpO1xuICAgICAgY3VycmVudExpc3RlbmVycyA9IG51bGw7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBgQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIEluc3RlYWQsIHRoZSBhY3R1YWwgdHlwZSB3YXM6ICcke2tpbmRPZihhY3Rpb24pfScuIFlvdSBtYXkgbmVlZCB0byBhZGQgbWlkZGxld2FyZSB0byB5b3VyIHN0b3JlIHNldHVwIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBvdGhlciB2YWx1ZXMsIHN1Y2ggYXMgJ3JlZHV4LXRodW5rJyB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgZnVuY3Rpb25zLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjbWlkZGxld2FyZSBhbmQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTYtYXN5bmMtbG9naWMjdXNpbmctdGhlLXJlZHV4LXRodW5rLW1pZGRsZXdhcmUgZm9yIGV4YW1wbGVzLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTcpIDogYEFjdGlvbiBcInR5cGVcIiBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnJHtraW5kT2YoYWN0aW9uLnR5cGUpfScuIFZhbHVlIHdhczogJyR7YWN0aW9uLnR5cGV9JyAoc3RyaW5naWZpZWQpYCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg5KSA6IFwiUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLlwiKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xuICAgICAgY3VycmVudFN0YXRlID0gY3VycmVudFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XG4gICAgaWYgKHR5cGVvZiBuZXh0UmVkdWNlciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMCkgOiBgRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnJHtraW5kT2YobmV4dFJlZHVjZXIpfWApO1xuICAgIH1cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XG4gICAgY29uc3Qgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gXCJvYmplY3RcIiB8fCBvYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDExKSA6IGBFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKG9ic2VydmVyKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xuICAgICAgICAgIGNvbnN0IG9ic2VydmVyQXNPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgIGlmIChvYnNlcnZlckFzT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXJBc09ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBbc3ltYm9sX29ic2VydmFibGVfZGVmYXVsdF0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVFxuICB9KTtcbiAgY29uc3Qgc3RvcmUgPSB7XG4gICAgZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyLFxuICAgIFtzeW1ib2xfb2JzZXJ2YWJsZV9kZWZhdWx0XTogb2JzZXJ2YWJsZVxuICB9O1xuICByZXR1cm4gc3RvcmU7XG59XG5mdW5jdGlvbiBsZWdhY3lfY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gIHJldHVybiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xufVxuXG4vLyBzcmMvdXRpbHMvd2FybmluZy50c1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICB0cnkge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG5cbi8vIHNyYy9jb21iaW5lUmVkdWNlcnMudHNcbmZ1bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0ZSwgcmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIGNvbnN0IHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICBjb25zdCBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVCA/IFwicHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlXCIgOiBcInByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyXCI7XG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLlwiO1xuICB9XG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dFN0YXRlKSkge1xuICAgIHJldHVybiBgVGhlICR7YXJndW1lbnROYW1lfSBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFwiJHtraW5kT2YoaW5wdXRTdGF0ZSl9XCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czogXCIke3JlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpfVwiYDtcbiAgfVxuICBjb25zdCB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcigoa2V5KSA9PiAhcmVkdWNlcnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdW5leHBlY3RlZEtleUNhY2hlW2tleV0pO1xuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XSA9IHRydWU7XG4gIH0pO1xuICBpZiAoYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlc19kZWZhdWx0LlJFUExBQ0UpXG4gICAgcmV0dXJuO1xuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBgVW5leHBlY3RlZCAke3VuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDEgPyBcImtleXNcIiA6IFwia2V5XCJ9IFwiJHt1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKX1cIiBmb3VuZCBpbiAke2FyZ3VtZW50TmFtZX0uIEV4cGVjdGVkIHRvIGZpbmQgb25lIG9mIHRoZSBrbm93biByZWR1Y2VyIGtleXMgaW5zdGVhZDogXCIke3JlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpfVwiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLmA7XG4gIH1cbn1cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuSU5JVFxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBgVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcIiR7a2V5fVwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIElmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIHlvdSBjYW4gdXNlIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVkdWNlcih2b2lkIDAsIHtcbiAgICAgIHR5cGU6IGFjdGlvblR5cGVzX2RlZmF1bHQuUFJPQkVfVU5LTk9XTl9BQ1RJT04oKVxuICAgIH0pID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBgVGhlIHNsaWNlIHJlZHVjZXIgZm9yIGtleSBcIiR7a2V5fVwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIERvbid0IHRyeSB0byBoYW5kbGUgJyR7YWN0aW9uVHlwZXNfZGVmYXVsdC5JTklUfScgb3Igb3RoZXIgYWN0aW9ucyBpbiBcInJlZHV4LypcIiBuYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB1bmxlc3MgaXQgaXMgdW5kZWZpbmVkLCBpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuYCk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICBjb25zdCByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgY29uc3QgZmluYWxSZWR1Y2VycyA9IHt9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gcmVkdWNlcktleXNbaV07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHdhcm5pbmcoYE5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuICBjb25zdCBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7XG4gIGxldCB1bmV4cGVjdGVkS2V5Q2FjaGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuICBsZXQgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgdHJ5IHtcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUgPSB7fSwgYWN0aW9uKSB7XG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tpXTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW2tleV07XG4gICAgICBjb25zdCBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVba2V5XTtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IGBXaGVuIGNhbGxlZCB3aXRoIGFuIGFjdGlvbiBvZiB0eXBlICR7YWN0aW9uVHlwZSA/IGBcIiR7U3RyaW5nKGFjdGlvblR5cGUpfVwiYCA6IFwiKHVua25vd24gdHlwZSlcIn0sIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke2tleX1cIiByZXR1cm5lZCB1bmRlZmluZWQuIFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICBuZXh0U3RhdGVba2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGg7XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuLy8gc3JjL2JpbmRBY3Rpb25DcmVhdG9ycy50c1xuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh0aGlzLCBhcmdzKSk7XG4gIH07XG59XG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09IFwib2JqZWN0XCIgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBgYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBidXQgaW5zdGVhZCByZWNlaXZlZDogJyR7a2luZE9mKGFjdGlvbkNyZWF0b3JzKX0nLiBEaWQgeW91IHdyaXRlIFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cIiBpbnN0ZWFkIG9mIFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiP2ApO1xuICB9XG4gIGNvbnN0IGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICBjb25zdCBhY3Rpb25DcmVhdG9yID0gYWN0aW9uQ3JlYXRvcnNba2V5XTtcbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLy8gc3JjL2NvbXBvc2UudHNcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uZnVuY3MpIHtcbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYXJnKSA9PiBhcmc7XG4gIH1cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmdW5jc1swXTtcbiAgfVxuICByZXR1cm4gZnVuY3MucmVkdWNlKChhLCBiKSA9PiAoLi4uYXJncykgPT4gYShiKC4uLmFyZ3MpKSk7XG59XG5cbi8vIHNyYy9hcHBseU1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSguLi5taWRkbGV3YXJlcykge1xuICByZXR1cm4gKGNyZWF0ZVN0b3JlMikgPT4gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZTIocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xuICAgIGxldCBkaXNwYXRjaCA9ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE1KSA6IFwiRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICBnZXRTdGF0ZTogc3RvcmUuZ2V0U3RhdGUsXG4gICAgICBkaXNwYXRjaDogKGFjdGlvbiwgLi4uYXJncykgPT4gZGlzcGF0Y2goYWN0aW9uLCAuLi5hcmdzKVxuICAgIH07XG4gICAgY29uc3QgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoKG1pZGRsZXdhcmUpID0+IG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSkpO1xuICAgIGRpc3BhdGNoID0gY29tcG9zZSguLi5jaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdG9yZSxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcbn1cblxuLy8gc3JjL3V0aWxzL2lzQWN0aW9uLnRzXG5mdW5jdGlvbiBpc0FjdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IHtcbiAgYWN0aW9uVHlwZXNfZGVmYXVsdCBhcyBfX0RPX05PVF9VU0VfX0FjdGlvblR5cGVzLFxuICBhcHBseU1pZGRsZXdhcmUsXG4gIGJpbmRBY3Rpb25DcmVhdG9ycyxcbiAgY29tYmluZVJlZHVjZXJzLFxuICBjb21wb3NlLFxuICBjcmVhdGVTdG9yZSxcbiAgaXNBY3Rpb24sXG4gIGlzUGxhaW5PYmplY3QsXG4gIGxlZ2FjeV9jcmVhdGVTdG9yZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4Lm1qcy5tYXAiLCIvLyBzcmMvaW5kZXgudHNcbmZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSAoeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gYWN0aW9uKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gIH07XG4gIHJldHVybiBtaWRkbGV3YXJlO1xufVxudmFyIHRodW5rID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKCk7XG52YXIgd2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQge1xuICB0aHVuayxcbiAgd2l0aEV4dHJhQXJndW1lbnRcbn07XG4iLCIvLyBzcmMvdXRpbHMvZW52LnRzXG52YXIgTk9USElORyA9IFN5bWJvbC5mb3IoXCJpbW1lci1ub3RoaW5nXCIpO1xudmFyIERSQUZUQUJMRSA9IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIik7XG52YXIgRFJBRlRfU1RBVEUgPSBTeW1ib2wuZm9yKFwiaW1tZXItc3RhdGVcIik7XG5cbi8vIHNyYy91dGlscy9lcnJvcnMudHNcbnZhciBlcnJvcnMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBbXG4gIC8vIEFsbCBlcnJvciBjb2Rlcywgc3RhcnRpbmcgYnkgMDpcbiAgZnVuY3Rpb24ocGx1Z2luKSB7XG4gICAgcmV0dXJuIGBUaGUgcGx1Z2luIGZvciAnJHtwbHVnaW59JyBoYXMgbm90IGJlZW4gbG9hZGVkIGludG8gSW1tZXIuIFRvIGVuYWJsZSB0aGUgcGx1Z2luLCBpbXBvcnQgYW5kIGNhbGwgXFxgZW5hYmxlJHtwbHVnaW59KClcXGAgd2hlbiBpbml0aWFsaXppbmcgeW91ciBhcHBsaWNhdGlvbi5gO1xuICB9LFxuICBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBgcHJvZHVjZSBjYW4gb25seSBiZSBjYWxsZWQgb24gdGhpbmdzIHRoYXQgYXJlIGRyYWZ0YWJsZTogcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBNYXAsIFNldCBvciBjbGFzc2VzIHRoYXQgYXJlIG1hcmtlZCB3aXRoICdbaW1tZXJhYmxlXTogdHJ1ZScuIEdvdCAnJHt0aGluZ30nYDtcbiAgfSxcbiAgXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuICBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIFwiQ2Fubm90IHVzZSBhIHByb3h5IHRoYXQgaGFzIGJlZW4gcmV2b2tlZC4gRGlkIHlvdSBwYXNzIGFuIG9iamVjdCBmcm9tIGluc2lkZSBhbiBpbW1lciBmdW5jdGlvbiB0byBhbiBhc3luYyBwcm9jZXNzPyBcIiArIGRhdGE7XG4gIH0sXG4gIFwiQW4gaW1tZXIgcHJvZHVjZXIgcmV0dXJuZWQgYSBuZXcgdmFsdWUgKmFuZCogbW9kaWZpZWQgaXRzIGRyYWZ0LiBFaXRoZXIgcmV0dXJuIGEgbmV3IHZhbHVlICpvciogbW9kaWZ5IHRoZSBkcmFmdC5cIixcbiAgXCJJbW1lciBmb3JiaWRzIGNpcmN1bGFyIHJlZmVyZW5jZXNcIixcbiAgXCJUaGUgZmlyc3Qgb3Igc2Vjb25kIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb25cIixcbiAgXCJUaGUgdGhpcmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWRcIixcbiAgXCJGaXJzdCBhcmd1bWVudCB0byBgY3JlYXRlRHJhZnRgIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGFuIGFycmF5LCBvciBhbiBpbW1lcmFibGUgb2JqZWN0XCIsXG4gIFwiRmlyc3QgYXJndW1lbnQgdG8gYGZpbmlzaERyYWZ0YCBtdXN0IGJlIGEgZHJhZnQgcmV0dXJuZWQgYnkgYGNyZWF0ZURyYWZ0YFwiLFxuICBmdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWA7XG4gIH0sXG4gIFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcbiAgXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuICBcIkltbWVyIG9ubHkgc3VwcG9ydHMgZGVsZXRpbmcgYXJyYXkgaW5kaWNlc1wiLFxuICBcIkltbWVyIG9ubHkgc3VwcG9ydHMgc2V0dGluZyBhcnJheSBpbmRpY2VzIGFuZCB0aGUgJ2xlbmd0aCcgcHJvcGVydHlcIixcbiAgZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gYCdvcmlnaW5hbCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YDtcbiAgfVxuICAvLyBOb3RlOiBpZiBtb3JlIGVycm9ycyBhcmUgYWRkZWQsIHRoZSBlcnJvck9mZnNldCBpbiBQYXRjaGVzLnRzIHNob3VsZCBiZSBpbmNyZWFzZWRcbiAgLy8gU2VlIFBhdGNoZXMudHMgZm9yIGFkZGl0aW9uYWwgZXJyb3JzXG5dIDogW107XG5mdW5jdGlvbiBkaWUoZXJyb3IsIC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnN0IGUgPSBlcnJvcnNbZXJyb3JdO1xuICAgIGNvbnN0IG1zZyA9IHR5cGVvZiBlID09PSBcImZ1bmN0aW9uXCIgPyBlLmFwcGx5KG51bGwsIGFyZ3MpIDogZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiAke2Vycm9yfS4gRnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZmBcbiAgKTtcbn1cblxuLy8gc3JjL3V0aWxzL2NvbW1vbi50c1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuZnVuY3Rpb24gaXNEcmFmdCh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXTtcbn1cbmZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgISF2YWx1ZVtEUkFGVEFCTEVdIHx8ICEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8IGlzTWFwKHZhbHVlKSB8fCBpc1NldCh2YWx1ZSk7XG59XG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKTtcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgQ3RvciA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICBpZiAoQ3RvciA9PT0gT2JqZWN0KVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gXCJmdW5jdGlvblwiICYmIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5mdW5jdGlvbiBvcmlnaW5hbCh2YWx1ZSkge1xuICBpZiAoIWlzRHJhZnQodmFsdWUpKVxuICAgIGRpZSgxNSwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfO1xufVxuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXIpIHtcbiAgaWYgKGdldEFyY2h0eXBlKG9iaikgPT09IDAgLyogT2JqZWN0ICovKSB7XG4gICAgUmVmbGVjdC5vd25LZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpdGVyKGtleSwgb2JqW2tleV0sIG9iaik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqLmZvckVhY2goKGVudHJ5LCBpbmRleCkgPT4gaXRlcihpbmRleCwgZW50cnksIG9iaikpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRBcmNodHlwZSh0aGluZykge1xuICBjb25zdCBzdGF0ZSA9IHRoaW5nW0RSQUZUX1NUQVRFXTtcbiAgcmV0dXJuIHN0YXRlID8gc3RhdGUudHlwZV8gOiBBcnJheS5pc0FycmF5KHRoaW5nKSA/IDEgLyogQXJyYXkgKi8gOiBpc01hcCh0aGluZykgPyAyIC8qIE1hcCAqLyA6IGlzU2V0KHRoaW5nKSA/IDMgLyogU2V0ICovIDogMCAvKiBPYmplY3QgKi87XG59XG5mdW5jdGlvbiBoYXModGhpbmcsIHByb3ApIHtcbiAgcmV0dXJuIGdldEFyY2h0eXBlKHRoaW5nKSA9PT0gMiAvKiBNYXAgKi8gPyB0aGluZy5oYXMocHJvcCkgOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpbmcsIHByb3ApO1xufVxuZnVuY3Rpb24gZ2V0KHRoaW5nLCBwcm9wKSB7XG4gIHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IDIgLyogTWFwICovID8gdGhpbmcuZ2V0KHByb3ApIDogdGhpbmdbcHJvcF07XG59XG5mdW5jdGlvbiBzZXQodGhpbmcsIHByb3BPck9sZFZhbHVlLCB2YWx1ZSkge1xuICBjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpO1xuICBpZiAodCA9PT0gMiAvKiBNYXAgKi8pXG4gICAgdGhpbmcuc2V0KHByb3BPck9sZFZhbHVlLCB2YWx1ZSk7XG4gIGVsc2UgaWYgKHQgPT09IDMgLyogU2V0ICovKSB7XG4gICAgdGhpbmcuYWRkKHZhbHVlKTtcbiAgfSBlbHNlXG4gICAgdGhpbmdbcHJvcE9yT2xkVmFsdWVdID0gdmFsdWU7XG59XG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTWFwKHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgTWFwO1xufVxuZnVuY3Rpb24gaXNTZXQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBTZXQ7XG59XG5mdW5jdGlvbiBsYXRlc3Qoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmNvcHlfIHx8IHN0YXRlLmJhc2VfO1xufVxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZSwgc3RyaWN0KSB7XG4gIGlmIChpc01hcChiYXNlKSkge1xuICAgIHJldHVybiBuZXcgTWFwKGJhc2UpO1xuICB9XG4gIGlmIChpc1NldChiYXNlKSkge1xuICAgIHJldHVybiBuZXcgU2V0KGJhc2UpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2UpKVxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiYXNlKTtcbiAgY29uc3QgaXNQbGFpbiA9IGlzUGxhaW5PYmplY3QoYmFzZSk7XG4gIGlmIChzdHJpY3QgPT09IHRydWUgfHwgc3RyaWN0ID09PSBcImNsYXNzX29ubHlcIiAmJiAhaXNQbGFpbikge1xuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYmFzZSk7XG4gICAgZGVsZXRlIGRlc2NyaXB0b3JzW0RSQUZUX1NUQVRFXTtcbiAgICBsZXQga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhkZXNjcmlwdG9ycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV07XG4gICAgICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVzYy53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIGRlc2MuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcbiAgICAgICAgZGVzY3JpcHRvcnNba2V5XSA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgLy8gY291bGQgbGl2ZSB3aXRoICEhZGVzYy5zZXQgYXMgd2VsbCBoZXJlLi4uXG4gICAgICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuICAgICAgICAgIHZhbHVlOiBiYXNlW2tleV1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm90byA9IGdldFByb3RvdHlwZU9mKGJhc2UpO1xuICAgIGlmIChwcm90byAhPT0gbnVsbCAmJiBpc1BsYWluKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlIH07XG4gICAgfVxuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgYmFzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZyZWV6ZShvYmosIGRlZXAgPSBmYWxzZSkge1xuICBpZiAoaXNGcm96ZW4ob2JqKSB8fCBpc0RyYWZ0KG9iaikgfHwgIWlzRHJhZnRhYmxlKG9iaikpXG4gICAgcmV0dXJuIG9iajtcbiAgaWYgKGdldEFyY2h0eXBlKG9iaikgPiAxKSB7XG4gICAgb2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zO1xuICB9XG4gIE9iamVjdC5mcmVlemUob2JqKTtcbiAgaWYgKGRlZXApXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IGZyZWV6ZSh2YWx1ZSwgdHJ1ZSkpO1xuICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zKCkge1xuICBkaWUoMik7XG59XG5mdW5jdGlvbiBpc0Zyb3plbihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5pc0Zyb3plbihvYmopO1xufVxuXG4vLyBzcmMvdXRpbHMvcGx1Z2lucy50c1xudmFyIHBsdWdpbnMgPSB7fTtcbmZ1bmN0aW9uIGdldFBsdWdpbihwbHVnaW5LZXkpIHtcbiAgY29uc3QgcGx1Z2luID0gcGx1Z2luc1twbHVnaW5LZXldO1xuICBpZiAoIXBsdWdpbikge1xuICAgIGRpZSgwLCBwbHVnaW5LZXkpO1xuICB9XG4gIHJldHVybiBwbHVnaW47XG59XG5mdW5jdGlvbiBsb2FkUGx1Z2luKHBsdWdpbktleSwgaW1wbGVtZW50YXRpb24pIHtcbiAgaWYgKCFwbHVnaW5zW3BsdWdpbktleV0pXG4gICAgcGx1Z2luc1twbHVnaW5LZXldID0gaW1wbGVtZW50YXRpb247XG59XG5cbi8vIHNyYy9jb3JlL3Njb3BlLnRzXG52YXIgY3VycmVudFNjb3BlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuICByZXR1cm4gY3VycmVudFNjb3BlO1xufVxuZnVuY3Rpb24gY3JlYXRlU2NvcGUocGFyZW50XywgaW1tZXJfKSB7XG4gIHJldHVybiB7XG4gICAgZHJhZnRzXzogW10sXG4gICAgcGFyZW50XyxcbiAgICBpbW1lcl8sXG4gICAgLy8gV2hlbmV2ZXIgdGhlIG1vZGlmaWVkIGRyYWZ0IGNvbnRhaW5zIGEgZHJhZnQgZnJvbSBhbm90aGVyIHNjb3BlLCB3ZVxuICAgIC8vIG5lZWQgdG8gcHJldmVudCBhdXRvLWZyZWV6aW5nIHNvIHRoZSB1bm93bmVkIGRyYWZ0IGNhbiBiZSBmaW5hbGl6ZWQuXG4gICAgY2FuQXV0b0ZyZWV6ZV86IHRydWUsXG4gICAgdW5maW5hbGl6ZWREcmFmdHNfOiAwXG4gIH07XG59XG5mdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcikge1xuICBpZiAocGF0Y2hMaXN0ZW5lcikge1xuICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIik7XG4gICAgc2NvcGUucGF0Y2hlc18gPSBbXTtcbiAgICBzY29wZS5pbnZlcnNlUGF0Y2hlc18gPSBbXTtcbiAgICBzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHJldm9rZVNjb3BlKHNjb3BlKSB7XG4gIGxlYXZlU2NvcGUoc2NvcGUpO1xuICBzY29wZS5kcmFmdHNfLmZvckVhY2gocmV2b2tlRHJhZnQpO1xuICBzY29wZS5kcmFmdHNfID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGxlYXZlU2NvcGUoc2NvcGUpIHtcbiAgaWYgKHNjb3BlID09PSBjdXJyZW50U2NvcGUpIHtcbiAgICBjdXJyZW50U2NvcGUgPSBzY29wZS5wYXJlbnRfO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyMikge1xuICByZXR1cm4gY3VycmVudFNjb3BlID0gY3JlYXRlU2NvcGUoY3VycmVudFNjb3BlLCBpbW1lcjIpO1xufVxuZnVuY3Rpb24gcmV2b2tlRHJhZnQoZHJhZnQpIHtcbiAgY29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV07XG4gIGlmIChzdGF0ZS50eXBlXyA9PT0gMCAvKiBPYmplY3QgKi8gfHwgc3RhdGUudHlwZV8gPT09IDEgLyogQXJyYXkgKi8pXG4gICAgc3RhdGUucmV2b2tlXygpO1xuICBlbHNlXG4gICAgc3RhdGUucmV2b2tlZF8gPSB0cnVlO1xufVxuXG4vLyBzcmMvY29yZS9maW5hbGl6ZS50c1xuZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKSB7XG4gIHNjb3BlLnVuZmluYWxpemVkRHJhZnRzXyA9IHNjb3BlLmRyYWZ0c18ubGVuZ3RoO1xuICBjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfWzBdO1xuICBjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB2b2lkIDAgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnQ7XG4gIGlmIChpc1JlcGxhY2VkKSB7XG4gICAgaWYgKGJhc2VEcmFmdFtEUkFGVF9TVEFURV0ubW9kaWZpZWRfKSB7XG4gICAgICByZXZva2VTY29wZShzY29wZSk7XG4gICAgICBkaWUoNCk7XG4gICAgfVxuICAgIGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG4gICAgICByZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KTtcbiAgICAgIGlmICghc2NvcGUucGFyZW50XylcbiAgICAgICAgbWF5YmVGcmVlemUoc2NvcGUsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmIChzY29wZS5wYXRjaGVzXykge1xuICAgICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG4gICAgICAgIGJhc2VEcmFmdFtEUkFGVF9TVEFURV0uYmFzZV8sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgc2NvcGUucGF0Y2hlc18sXG4gICAgICAgIHNjb3BlLmludmVyc2VQYXRjaGVzX1xuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gZmluYWxpemUoc2NvcGUsIGJhc2VEcmFmdCwgW10pO1xuICB9XG4gIHJldm9rZVNjb3BlKHNjb3BlKTtcbiAgaWYgKHNjb3BlLnBhdGNoZXNfKSB7XG4gICAgc2NvcGUucGF0Y2hMaXN0ZW5lcl8oc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplKHJvb3RTY29wZSwgdmFsdWUsIHBhdGgpIHtcbiAgaWYgKGlzRnJvemVuKHZhbHVlKSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHN0YXRlID0gdmFsdWVbRFJBRlRfU1RBVEVdO1xuICBpZiAoIXN0YXRlKSB7XG4gICAgZWFjaChcbiAgICAgIHZhbHVlLFxuICAgICAgKGtleSwgY2hpbGRWYWx1ZSkgPT4gZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHN0YXRlLCB2YWx1ZSwga2V5LCBjaGlsZFZhbHVlLCBwYXRoKVxuICAgICk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChzdGF0ZS5zY29wZV8gIT09IHJvb3RTY29wZSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG4gICAgbWF5YmVGcmVlemUocm9vdFNjb3BlLCBzdGF0ZS5iYXNlXywgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0YXRlLmJhc2VfO1xuICB9XG4gIGlmICghc3RhdGUuZmluYWxpemVkXykge1xuICAgIHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlO1xuICAgIHN0YXRlLnNjb3BlXy51bmZpbmFsaXplZERyYWZ0c18tLTtcbiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZS5jb3B5XztcbiAgICBsZXQgcmVzdWx0RWFjaCA9IHJlc3VsdDtcbiAgICBsZXQgaXNTZXQyID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlLnR5cGVfID09PSAzIC8qIFNldCAqLykge1xuICAgICAgcmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KTtcbiAgICAgIHJlc3VsdC5jbGVhcigpO1xuICAgICAgaXNTZXQyID0gdHJ1ZTtcbiAgICB9XG4gICAgZWFjaChcbiAgICAgIHJlc3VsdEVhY2gsXG4gICAgICAoa2V5LCBjaGlsZFZhbHVlKSA9PiBmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldDIpXG4gICAgKTtcbiAgICBtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpO1xuICAgIGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuICAgICAgZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcm9vdFNjb3BlLnBhdGNoZXNfLFxuICAgICAgICByb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhdGUuY29weV87XG59XG5mdW5jdGlvbiBmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgcGFyZW50U3RhdGUsIHRhcmdldE9iamVjdCwgcHJvcCwgY2hpbGRWYWx1ZSwgcm9vdFBhdGgsIHRhcmdldElzU2V0KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KVxuICAgIGRpZSg1KTtcbiAgaWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcbiAgICBjb25zdCBwYXRoID0gcm9vdFBhdGggJiYgcGFyZW50U3RhdGUgJiYgcGFyZW50U3RhdGUudHlwZV8gIT09IDMgLyogU2V0ICovICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG4gICAgIWhhcyhwYXJlbnRTdGF0ZS5hc3NpZ25lZF8sIHByb3ApID8gcm9vdFBhdGguY29uY2F0KHByb3ApIDogdm9pZCAwO1xuICAgIGNvbnN0IHJlcyA9IGZpbmFsaXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSwgcGF0aCk7XG4gICAgc2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKTtcbiAgICBpZiAoaXNEcmFmdChyZXMpKSB7XG4gICAgICByb290U2NvcGUuY2FuQXV0b0ZyZWV6ZV8gPSBmYWxzZTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICh0YXJnZXRJc1NldCkge1xuICAgIHRhcmdldE9iamVjdC5hZGQoY2hpbGRWYWx1ZSk7XG4gIH1cbiAgaWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuICAgIGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpO1xuICAgIGlmICgoIXBhcmVudFN0YXRlIHx8ICFwYXJlbnRTdGF0ZS5zY29wZV8ucGFyZW50XykgJiYgdHlwZW9mIHByb3AgIT09IFwic3ltYm9sXCIgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRhcmdldE9iamVjdCwgcHJvcCkpXG4gICAgICBtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBtYXliZUZyZWV6ZShzY29wZSwgdmFsdWUsIGRlZXAgPSBmYWxzZSkge1xuICBpZiAoIXNjb3BlLnBhcmVudF8gJiYgc2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHNjb3BlLmNhbkF1dG9GcmVlemVfKSB7XG4gICAgZnJlZXplKHZhbHVlLCBkZWVwKTtcbiAgfVxufVxuXG4vLyBzcmMvY29yZS9wcm94eS50c1xuZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eShiYXNlLCBwYXJlbnQpIHtcbiAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmFzZSk7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHR5cGVfOiBpc0FycmF5ID8gMSAvKiBBcnJheSAqLyA6IDAgLyogT2JqZWN0ICovLFxuICAgIC8vIFRyYWNrIHdoaWNoIHByb2R1Y2UgY2FsbCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICBzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICAvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cbiAgICBtb2RpZmllZF86IGZhbHNlLFxuICAgIC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cbiAgICBmaW5hbGl6ZWRfOiBmYWxzZSxcbiAgICAvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuICAgIGFzc2lnbmVkXzoge30sXG4gICAgLy8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cbiAgICBwYXJlbnRfOiBwYXJlbnQsXG4gICAgLy8gVGhlIGJhc2Ugc3RhdGUuXG4gICAgYmFzZV86IGJhc2UsXG4gICAgLy8gVGhlIGJhc2UgcHJveHkuXG4gICAgZHJhZnRfOiBudWxsLFxuICAgIC8vIHNldCBiZWxvd1xuICAgIC8vIFRoZSBiYXNlIGNvcHkgd2l0aCBhbnkgdXBkYXRlZCB2YWx1ZXMuXG4gICAgY29weV86IG51bGwsXG4gICAgLy8gQ2FsbGVkIGJ5IHRoZSBgcHJvZHVjZWAgZnVuY3Rpb24uXG4gICAgcmV2b2tlXzogbnVsbCxcbiAgICBpc01hbnVhbF86IGZhbHNlXG4gIH07XG4gIGxldCB0YXJnZXQgPSBzdGF0ZTtcbiAgbGV0IHRyYXBzID0gb2JqZWN0VHJhcHM7XG4gIGlmIChpc0FycmF5KSB7XG4gICAgdGFyZ2V0ID0gW3N0YXRlXTtcbiAgICB0cmFwcyA9IGFycmF5VHJhcHM7XG4gIH1cbiAgY29uc3QgeyByZXZva2UsIHByb3h5IH0gPSBQcm94eS5yZXZvY2FibGUodGFyZ2V0LCB0cmFwcyk7XG4gIHN0YXRlLmRyYWZ0XyA9IHByb3h5O1xuICBzdGF0ZS5yZXZva2VfID0gcmV2b2tlO1xuICByZXR1cm4gcHJveHk7XG59XG52YXIgb2JqZWN0VHJhcHMgPSB7XG4gIGdldChzdGF0ZSwgcHJvcCkge1xuICAgIGlmIChwcm9wID09PSBEUkFGVF9TVEFURSlcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICBjb25zdCBzb3VyY2UgPSBsYXRlc3Qoc3RhdGUpO1xuICAgIGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcbiAgICAgIHJldHVybiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZSwgc291cmNlLCBwcm9wKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF07XG4gICAgaWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApKSB7XG4gICAgICBwcmVwYXJlQ29weShzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGUuY29weV9bcHJvcF0gPSBjcmVhdGVQcm94eSh2YWx1ZSwgc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGhhcyhzdGF0ZSwgcHJvcCkge1xuICAgIHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSk7XG4gIH0sXG4gIG93bktleXMoc3RhdGUpIHtcbiAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKGxhdGVzdChzdGF0ZSkpO1xuICB9LFxuICBzZXQoc3RhdGUsIHByb3AsIHZhbHVlKSB7XG4gICAgY29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8obGF0ZXN0KHN0YXRlKSwgcHJvcCk7XG4gICAgaWYgKGRlc2M/LnNldCkge1xuICAgICAgZGVzYy5zZXQuY2FsbChzdGF0ZS5kcmFmdF8sIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuICAgICAgY29uc3QgY3VycmVudDIgPSBwZWVrKGxhdGVzdChzdGF0ZSksIHByb3ApO1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY3VycmVudDI/LltEUkFGVF9TVEFURV07XG4gICAgICBpZiAoY3VycmVudFN0YXRlICYmIGN1cnJlbnRTdGF0ZS5iYXNlXyA9PT0gdmFsdWUpIHtcbiAgICAgICAgc3RhdGUuY29weV9bcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzKHZhbHVlLCBjdXJyZW50MikgJiYgKHZhbHVlICE9PSB2b2lkIDAgfHwgaGFzKHN0YXRlLmJhc2VfLCBwcm9wKSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcHJlcGFyZUNvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29weV9bcHJvcF0gPT09IHZhbHVlICYmIC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIG5ldyBwcm9wcyB3aXRoIHZhbHVlICd1bmRlZmluZWQnXG4gICAgKHZhbHVlICE9PSB2b2lkIDAgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykgfHwgLy8gc3BlY2lhbCBjYXNlOiBOYU5cbiAgICBOdW1iZXIuaXNOYU4odmFsdWUpICYmIE51bWJlci5pc05hTihzdGF0ZS5jb3B5X1twcm9wXSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBzdGF0ZS5jb3B5X1twcm9wXSA9IHZhbHVlO1xuICAgIHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGRlbGV0ZVByb3BlcnR5KHN0YXRlLCBwcm9wKSB7XG4gICAgaWYgKHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApICE9PSB2b2lkIDAgfHwgcHJvcCBpbiBzdGF0ZS5iYXNlXykge1xuICAgICAgc3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2U7XG4gICAgICBwcmVwYXJlQ29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF07XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb3B5Xykge1xuICAgICAgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgLy8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2VcbiAgLy8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcbiAgICBjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSk7XG4gICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG93bmVyLCBwcm9wKTtcbiAgICBpZiAoIWRlc2MpXG4gICAgICByZXR1cm4gZGVzYztcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHN0YXRlLnR5cGVfICE9PSAxIC8qIEFycmF5ICovIHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG4gICAgICBlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG4gICAgICB2YWx1ZTogb3duZXJbcHJvcF1cbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eSgpIHtcbiAgICBkaWUoMTEpO1xuICB9LFxuICBnZXRQcm90b3R5cGVPZihzdGF0ZSkge1xuICAgIHJldHVybiBnZXRQcm90b3R5cGVPZihzdGF0ZS5iYXNlXyk7XG4gIH0sXG4gIHNldFByb3RvdHlwZU9mKCkge1xuICAgIGRpZSgxMik7XG4gIH1cbn07XG52YXIgYXJyYXlUcmFwcyA9IHt9O1xuZWFjaChvYmplY3RUcmFwcywgKGtleSwgZm4pID0+IHtcbiAgYXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG4gICAgYXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSk7XG5hcnJheVRyYXBzLmRlbGV0ZVByb3BlcnR5ID0gZnVuY3Rpb24oc3RhdGUsIHByb3ApIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBpc05hTihwYXJzZUludChwcm9wKSkpXG4gICAgZGllKDEzKTtcbiAgcmV0dXJuIGFycmF5VHJhcHMuc2V0LmNhbGwodGhpcywgc3RhdGUsIHByb3AsIHZvaWQgMCk7XG59O1xuYXJyYXlUcmFwcy5zZXQgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3ApKSlcbiAgICBkaWUoMTQpO1xuICByZXR1cm4gb2JqZWN0VHJhcHMuc2V0LmNhbGwodGhpcywgc3RhdGVbMF0sIHByb3AsIHZhbHVlLCBzdGF0ZVswXSk7XG59O1xuZnVuY3Rpb24gcGVlayhkcmFmdCwgcHJvcCkge1xuICBjb25zdCBzdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXTtcbiAgY29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnQ7XG4gIHJldHVybiBzb3VyY2VbcHJvcF07XG59XG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZSwgc291cmNlLCBwcm9wKSB7XG4gIGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcCk7XG4gIHJldHVybiBkZXNjID8gYHZhbHVlYCBpbiBkZXNjID8gZGVzYy52YWx1ZSA6IChcbiAgICAvLyBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsIGNhc2UsIGlmIHRoZSBwcm9wIGlzIGEgZ2V0dGVyIGRlZmluZWQgYnkgdGhlXG4gICAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG4gICAgZGVzYy5nZXQ/LmNhbGwoc3RhdGUuZHJhZnRfKVxuICApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhzb3VyY2UsIHByb3ApIHtcbiAgaWYgKCEocHJvcCBpbiBzb3VyY2UpKVxuICAgIHJldHVybiB2b2lkIDA7XG4gIGxldCBwcm90byA9IGdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gIHdoaWxlIChwcm90bykge1xuICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wKTtcbiAgICBpZiAoZGVzYylcbiAgICAgIHJldHVybiBkZXNjO1xuICAgIHByb3RvID0gZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiB2b2lkIDA7XG59XG5mdW5jdGlvbiBtYXJrQ2hhbmdlZChzdGF0ZSkge1xuICBpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuICAgIHN0YXRlLm1vZGlmaWVkXyA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnBhcmVudF8pIHtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZUNvcHkoc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5jb3B5Xykge1xuICAgIHN0YXRlLmNvcHlfID0gc2hhbGxvd0NvcHkoXG4gICAgICBzdGF0ZS5iYXNlXyxcbiAgICAgIHN0YXRlLnNjb3BlXy5pbW1lcl8udXNlU3RyaWN0U2hhbGxvd0NvcHlfXG4gICAgKTtcbiAgfVxufVxuXG4vLyBzcmMvY29yZS9pbW1lckNsYXNzLnRzXG52YXIgSW1tZXIyID0gY2xhc3Mge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmF1dG9GcmVlemVfID0gdHJ1ZTtcbiAgICB0aGlzLnVzZVN0cmljdFNoYWxsb3dDb3B5XyA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFRoZSBgcHJvZHVjZWAgZnVuY3Rpb24gdGFrZXMgYSB2YWx1ZSBhbmQgYSBcInJlY2lwZSBmdW5jdGlvblwiICh3aG9zZVxuICAgICAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuICAgICAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICAgICAqIG9ubHkgZXZlciBhcHBsaWVkIHRvIGEgX19jb3B5X18gb2YgdGhlIGJhc2Ugc3RhdGUuXG4gICAgICpcbiAgICAgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAgICAgKiBmcm9tIHBhc3NpbmcgdGhlIHJlY2lwZSBmdW5jdGlvbiBldmVyeSB0aW1lLlxuICAgICAqXG4gICAgICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gICAgICogY29uc2lkZXJlZCB1bmNvcHlhYmxlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcGF0Y2hMaXN0ZW5lciAtIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdGhlIHBhdGNoZXMgcHJvZHVjZWQgaGVyZVxuICAgICAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICAgICAqL1xuICAgIHRoaXMucHJvZHVjZSA9IChiYXNlLCByZWNpcGUsIHBhdGNoTGlzdGVuZXIpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmFzZSA9IHJlY2lwZTtcbiAgICAgICAgcmVjaXBlID0gYmFzZTtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShiYXNlMiA9IGRlZmF1bHRCYXNlLCAuLi5hcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYucHJvZHVjZShiYXNlMiwgKGRyYWZ0KSA9PiByZWNpcGUuY2FsbCh0aGlzLCBkcmFmdCwgLi4uYXJncykpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZGllKDYpO1xuICAgICAgaWYgKHBhdGNoTGlzdGVuZXIgIT09IHZvaWQgMCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBkaWUoNyk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgaWYgKGlzRHJhZnRhYmxlKGJhc2UpKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKTtcbiAgICAgICAgY29uc3QgcHJveHkgPSBjcmVhdGVQcm94eShiYXNlLCB2b2lkIDApO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlY2lwZShwcm94eSk7XG4gICAgICAgICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoaGFzRXJyb3IpXG4gICAgICAgICAgICByZXZva2VTY29wZShzY29wZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGVhdmVTY29wZShzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdChyZXN1bHQsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWJhc2UgfHwgdHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVjaXBlKGJhc2UpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApXG4gICAgICAgICAgcmVzdWx0ID0gYmFzZTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gTk9USElORylcbiAgICAgICAgICByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIGlmICh0aGlzLmF1dG9GcmVlemVfKVxuICAgICAgICAgIGZyZWV6ZShyZXN1bHQsIHRydWUpO1xuICAgICAgICBpZiAocGF0Y2hMaXN0ZW5lcikge1xuICAgICAgICAgIGNvbnN0IHAgPSBbXTtcbiAgICAgICAgICBjb25zdCBpcCA9IFtdO1xuICAgICAgICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApO1xuICAgICAgICAgIHBhdGNoTGlzdGVuZXIocCwgaXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZGllKDEsIGJhc2UpO1xuICAgIH07XG4gICAgdGhpcy5wcm9kdWNlV2l0aFBhdGNoZXMgPSAoYmFzZSwgcmVjaXBlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gKHN0YXRlLCAuLi5hcmdzKSA9PiB0aGlzLnByb2R1Y2VXaXRoUGF0Y2hlcyhzdGF0ZSwgKGRyYWZ0KSA9PiBiYXNlKGRyYWZ0LCAuLi5hcmdzKSk7XG4gICAgICB9XG4gICAgICBsZXQgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXM7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2R1Y2UoYmFzZSwgcmVjaXBlLCAocCwgaXApID0+IHtcbiAgICAgICAgcGF0Y2hlcyA9IHA7XG4gICAgICAgIGludmVyc2VQYXRjaGVzID0gaXA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbcmVzdWx0LCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc107XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZz8uYXV0b0ZyZWV6ZSA9PT0gXCJib29sZWFuXCIpXG4gICAgICB0aGlzLnNldEF1dG9GcmVlemUoY29uZmlnLmF1dG9GcmVlemUpO1xuICAgIGlmICh0eXBlb2YgY29uZmlnPy51c2VTdHJpY3RTaGFsbG93Q29weSA9PT0gXCJib29sZWFuXCIpXG4gICAgICB0aGlzLnNldFVzZVN0cmljdFNoYWxsb3dDb3B5KGNvbmZpZy51c2VTdHJpY3RTaGFsbG93Q29weSk7XG4gIH1cbiAgY3JlYXRlRHJhZnQoYmFzZSkge1xuICAgIGlmICghaXNEcmFmdGFibGUoYmFzZSkpXG4gICAgICBkaWUoOCk7XG4gICAgaWYgKGlzRHJhZnQoYmFzZSkpXG4gICAgICBiYXNlID0gY3VycmVudChiYXNlKTtcbiAgICBjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcyk7XG4gICAgY29uc3QgcHJveHkgPSBjcmVhdGVQcm94eShiYXNlLCB2b2lkIDApO1xuICAgIHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlO1xuICAgIGxlYXZlU2NvcGUoc2NvcGUpO1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxuICBmaW5pc2hEcmFmdChkcmFmdCwgcGF0Y2hMaXN0ZW5lcikge1xuICAgIGNvbnN0IHN0YXRlID0gZHJhZnQgJiYgZHJhZnRbRFJBRlRfU1RBVEVdO1xuICAgIGlmICghc3RhdGUgfHwgIXN0YXRlLmlzTWFudWFsXylcbiAgICAgIGRpZSg5KTtcbiAgICBjb25zdCB7IHNjb3BlXzogc2NvcGUgfSA9IHN0YXRlO1xuICAgIHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKTtcbiAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdCh2b2lkIDAsIHNjb3BlKTtcbiAgfVxuICAvKipcbiAgICogUGFzcyB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgZnJlZXplIGFsbCBjb3BpZXMgY3JlYXRlZCBieSBJbW1lci5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgYXV0by1mcmVlemluZyBpcyBlbmFibGVkLlxuICAgKi9cbiAgc2V0QXV0b0ZyZWV6ZSh2YWx1ZSkge1xuICAgIHRoaXMuYXV0b0ZyZWV6ZV8gPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogUGFzcyB0cnVlIHRvIGVuYWJsZSBzdHJpY3Qgc2hhbGxvdyBjb3B5LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpbW1lciBkb2VzIG5vdCBjb3B5IHRoZSBvYmplY3QgZGVzY3JpcHRvcnMgc3VjaCBhcyBnZXR0ZXIsIHNldHRlciBhbmQgbm9uLWVudW1yYWJsZSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkodmFsdWUpIHtcbiAgICB0aGlzLnVzZVN0cmljdFNoYWxsb3dDb3B5XyA9IHZhbHVlO1xuICB9XG4gIGFwcGx5UGF0Y2hlcyhiYXNlLCBwYXRjaGVzKSB7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gcGF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcGF0Y2ggPSBwYXRjaGVzW2ldO1xuICAgICAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAwICYmIHBhdGNoLm9wID09PSBcInJlcGxhY2VcIikge1xuICAgICAgICBiYXNlID0gcGF0Y2gudmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICBwYXRjaGVzID0gcGF0Y2hlcy5zbGljZShpICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc187XG4gICAgaWYgKGlzRHJhZnQoYmFzZSkpIHtcbiAgICAgIHJldHVybiBhcHBseVBhdGNoZXNJbXBsKGJhc2UsIHBhdGNoZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9kdWNlKFxuICAgICAgYmFzZSxcbiAgICAgIChkcmFmdCkgPT4gYXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcbiAgICApO1xuICB9XG59O1xuZnVuY3Rpb24gY3JlYXRlUHJveHkodmFsdWUsIHBhcmVudCkge1xuICBjb25zdCBkcmFmdCA9IGlzTWFwKHZhbHVlKSA/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eU1hcF8odmFsdWUsIHBhcmVudCkgOiBpc1NldCh2YWx1ZSkgPyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlTZXRfKHZhbHVlLCBwYXJlbnQpIDogY3JlYXRlUHJveHlQcm94eSh2YWx1ZSwgcGFyZW50KTtcbiAgY29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCk7XG4gIHNjb3BlLmRyYWZ0c18ucHVzaChkcmFmdCk7XG4gIHJldHVybiBkcmFmdDtcbn1cblxuLy8gc3JjL2NvcmUvY3VycmVudC50c1xuZnVuY3Rpb24gY3VycmVudCh2YWx1ZSkge1xuICBpZiAoIWlzRHJhZnQodmFsdWUpKVxuICAgIGRpZSgxMCwgdmFsdWUpO1xuICByZXR1cm4gY3VycmVudEltcGwodmFsdWUpO1xufVxuZnVuY3Rpb24gY3VycmVudEltcGwodmFsdWUpIHtcbiAgaWYgKCFpc0RyYWZ0YWJsZSh2YWx1ZSkgfHwgaXNGcm96ZW4odmFsdWUpKVxuICAgIHJldHVybiB2YWx1ZTtcbiAgY29uc3Qgc3RhdGUgPSB2YWx1ZVtEUkFGVF9TVEFURV07XG4gIGxldCBjb3B5O1xuICBpZiAoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLm1vZGlmaWVkXylcbiAgICAgIHJldHVybiBzdGF0ZS5iYXNlXztcbiAgICBzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZTtcbiAgICBjb3B5ID0gc2hhbGxvd0NvcHkodmFsdWUsIHN0YXRlLnNjb3BlXy5pbW1lcl8udXNlU3RyaWN0U2hhbGxvd0NvcHlfKTtcbiAgfSBlbHNlIHtcbiAgICBjb3B5ID0gc2hhbGxvd0NvcHkodmFsdWUsIHRydWUpO1xuICB9XG4gIGVhY2goY29weSwgKGtleSwgY2hpbGRWYWx1ZSkgPT4ge1xuICAgIHNldChjb3B5LCBrZXksIGN1cnJlbnRJbXBsKGNoaWxkVmFsdWUpKTtcbiAgfSk7XG4gIGlmIChzdGF0ZSkge1xuICAgIHN0YXRlLmZpbmFsaXplZF8gPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gY29weTtcbn1cblxuLy8gc3JjL3BsdWdpbnMvcGF0Y2hlcy50c1xuZnVuY3Rpb24gZW5hYmxlUGF0Y2hlcygpIHtcbiAgY29uc3QgZXJyb3JPZmZzZXQgPSAxNjtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgJ1NldHMgY2Fubm90IGhhdmUgXCJyZXBsYWNlXCIgcGF0Y2hlcy4nLFxuICAgICAgZnVuY3Rpb24ob3ApIHtcbiAgICAgICAgcmV0dXJuIFwiVW5zdXBwb3J0ZWQgcGF0Y2ggb3BlcmF0aW9uOiBcIiArIG9wO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ2Fubm90IGFwcGx5IHBhdGNoLCBwYXRoIGRvZXNuJ3QgcmVzb2x2ZTogXCIgKyBwYXRoO1xuICAgICAgfSxcbiAgICAgIFwiUGF0Y2hpbmcgcmVzZXJ2ZWQgYXR0cmlidXRlcyBsaWtlIF9fcHJvdG9fXywgcHJvdG90eXBlIGFuZCBjb25zdHJ1Y3RvciBpcyBub3QgYWxsb3dlZFwiXG4gICAgKTtcbiAgfVxuICBjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCI7XG4gIGNvbnN0IEFERCA9IFwiYWRkXCI7XG4gIGNvbnN0IFJFTU9WRSA9IFwicmVtb3ZlXCI7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc18oc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcbiAgICAgIGNhc2UgMCAvKiBPYmplY3QgKi86XG4gICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGJhc2VQYXRoLFxuICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgaW52ZXJzZVBhdGNoZXNcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgMSAvKiBBcnJheSAqLzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlQXJyYXlQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpO1xuICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlU2V0UGF0Y2hlcyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgICBwYXRjaGVzLFxuICAgICAgICAgIGludmVyc2VQYXRjaGVzXG4gICAgICAgICk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBsZXQgeyBiYXNlXywgYXNzaWduZWRfIH0gPSBzdGF0ZTtcbiAgICBsZXQgY29weV8gPSBzdGF0ZS5jb3B5XztcbiAgICBpZiAoY29weV8ubGVuZ3RoIDwgYmFzZV8ubGVuZ3RoKSB7XG4gICAgICA7XG4gICAgICBbYmFzZV8sIGNvcHlfXSA9IFtjb3B5XywgYmFzZV9dO1xuICAgICAgW3BhdGNoZXMsIGludmVyc2VQYXRjaGVzXSA9IFtpbnZlcnNlUGF0Y2hlcywgcGF0Y2hlc107XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZV8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3NpZ25lZF9baV0gJiYgY29weV9baV0gIT09IGJhc2VfW2ldKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogUkVQTEFDRSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICAgIC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuICAgICAgICAgIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnB1c2goe1xuICAgICAgICAgIG9wOiBSRVBMQUNFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGJhc2VfW2ldKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGNvcHlfLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICBvcDogQURELFxuICAgICAgICBwYXRoLFxuICAgICAgICAvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgLy8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gY29weV8ubGVuZ3RoIC0gMTsgYmFzZV8ubGVuZ3RoIDw9IGk7IC0taSkge1xuICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaCh7XG4gICAgICAgIG9wOiBSRU1PVkUsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcykge1xuICAgIGNvbnN0IHsgYmFzZV8sIGNvcHlfIH0gPSBzdGF0ZTtcbiAgICBlYWNoKHN0YXRlLmFzc2lnbmVkXywgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQoY29weV8sIGtleSk7XG4gICAgICBjb25zdCBvcCA9ICFhc3NpZ25lZFZhbHVlID8gUkVNT1ZFIDogaGFzKGJhc2VfLCBrZXkpID8gUkVQTEFDRSA6IEFERDtcbiAgICAgIGlmIChvcmlnVmFsdWUgPT09IHZhbHVlICYmIG9wID09PSBSRVBMQUNFKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSk7XG4gICAgICBwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHsgb3AsIHBhdGggfSA6IHsgb3AsIHBhdGgsIHZhbHVlIH0pO1xuICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaChcbiAgICAgICAgb3AgPT09IEFERCA/IHsgb3A6IFJFTU9WRSwgcGF0aCB9IDogb3AgPT09IFJFTU9WRSA/IHsgb3A6IEFERCwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSkgfSA6IHsgb3A6IFJFUExBQ0UsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBsZXQgeyBiYXNlXywgY29weV8gfSA9IHN0YXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBiYXNlXy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFjb3B5Xy5oYXModmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogUkVNT1ZFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuICAgICAgICAgIG9wOiBBREQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9KTtcbiAgICBpID0gMDtcbiAgICBjb3B5Xy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFiYXNlXy5oYXModmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogQURELFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuICAgICAgICAgIG9wOiBSRU1PVkUsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oYmFzZVZhbHVlLCByZXBsYWNlbWVudCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgb3A6IFJFUExBQ0UsXG4gICAgICBwYXRoOiBbXSxcbiAgICAgIHZhbHVlOiByZXBsYWNlbWVudCA9PT0gTk9USElORyA/IHZvaWQgMCA6IHJlcGxhY2VtZW50XG4gICAgfSk7XG4gICAgaW52ZXJzZVBhdGNoZXMucHVzaCh7XG4gICAgICBvcDogUkVQTEFDRSxcbiAgICAgIHBhdGg6IFtdLFxuICAgICAgdmFsdWU6IGJhc2VWYWx1ZVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGFwcGx5UGF0Y2hlc18oZHJhZnQsIHBhdGNoZXMpIHtcbiAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICBjb25zdCB7IHBhdGgsIG9wIH0gPSBwYXRjaDtcbiAgICAgIGxldCBiYXNlID0gZHJhZnQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBnZXRBcmNodHlwZShiYXNlKTtcbiAgICAgICAgbGV0IHAgPSBwYXRoW2ldO1xuICAgICAgICBpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBwID0gXCJcIiArIHA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChwYXJlbnRUeXBlID09PSAwIC8qIE9iamVjdCAqLyB8fCBwYXJlbnRUeXBlID09PSAxIC8qIEFycmF5ICovKSAmJiAocCA9PT0gXCJfX3Byb3RvX19cIiB8fCBwID09PSBcImNvbnN0cnVjdG9yXCIpKVxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDMpO1xuICAgICAgICBpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBwID09PSBcInByb3RvdHlwZVwiKVxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDMpO1xuICAgICAgICBiYXNlID0gZ2V0KGJhc2UsIHApO1xuICAgICAgICBpZiAodHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgZGllKGVycm9yT2Zmc2V0ICsgMiwgcGF0aC5qb2luKFwiL1wiKSk7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUocGF0Y2gudmFsdWUpO1xuICAgICAgY29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgICBjYXNlIFJFUExBQ0U6XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjYXNlIDMgLyogU2V0ICovOlxuICAgICAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBREQ6XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDEgLyogQXJyYXkgKi86XG4gICAgICAgICAgICAgIHJldHVybiBrZXkgPT09IFwiLVwiID8gYmFzZS5wdXNoKHZhbHVlKSA6IGJhc2Uuc3BsaWNlKGtleSwgMCwgdmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAyIC8qIE1hcCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuYWRkKHZhbHVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgUkVNT1ZFOlxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAxIC8qIEFycmF5ICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgICAgICAgIGNhc2UgMiAvKiBNYXAgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGUgYmFzZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQgKyAxLCBvcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRyYWZ0O1xuICB9XG4gIGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKSB7XG4gICAgaWYgKCFpc0RyYWZ0YWJsZShvYmopKVxuICAgICAgcmV0dXJuIG9iajtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgICAgcmV0dXJuIG9iai5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSk7XG4gICAgaWYgKGlzTWFwKG9iaikpXG4gICAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgICAgQXJyYXkuZnJvbShvYmouZW50cmllcygpKS5tYXAoKFtrLCB2XSkgPT4gW2ssIGRlZXBDbG9uZVBhdGNoVmFsdWUodildKVxuICAgICAgKTtcbiAgICBpZiAoaXNTZXQob2JqKSlcbiAgICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20ob2JqKS5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSkpO1xuICAgIGNvbnN0IGNsb25lZCA9IE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2Yob2JqKSk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKVxuICAgICAgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKTtcbiAgICBpZiAoaGFzKG9iaiwgRFJBRlRBQkxFKSlcbiAgICAgIGNsb25lZFtEUkFGVEFCTEVdID0gb2JqW0RSQUZUQUJMRV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuICBmdW5jdGlvbiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvYmopIHtcbiAgICBpZiAoaXNEcmFmdChvYmopKSB7XG4gICAgICByZXR1cm4gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmopO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIG9iajtcbiAgfVxuICBsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG4gICAgYXBwbHlQYXRjaGVzXyxcbiAgICBnZW5lcmF0ZVBhdGNoZXNfLFxuICAgIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuICB9KTtcbn1cblxuLy8gc3JjL3BsdWdpbnMvbWFwc2V0LnRzXG5mdW5jdGlvbiBlbmFibGVNYXBTZXQoKSB7XG4gIGNsYXNzIERyYWZ0TWFwIGV4dGVuZHMgTWFwIHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXNbRFJBRlRfU1RBVEVdID0ge1xuICAgICAgICB0eXBlXzogMiAvKiBNYXAgKi8sXG4gICAgICAgIHBhcmVudF86IHBhcmVudCxcbiAgICAgICAgc2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCksXG4gICAgICAgIG1vZGlmaWVkXzogZmFsc2UsXG4gICAgICAgIGZpbmFsaXplZF86IGZhbHNlLFxuICAgICAgICBjb3B5Xzogdm9pZCAwLFxuICAgICAgICBhc3NpZ25lZF86IHZvaWQgMCxcbiAgICAgICAgYmFzZV86IHRhcmdldCxcbiAgICAgICAgZHJhZnRfOiB0aGlzLFxuICAgICAgICBpc01hbnVhbF86IGZhbHNlLFxuICAgICAgICByZXZva2VkXzogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZTtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSk7XG4gICAgfVxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGlmICghbGF0ZXN0KHN0YXRlKS5oYXMoa2V5KSB8fCBsYXRlc3Qoc3RhdGUpLmdldChrZXkpICE9PSB2YWx1ZSkge1xuICAgICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIHRydWUpO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5zZXQoa2V5LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICBpZiAoIXRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuYmFzZV8uaGFzKGtleSkpIHtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmNvcHlfLmRlbGV0ZShrZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG4gICAgICAgIHByZXBhcmVNYXBDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgICBlYWNoKHN0YXRlLmJhc2VfLCAoa2V5KSA9PiB7XG4gICAgICAgICAgc3RhdGUuYXNzaWduZWRfLnNldChrZXksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlLmNvcHlfLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvckVhY2goY2IsIHRoaXNBcmcpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZSwga2V5LCBfbWFwKSA9PiB7XG4gICAgICAgIGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQoa2V5KSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgIGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICE9PSBzdGF0ZS5iYXNlXy5nZXQoa2V5KSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHZhbHVlLCBzdGF0ZSk7XG4gICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICBzdGF0ZS5jb3B5Xy5zZXQoa2V5LCBkcmFmdCk7XG4gICAgICByZXR1cm4gZHJhZnQ7XG4gICAgfVxuICAgIGtleXMoKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5rZXlzKCk7XG4gICAgfVxuICAgIHZhbHVlcygpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4gdGhpcy52YWx1ZXMoKSxcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgaWYgKHIuZG9uZSlcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBlbnRyaWVzKCkge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiB0aGlzLmVudHJpZXMoKSxcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgaWYgKHIuZG9uZSlcbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBbKERSQUZUX1NUQVRFLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcHJveHlNYXBfKHRhcmdldCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIG5ldyBEcmFmdE1hcCh0YXJnZXQsIHBhcmVudCk7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgICBzdGF0ZS5hc3NpZ25lZF8gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgc3RhdGUuY29weV8gPSBuZXcgTWFwKHN0YXRlLmJhc2VfKTtcbiAgICB9XG4gIH1cbiAgY2xhc3MgRHJhZnRTZXQgZXh0ZW5kcyBTZXQge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpc1tEUkFGVF9TVEFURV0gPSB7XG4gICAgICAgIHR5cGVfOiAzIC8qIFNldCAqLyxcbiAgICAgICAgcGFyZW50XzogcGFyZW50LFxuICAgICAgICBzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICAgICAgbW9kaWZpZWRfOiBmYWxzZSxcbiAgICAgICAgZmluYWxpemVkXzogZmFsc2UsXG4gICAgICAgIGNvcHlfOiB2b2lkIDAsXG4gICAgICAgIGJhc2VfOiB0YXJnZXQsXG4gICAgICAgIGRyYWZ0XzogdGhpcyxcbiAgICAgICAgZHJhZnRzXzogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSxcbiAgICAgICAgcmV2b2tlZF86IGZhbHNlLFxuICAgICAgICBpc01hbnVhbF86IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLnNpemU7XG4gICAgfVxuICAgIGhhcyh2YWx1ZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5iYXNlXy5oYXModmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgaWYgKHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKSAmJiBzdGF0ZS5jb3B5Xy5oYXMoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFkZCh2YWx1ZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuICAgICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuY29weV8uYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfLmRlbGV0ZSh2YWx1ZSkgfHwgKHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKSA/IHN0YXRlLmNvcHlfLmRlbGV0ZShzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpIDogKFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmYWxzZVxuICAgICAgKSk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG4gICAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3B5Xy52YWx1ZXMoKTtcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfLmVudHJpZXMoKTtcbiAgICB9XG4gICAga2V5cygpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgIH1cbiAgICBbKERSQUZUX1NUQVRFLCBTeW1ib2wuaXRlcmF0b3IpXSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgIH1cbiAgICBmb3JFYWNoKGNiLCB0aGlzQXJnKSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKCk7XG4gICAgICBsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICBjYi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKTtcbiAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwcm94eVNldF8odGFyZ2V0LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gbmV3IERyYWZ0U2V0KHRhcmdldCwgcGFyZW50KTtcbiAgfVxuICBmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZSkge1xuICAgIGlmICghc3RhdGUuY29weV8pIHtcbiAgICAgIHN0YXRlLmNvcHlfID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICAgIHN0YXRlLmJhc2VfLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHZhbHVlLCBzdGF0ZSk7XG4gICAgICAgICAgc3RhdGUuZHJhZnRzXy5zZXQodmFsdWUsIGRyYWZ0KTtcbiAgICAgICAgICBzdGF0ZS5jb3B5Xy5hZGQoZHJhZnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmNvcHlfLmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUucmV2b2tlZF8pXG4gICAgICBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpO1xuICB9XG4gIGxvYWRQbHVnaW4oXCJNYXBTZXRcIiwgeyBwcm94eU1hcF8sIHByb3h5U2V0XyB9KTtcbn1cblxuLy8gc3JjL2ltbWVyLnRzXG52YXIgaW1tZXIgPSBuZXcgSW1tZXIyKCk7XG52YXIgcHJvZHVjZSA9IGltbWVyLnByb2R1Y2U7XG52YXIgcHJvZHVjZVdpdGhQYXRjaGVzID0gaW1tZXIucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoXG4gIGltbWVyXG4pO1xudmFyIHNldEF1dG9GcmVlemUgPSBpbW1lci5zZXRBdXRvRnJlZXplLmJpbmQoaW1tZXIpO1xudmFyIHNldFVzZVN0cmljdFNoYWxsb3dDb3B5ID0gaW1tZXIuc2V0VXNlU3RyaWN0U2hhbGxvd0NvcHkuYmluZChpbW1lcik7XG52YXIgYXBwbHlQYXRjaGVzID0gaW1tZXIuYXBwbHlQYXRjaGVzLmJpbmQoaW1tZXIpO1xudmFyIGNyZWF0ZURyYWZ0ID0gaW1tZXIuY3JlYXRlRHJhZnQuYmluZChpbW1lcik7XG52YXIgZmluaXNoRHJhZnQgPSBpbW1lci5maW5pc2hEcmFmdC5iaW5kKGltbWVyKTtcbmZ1bmN0aW9uIGNhc3REcmFmdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjYXN0SW1tdXRhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCB7XG4gIEltbWVyMiBhcyBJbW1lcixcbiAgYXBwbHlQYXRjaGVzLFxuICBjYXN0RHJhZnQsXG4gIGNhc3RJbW11dGFibGUsXG4gIGNyZWF0ZURyYWZ0LFxuICBjdXJyZW50LFxuICBlbmFibGVNYXBTZXQsXG4gIGVuYWJsZVBhdGNoZXMsXG4gIGZpbmlzaERyYWZ0LFxuICBmcmVlemUsXG4gIERSQUZUQUJMRSBhcyBpbW1lcmFibGUsXG4gIGlzRHJhZnQsXG4gIGlzRHJhZnRhYmxlLFxuICBOT1RISU5HIGFzIG5vdGhpbmcsXG4gIG9yaWdpbmFsLFxuICBwcm9kdWNlLFxuICBwcm9kdWNlV2l0aFBhdGNoZXMsXG4gIHNldEF1dG9GcmVlemUsXG4gIHNldFVzZVN0cmljdFNoYWxsb3dDb3B5XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1tZXIubWpzLm1hcCIsIi8vIHNyYy9pbmRleC50c1xuZXhwb3J0ICogZnJvbSBcInJlZHV4XCI7XG5pbXBvcnQgeyBwcm9kdWNlLCBjdXJyZW50IGFzIGN1cnJlbnQzLCBmcmVlemUsIG9yaWdpbmFsIGFzIG9yaWdpbmFsMiwgaXNEcmFmdCBhcyBpc0RyYWZ0NSB9IGZyb20gXCJpbW1lclwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvciBhcyBjcmVhdGVTZWxlY3RvckNyZWF0b3IyLCBscnVNZW1vaXplLCB3ZWFrTWFwTWVtb2l6ZSBhcyB3ZWFrTWFwTWVtb2l6ZTIgfSBmcm9tIFwicmVzZWxlY3RcIjtcblxuLy8gc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzXG5pbXBvcnQgeyBjdXJyZW50LCBpc0RyYWZ0IH0gZnJvbSBcImltbWVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvckNyZWF0b3IsIHdlYWtNYXBNZW1vaXplIH0gZnJvbSBcInJlc2VsZWN0XCI7XG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3JDcmVhdG9yID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3QgY3JlYXRlU2VsZWN0b3IyID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yKC4uLmFyZ3MpO1xuICBjb25zdCBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjIgPSBPYmplY3QuYXNzaWduKCguLi5hcmdzMikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IyKC4uLmFyZ3MyKTtcbiAgICBjb25zdCB3cmFwcGVkU2VsZWN0b3IgPSAodmFsdWUsIC4uLnJlc3QpID0+IHNlbGVjdG9yKGlzRHJhZnQodmFsdWUpID8gY3VycmVudCh2YWx1ZSkgOiB2YWx1ZSwgLi4ucmVzdCk7XG4gICAgT2JqZWN0LmFzc2lnbih3cmFwcGVkU2VsZWN0b3IsIHNlbGVjdG9yKTtcbiAgICByZXR1cm4gd3JhcHBlZFNlbGVjdG9yO1xuICB9LCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjJcbiAgfSk7XG4gIHJldHVybiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcjI7XG59O1xudmFyIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvcih3ZWFrTWFwTWVtb2l6ZSk7XG5cbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgY29tYmluZVJlZHVjZXJzLCBpc1BsYWluT2JqZWN0IGFzIGlzUGxhaW5PYmplY3QyIH0gZnJvbSBcInJlZHV4XCI7XG5cbi8vIHNyYy9kZXZ0b29sc0V4dGVuc2lvbi50c1xuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gXCJyZWR1eFwiO1xudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24oKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdm9pZCAwO1xuICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIGNvbXBvc2U7XG4gIHJldHVybiBjb21wb3NlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vb3AzKSB7XG4gICAgcmV0dXJuIG5vb3AzO1xuICB9O1xufTtcblxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXG5pbXBvcnQgeyB0aHVuayBhcyB0aHVua01pZGRsZXdhcmUsIHdpdGhFeHRyYUFyZ3VtZW50IH0gZnJvbSBcInJlZHV4LXRodW5rXCI7XG5cbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcbmltcG9ydCB7IGlzQWN0aW9uIH0gZnJvbSBcInJlZHV4XCI7XG5cbi8vIHNyYy90c0hlbHBlcnMudHNcbnZhciBoYXNNYXRjaEZ1bmN0aW9uID0gKHYpID0+IHtcbiAgcmV0dXJuIHYgJiYgdHlwZW9mIHYubWF0Y2ggPT09IFwiZnVuY3Rpb25cIjtcbn07XG5cbi8vIHNyYy9jcmVhdGVBY3Rpb24udHNcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XG4gIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoLi4uYXJncykge1xuICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XG4gICAgICBsZXQgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uKC4uLmFyZ3MpO1xuICAgICAgaWYgKCFwcmVwYXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgwKSA6IFwicHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3RcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxuICAgICAgICAuLi5cIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7XG4gICAgICAgICAgbWV0YTogcHJlcGFyZWQubWV0YVxuICAgICAgICB9LFxuICAgICAgICAuLi5cImVycm9yXCIgaW4gcHJlcGFyZWQgJiYge1xuICAgICAgICAgIGVycm9yOiBwcmVwYXJlZC5lcnJvclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZSxcbiAgICAgIHBheWxvYWQ6IGFyZ3NbMF1cbiAgICB9O1xuICB9XG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWA7XG4gIGFjdGlvbkNyZWF0b3IudHlwZSA9IHR5cGU7XG4gIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSAoYWN0aW9uKSA9PiBpc0FjdGlvbihhY3Rpb24pICYmIGFjdGlvbi50eXBlID09PSB0eXBlO1xuICByZXR1cm4gYWN0aW9uQ3JlYXRvcjtcbn1cbmZ1bmN0aW9uIGlzQWN0aW9uQ3JlYXRvcihhY3Rpb24pIHtcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XG4gIGhhc01hdGNoRnVuY3Rpb24oYWN0aW9uKTtcbn1cbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xuICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSAmJiBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpO1xufVxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcbiAgcmV0dXJuIFtcInR5cGVcIiwgXCJwYXlsb2FkXCIsIFwiZXJyb3JcIiwgXCJtZXRhXCJdLmluZGV4T2Yoa2V5KSA+IC0xO1xufVxuXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGdldE1lc3NhZ2UodHlwZSkge1xuICBjb25zdCBzcGxpdFR5cGUgPSB0eXBlID8gYCR7dHlwZX1gLnNwbGl0KFwiL1wiKSA6IFtdO1xuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCBcImFjdGlvbkNyZWF0b3JcIjtcbiAgcmV0dXJuIGBEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXCIke3R5cGUgfHwgXCJ1bmtub3duXCJ9XCIgYmVpbmcgZGlzcGF0Y2hlZC4gXG5NYWtlIHN1cmUgeW91J3JlIGNhbGxpbmcgdGhlIGFjdGlvbiBjcmVhdG9yIGJlZm9yZSBkaXNwYXRjaGluZywgaS5lLiBcXGBkaXNwYXRjaCgke2FjdGlvbk5hbWV9KCkpXFxgIGluc3RlYWQgb2YgXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSlcXGAuIFRoaXMgaXMgbmVjZXNzYXJ5IGV2ZW4gaWYgdGhlIGFjdGlvbiBoYXMgbm8gcGF5bG9hZC5gO1xufVxuZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucyA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKTtcbiAgfVxuICBjb25zdCB7XG4gICAgaXNBY3Rpb25DcmVhdG9yOiBpc0FjdGlvbkNyZWF0b3IyID0gaXNBY3Rpb25DcmVhdG9yXG4gIH0gPSBvcHRpb25zO1xuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICBpZiAoaXNBY3Rpb25DcmVhdG9yMihhY3Rpb24pKSB7XG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICB9O1xufVxuXG4vLyBzcmMvdXRpbHMudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlLCBpc0RyYWZ0YWJsZSB9IGZyb20gXCJpbW1lclwiO1xuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XG4gIGxldCBlbGFwc2VkID0gMDtcbiAgcmV0dXJuIHtcbiAgICBtZWFzdXJlVGltZShmbikge1xuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcbiAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke2ZuTmFtZX0gdG9vayAke2VsYXBzZWR9bXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgJHttYXhEZWxheX1tcy4gXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG52YXIgVHVwbGUgPSBjbGFzcyBfVHVwbGUgZXh0ZW5kcyBBcnJheSB7XG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zKSB7XG4gICAgc3VwZXIoLi4uaXRlbXMpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfVHVwbGUucHJvdG90eXBlKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgcmV0dXJuIF9UdXBsZTtcbiAgfVxuICBjb25jYXQoLi4uYXJyKSB7XG4gICAgcmV0dXJuIHN1cGVyLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xuICB9XG4gIHByZXBlbmQoLi4uYXJyKSB7XG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XG4gICAgICByZXR1cm4gbmV3IF9UdXBsZSguLi5hcnJbMF0uY29uY2F0KHRoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfVHVwbGUoLi4uYXJyLmNvbmNhdCh0aGlzKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmcmVlemVEcmFmdGFibGUodmFsKSB7XG4gIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgKCkgPT4ge1xuICB9KSA6IHZhbDtcbn1cbmZ1bmN0aW9uIGdldE9ySW5zZXJ0Q29tcHV0ZWQobWFwLCBrZXksIGNvbXB1dGUpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkgcmV0dXJuIG1hcC5nZXQoa2V5KTtcbiAgcmV0dXJuIG1hcC5zZXQoa2V5LCBjb21wdXRlKGtleSkpLmdldChrZXkpO1xufVxuXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXG5mdW5jdGlvbiBpc0ltbXV0YWJsZURlZmF1bHQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XG59XG5mdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaikge1xuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XG4gIHJldHVybiB7XG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xuICAgICAgcmV0dXJuIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIHRyYWNrZWRQcm9wZXJ0aWVzLCBvYmopO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMgPSBbXSwgb2JqLCBwYXRoID0gXCJcIiwgY2hlY2tlZE9iamVjdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG4gIGNvbnN0IHRyYWNrZWQgPSB7XG4gICAgdmFsdWU6IG9ialxuICB9O1xuICBpZiAoIWlzSW1tdXRhYmxlKG9iaikgJiYgIWNoZWNrZWRPYmplY3RzLmhhcyhvYmopKSB7XG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XG4gICAgdHJhY2tlZC5jaGlsZHJlbiA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcbiAgICAgIGlmIChpZ25vcmVQYXRocy5sZW5ndGggJiYgaWdub3JlUGF0aHMuaW5kZXhPZihjaGlsZFBhdGgpICE9PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyYWNrZWQuY2hpbGRyZW5ba2V5XSA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9ialtrZXldLCBjaGlsZFBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJhY2tlZDtcbn1cbmZ1bmN0aW9uIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzID0gW10sIHRyYWNrZWRQcm9wZXJ0eSwgb2JqLCBzYW1lUGFyZW50UmVmID0gZmFsc2UsIHBhdGggPSBcIlwiKSB7XG4gIGNvbnN0IHByZXZPYmogPSB0cmFja2VkUHJvcGVydHkgPyB0cmFja2VkUHJvcGVydHkudmFsdWUgOiB2b2lkIDA7XG4gIGNvbnN0IHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXNNdXRhdGVkOiB0cnVlLFxuICAgICAgcGF0aFxuICAgIH07XG4gIH1cbiAgaWYgKGlzSW1tdXRhYmxlKHByZXZPYmopIHx8IGlzSW1tdXRhYmxlKG9iaikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2FzTXV0YXRlZDogZmFsc2VcbiAgICB9O1xuICB9XG4gIGNvbnN0IGtleXNUb0RldGVjdCA9IHt9O1xuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xuICB9XG4gIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XG4gIH1cbiAgY29uc3QgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XG4gIGZvciAobGV0IGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XG4gICAgICBjb25zdCBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoKGlnbm9yZWQpID0+IHtcbiAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaGFzTWF0Y2hlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMsIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbltrZXldLCBvYmpba2V5XSwgc2FtZVJlZiwgbmVzdGVkUGF0aCk7XG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdhc011dGF0ZWQ6IGZhbHNlXG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucyA9IHt9KSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgc3RyaW5naWZ5MiA9IGZ1bmN0aW9uKG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplMihzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudCk7XG4gICAgfSwgZ2V0U2VyaWFsaXplMiA9IGZ1bmN0aW9uKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSB7XG4gICAgICBsZXQgc3RhY2sgPSBbXSwga2V5cyA9IFtdO1xuICAgICAgaWYgKCFkZWN5Y2xlcikgZGVjeWNsZXIgPSBmdW5jdGlvbihfLCB2YWx1ZSkge1xuICAgICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKSByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcbiAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XG4gICAgICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpO1xuICAgICAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgIH07XG4gICAgdmFyIHN0cmluZ2lmeSA9IHN0cmluZ2lmeTIsIGdldFNlcmlhbGl6ZSA9IGdldFNlcmlhbGl6ZTI7XG4gICAgbGV0IHtcbiAgICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxuICAgICAgaWdub3JlZFBhdGhzLFxuICAgICAgd2FybkFmdGVyID0gMzJcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XG4gICAgcmV0dXJuICh7XG4gICAgICBnZXRTdGF0ZVxuICAgIH0pID0+IHtcbiAgICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgICBsZXQgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xuICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxOSkgOiBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtyZXN1bHQucGF0aCB8fCBcIlwifScuICBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IuIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZWRBY3Rpb24gPSBuZXh0KGFjdGlvbik7XG4gICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XG4gICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XG4gICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcbiAgICAgICAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIwKSA6IGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7cmVzdWx0LnBhdGggfHwgXCJcIn0uIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gJHtzdHJpbmdpZnkyKGFjdGlvbil9LiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xuaW1wb3J0IHsgaXNBY3Rpb24gYXMgaXNBY3Rpb24yLCBpc1BsYWluT2JqZWN0IH0gZnJvbSBcInJlZHV4XCI7XG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xufVxuZnVuY3Rpb24gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHZhbHVlLCBwYXRoID0gXCJcIiwgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMgPSBbXSwgY2FjaGUpIHtcbiAgbGV0IGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlO1xuICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBrZXlQYXRoOiBwYXRoIHx8IFwiPHJvb3Q+XCIsXG4gICAgICB2YWx1ZVxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY2FjaGU/Lmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZW50cmllcyA9IGdldEVudHJpZXMgIT0gbnVsbCA/IGdldEVudHJpZXModmFsdWUpIDogT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcbiAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRWYWx1ZV0gb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xuICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xuICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKG5lc3RlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcbiAgICAgICAgdmFsdWU6IG5lc3RlZFZhbHVlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xuICAgICAgaWYgKGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlKSB7XG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNhY2hlICYmIGlzTmVzdGVkRnJvemVuKHZhbHVlKSkgY2FjaGUuYWRkKHZhbHVlKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcbiAgaWYgKCFPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlICE9PSBcIm9iamVjdFwiIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICBpZiAoIWlzTmVzdGVkRnJvemVuKG5lc3RlZFZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMgPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxuICAgICAgZ2V0RW50cmllcyxcbiAgICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXG4gICAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbXCJtZXRhLmFyZ1wiLCBcIm1ldGEuYmFzZVF1ZXJ5TWV0YVwiXSxcbiAgICAgIGlnbm9yZWRQYXRocyA9IFtdLFxuICAgICAgd2FybkFmdGVyID0gMzIsXG4gICAgICBpZ25vcmVTdGF0ZSA9IGZhbHNlLFxuICAgICAgaWdub3JlQWN0aW9ucyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUNhY2hlID0gZmFsc2VcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjYWNoZSA9ICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpIDogdm9pZCAwO1xuICAgIHJldHVybiAoc3RvcmVBUEkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgICBpZiAoIWlzQWN0aW9uMihhY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBuZXh0KGFjdGlvbik7XG4gICAgICBjb25zdCBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKHdhcm5BZnRlciwgXCJTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVcIik7XG4gICAgICBpZiAoIWlnbm9yZUFjdGlvbnMgJiYgIShpZ25vcmVkQWN0aW9ucy5sZW5ndGggJiYgaWdub3JlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xKSkge1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoYWN0aW9uLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZEFjdGlvblBhdGhzLCBjYWNoZSk7XG4gICAgICAgICAgaWYgKGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAga2V5UGF0aCxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0gPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgbG9naWMgdGhhdCBkaXNwYXRjaGVkIHRoaXMgYWN0aW9uOiBcIiwgYWN0aW9uLCBcIlxcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL2FjdGlvbnMjd2h5LXNob3VsZC10eXBlLWJlLWEtc3RyaW5nLW9yLWF0LWxlYXN0LXNlcmlhbGl6YWJsZS13aHktc2hvdWxkLW15LWFjdGlvbi10eXBlcy1iZS1jb25zdGFudHMpXCIsIFwiXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKTtcbiAgICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoc3RhdGUsIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKTtcbiAgICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGtleVBhdGgsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9ID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiB0aGUgc3RhdGUsIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLCB2YWx1ZSwgYFxuVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhpcyBhY3Rpb24gdHlwZTogJHthY3Rpb24udHlwZX0uXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxufVxuXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcbmZ1bmN0aW9uIGlzQm9vbGVhbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJib29sZWFuXCI7XG59XG52YXIgYnVpbGRHZXREZWZhdWx0TWlkZGxld2FyZSA9ICgpID0+IGZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHRodW5rID0gdHJ1ZSxcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXG4gICAgc2VyaWFsaXphYmxlQ2hlY2sgPSB0cnVlLFxuICAgIGFjdGlvbkNyZWF0b3JDaGVjayA9IHRydWVcbiAgfSA9IG9wdGlvbnMgPz8ge307XG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgVHVwbGUoKTtcbiAgaWYgKHRodW5rKSB7XG4gICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHdpdGhFeHRyYUFyZ3VtZW50KHRodW5rLmV4dHJhQXJndW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmIChpbW11dGFibGVDaGVjaykge1xuICAgICAgbGV0IGltbXV0YWJsZU9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghaXNCb29sZWFuKGltbXV0YWJsZUNoZWNrKSkge1xuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2s7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcbiAgICAgIGxldCBzZXJpYWxpemFibGVPcHRpb25zID0ge307XG4gICAgICBpZiAoIWlzQm9vbGVhbihzZXJpYWxpemFibGVDaGVjaykpIHtcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xuICAgICAgbGV0IGFjdGlvbkNyZWF0b3JPcHRpb25zID0ge307XG4gICAgICBpZiAoIWlzQm9vbGVhbihhY3Rpb25DcmVhdG9yQ2hlY2spKSB7XG4gICAgICAgIGFjdGlvbkNyZWF0b3JPcHRpb25zID0gYWN0aW9uQ3JlYXRvckNoZWNrO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheTtcbn07XG5cbi8vIHNyYy9hdXRvQmF0Y2hFbmhhbmNlci50c1xudmFyIFNIT1VMRF9BVVRPQkFUQ0ggPSBcIlJUS19hdXRvQmF0Y2hcIjtcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSAoKSA9PiAocGF5bG9hZCkgPT4gKHtcbiAgcGF5bG9hZCxcbiAgbWV0YToge1xuICAgIFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZVxuICB9XG59KTtcbnZhciBjcmVhdGVRdWV1ZVdpdGhUaW1lciA9ICh0aW1lb3V0KSA9PiB7XG4gIHJldHVybiAobm90aWZ5KSA9PiB7XG4gICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xuICB9O1xufTtcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IChvcHRpb25zID0ge1xuICB0eXBlOiBcInJhZlwiXG59KSA9PiAobmV4dCkgPT4gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBuZXh0KC4uLmFyZ3MpO1xuICBsZXQgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XG4gIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3QgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFzayA6IG9wdGlvbnMudHlwZSA9PT0gXCJyYWZcIiA/IChcbiAgICAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd29uJ3QgZXhpc3QgaW4gU1NSIGVudmlyb25tZW50cy4gRmFsbCBiYWNrIHRvIGEgdmFndWUgYXBwcm94aW1hdGlvbiBqdXN0IHRvIGtlZXAgZnJvbSBlcnJvcmluZy5cbiAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIDogY3JlYXRlUXVldWVXaXRoVGltZXIoMTApXG4gICkgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xuICBjb25zdCBub3RpZnlMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XG4gICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XG4gICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGwpID0+IGwoKSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcbiAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuc3Vic2NyaWJlYCBtZXRob2QgdG8ga2VlcCBvcmlnaW5hbCBsaXN0ZW5lcnNcbiAgICAvLyBmcm9tIHJ1bm5pbmcgaWYgd2UncmUgZGVsYXlpbmcgbm90aWZpY2F0aW9uc1xuICAgIHN1YnNjcmliZShsaXN0ZW5lcjIpIHtcbiAgICAgIGNvbnN0IHdyYXBwZWRMaXN0ZW5lciA9ICgpID0+IG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcik7XG4gICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyMik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyMik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xuICAgIC8vIGZvciB0aGUgYHNob3VsZEF1dG9CYXRjaGAgZmxhZyBhbmQgZGV0ZXJtaW5lIGlmIGJhdGNoaW5nIGlzIGFjdGl2ZVxuICAgIGRpc3BhdGNoKGFjdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbm90aWZ5aW5nID0gIWFjdGlvbj8ubWV0YT8uW1NIT1VMRF9BVVRPQkFUQ0hdO1xuICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XG4gICAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xuICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XG4gICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIG5vdGlmeWluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIHNyYy9nZXREZWZhdWx0RW5oYW5jZXJzLnRzXG52YXIgYnVpbGRHZXREZWZhdWx0RW5oYW5jZXJzID0gKG1pZGRsZXdhcmVFbmhhbmNlcikgPT4gZnVuY3Rpb24gZ2V0RGVmYXVsdEVuaGFuY2VycyhvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBhdXRvQmF0Y2ggPSB0cnVlXG4gIH0gPSBvcHRpb25zID8/IHt9O1xuICBsZXQgZW5oYW5jZXJBcnJheSA9IG5ldyBUdXBsZShtaWRkbGV3YXJlRW5oYW5jZXIpO1xuICBpZiAoYXV0b0JhdGNoKSB7XG4gICAgZW5oYW5jZXJBcnJheS5wdXNoKGF1dG9CYXRjaEVuaGFuY2VyKHR5cGVvZiBhdXRvQmF0Y2ggPT09IFwib2JqZWN0XCIgPyBhdXRvQmF0Y2ggOiB2b2lkIDApKTtcbiAgfVxuICByZXR1cm4gZW5oYW5jZXJBcnJheTtcbn07XG5cbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xuICBjb25zdCBnZXREZWZhdWx0TWlkZGxld2FyZSA9IGJ1aWxkR2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcbiAgY29uc3Qge1xuICAgIHJlZHVjZXIgPSB2b2lkIDAsXG4gICAgbWlkZGxld2FyZSxcbiAgICBkZXZUb29scyA9IHRydWUsXG4gICAgZHVwbGljYXRlTWlkZGxld2FyZUNoZWNrID0gdHJ1ZSxcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHZvaWQgMCxcbiAgICBlbmhhbmNlcnMgPSB2b2lkIDBcbiAgfSA9IG9wdGlvbnMgfHwge307XG4gIGxldCByb290UmVkdWNlcjtcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXI7XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdDIocmVkdWNlcikpIHtcbiAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxKSA6IFwiYHJlZHVjZXJgIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQsIGFuZCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzXCIpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgbWlkZGxld2FyZSAmJiB0eXBlb2YgbWlkZGxld2FyZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMikgOiBcImBtaWRkbGV3YXJlYCBmaWVsZCBtdXN0IGJlIGEgY2FsbGJhY2tcIik7XG4gIH1cbiAgbGV0IGZpbmFsTWlkZGxld2FyZTtcbiAgaWYgKHR5cGVvZiBtaWRkbGV3YXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlKGdldERlZmF1bHRNaWRkbGV3YXJlKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogXCJ3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmFsTWlkZGxld2FyZSA9IGdldERlZmF1bHRNaWRkbGV3YXJlKCk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBmaW5hbE1pZGRsZXdhcmUuc29tZSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0KSA6IFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGR1cGxpY2F0ZU1pZGRsZXdhcmVDaGVjaykge1xuICAgIGxldCBtaWRkbGV3YXJlUmVmZXJlbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgZmluYWxNaWRkbGV3YXJlLmZvckVhY2goKG1pZGRsZXdhcmUyKSA9PiB7XG4gICAgICBpZiAobWlkZGxld2FyZVJlZmVyZW5jZXMuaGFzKG1pZGRsZXdhcmUyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0MikgOiBcIkR1cGxpY2F0ZSBtaWRkbGV3YXJlIHJlZmVyZW5jZXMgZm91bmQgd2hlbiBjcmVhdGluZyB0aGUgc3RvcmUuIEVuc3VyZSB0aGF0IGVhY2ggbWlkZGxld2FyZSBpcyBvbmx5IGluY2x1ZGVkIG9uY2UuXCIpO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZVJlZmVyZW5jZXMuYWRkKG1pZGRsZXdhcmUyKTtcbiAgICB9KTtcbiAgfVxuICBsZXQgZmluYWxDb21wb3NlID0gY29tcG9zZTI7XG4gIGlmIChkZXZUb29scykge1xuICAgIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2VXaXRoRGV2VG9vbHMoe1xuICAgICAgLy8gRW5hYmxlIGNhcHR1cmUgb2Ygc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIFJlZHV4IGFjdGlvbnNcbiAgICAgIHRyYWNlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIsXG4gICAgICAuLi50eXBlb2YgZGV2VG9vbHMgPT09IFwib2JqZWN0XCIgJiYgZGV2VG9vbHNcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUoLi4uZmluYWxNaWRkbGV3YXJlKTtcbiAgY29uc3QgZ2V0RGVmYXVsdEVuaGFuY2VycyA9IGJ1aWxkR2V0RGVmYXVsdEVuaGFuY2VycyhtaWRkbGV3YXJlRW5oYW5jZXIpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGVuaGFuY2VycyAmJiB0eXBlb2YgZW5oYW5jZXJzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1KSA6IFwiYGVuaGFuY2Vyc2AgZmllbGQgbXVzdCBiZSBhIGNhbGxiYWNrXCIpO1xuICB9XG4gIGxldCBzdG9yZUVuaGFuY2VycyA9IHR5cGVvZiBlbmhhbmNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGVuaGFuY2VycyhnZXREZWZhdWx0RW5oYW5jZXJzKSA6IGdldERlZmF1bHRFbmhhbmNlcnMoKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhQXJyYXkuaXNBcnJheShzdG9yZUVuaGFuY2VycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2KSA6IFwiYGVuaGFuY2Vyc2AgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gYXJyYXlcIik7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBzdG9yZUVuaGFuY2Vycy5zb21lKChpdGVtKSA9PiB0eXBlb2YgaXRlbSAhPT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDcpIDogXCJlYWNoIGVuaGFuY2VyIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGZpbmFsTWlkZGxld2FyZS5sZW5ndGggJiYgIXN0b3JlRW5oYW5jZXJzLmluY2x1ZGVzKG1pZGRsZXdhcmVFbmhhbmNlcikpIHtcbiAgICBjb25zb2xlLmVycm9yKFwibWlkZGxld2FyZXMgd2VyZSBwcm92aWRlZCwgYnV0IG1pZGRsZXdhcmUgZW5oYW5jZXIgd2FzIG5vdCBpbmNsdWRlZCBpbiBmaW5hbCBlbmhhbmNlcnMgLSBtYWtlIHN1cmUgdG8gY2FsbCBgZ2V0RGVmYXVsdEVuaGFuY2Vyc2BcIik7XG4gIH1cbiAgY29uc3QgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZSguLi5zdG9yZUVuaGFuY2Vycyk7XG4gIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpO1xufVxuXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xuaW1wb3J0IHsgcHJvZHVjZSBhcyBjcmVhdGVOZXh0U3RhdGUyLCBpc0RyYWZ0IGFzIGlzRHJhZnQyLCBpc0RyYWZ0YWJsZSBhcyBpc0RyYWZ0YWJsZTIgfSBmcm9tIFwiaW1tZXJcIjtcblxuLy8gc3JjL21hcEJ1aWxkZXJzLnRzXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcbiAgY29uc3QgYWN0aW9uc01hcCA9IHt9O1xuICBjb25zdCBhY3Rpb25NYXRjaGVycyA9IFtdO1xuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyO1xuICBjb25zdCBidWlsZGVyID0ge1xuICAgIGFkZENhc2UodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI2KSA6IFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZE1hdGNoZXJgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNykgOiBcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdHlwZU9yQWN0aW9uQ3JlYXRvciA9PT0gXCJzdHJpbmdcIiA/IHR5cGVPckFjdGlvbkNyZWF0b3IgOiB0eXBlT3JBY3Rpb25DcmVhdG9yLnR5cGU7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjgpIDogXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgYWN0aW9uIHR5cGVcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI5KSA6IGBcXGBidWlsZGVyLmFkZENhc2VcXGAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHR3byByZWR1Y2VycyBmb3IgdGhlIHNhbWUgYWN0aW9uIHR5cGUgJyR7dHlwZX0nYCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH0sXG4gICAgYWRkTWF0Y2hlcihtYXRjaGVyLCByZWR1Y2VyKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMCkgOiBcImBidWlsZGVyLmFkZE1hdGNoZXJgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goe1xuICAgICAgICBtYXRjaGVyLFxuICAgICAgICByZWR1Y2VyXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH0sXG4gICAgYWRkRGVmYXVsdENhc2UocmVkdWNlcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzEpIDogXCJgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG4gIH07XG4gIGJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKTtcbiAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcbn1cblxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAodHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6IFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGhhcyBiZWVuIHJlbW92ZWQuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVSZWR1Y2VyXCIpO1xuICAgIH1cbiAgfVxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKTtcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTtcbiAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcbiAgICBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBmcm96ZW5Jbml0aWFsU3RhdGU7XG4gIH1cbiAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSgpLCBhY3Rpb24pIHtcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW2FjdGlvbnNNYXBbYWN0aW9uLnR5cGVdLCAuLi5maW5hbEFjdGlvbk1hdGNoZXJzLmZpbHRlcigoe1xuICAgICAgbWF0Y2hlclxuICAgIH0pID0+IG1hdGNoZXIoYWN0aW9uKSkubWFwKCh7XG4gICAgICByZWR1Y2VyOiByZWR1Y2VyMlxuICAgIH0pID0+IHJlZHVjZXIyKV07XG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhc2VSZWR1Y2VycyA9IFtmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl07XG4gICAgfVxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcikgPT4ge1xuICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XG4gICAgICAgIGlmIChpc0RyYWZ0MihwcmV2aW91c1N0YXRlKSkge1xuICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0RyYWZ0YWJsZTIocHJldmlvdXNTdGF0ZSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIChkcmFmdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcbiAgICB9LCBzdGF0ZSk7XG4gIH1cbiAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XG4gIHJldHVybiByZWR1Y2VyO1xufVxuXG4vLyBzcmMvbWF0Y2hlcnMudHNcbnZhciBtYXRjaGVzID0gKG1hdGNoZXIsIGFjdGlvbikgPT4ge1xuICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xuICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGlzQW55T2YoLi4ubWF0Y2hlcnMpIHtcbiAgcmV0dXJuIChhY3Rpb24pID0+IHtcbiAgICByZXR1cm4gbWF0Y2hlcnMuc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQWxsT2YoLi4ubWF0Y2hlcnMpIHtcbiAgcmV0dXJuIChhY3Rpb24pID0+IHtcbiAgICByZXR1cm4gbWF0Y2hlcnMuZXZlcnkoKG1hdGNoZXIpID0+IG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKSk7XG4gIH07XG59XG5mdW5jdGlvbiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIHZhbGlkU3RhdHVzKSB7XG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdFN0YXR1cyA9IHZhbGlkU3RhdHVzLmluZGV4T2YoYWN0aW9uLm1ldGEucmVxdWVzdFN0YXR1cykgPiAtMTtcbiAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcbn1cbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FycmF5KGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBhWzBdID09PSBcImZ1bmN0aW9uXCIgJiYgXCJwZW5kaW5nXCIgaW4gYVswXSAmJiBcImZ1bGZpbGxlZFwiIGluIGFbMF0gJiYgXCJyZWplY3RlZFwiIGluIGFbMF07XG59XG5mdW5jdGlvbiBpc1BlbmRpbmcoLi4uYXN5bmNUaHVua3MpIHtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYWN0aW9uKSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbnlPZiguLi5hc3luY1RodW5rcy5tYXAoKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsucGVuZGluZykpO1xufVxuZnVuY3Rpb24gaXNSZWplY3RlZCguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicmVqZWN0ZWRcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MubWFwKChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLnJlamVjdGVkKSk7XG59XG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGNvbnN0IGhhc0ZsYWcgPSAoYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZTtcbiAgfTtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcbn1cbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJmdWxmaWxsZWRcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FueU9mKC4uLmFzeW5jVGh1bmtzLm1hcCgoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5mdWxmaWxsZWQpKTtcbn1cbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbiguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiLCBcImZ1bGZpbGxlZFwiLCBcInJlamVjdGVkXCJdKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MuZmxhdE1hcCgoYXN5bmNUaHVuaykgPT4gW2FzeW5jVGh1bmsucGVuZGluZywgYXN5bmNUaHVuay5yZWplY3RlZCwgYXN5bmNUaHVuay5mdWxmaWxsZWRdKSk7XG59XG5cbi8vIHNyYy9uYW5vaWQudHNcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xudmFyIG5hbm9pZCA9IChzaXplID0gMjEpID0+IHtcbiAgbGV0IGlkID0gXCJcIjtcbiAgbGV0IGkgPSBzaXplO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWQgKz0gdXJsQWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIDY0IHwgMF07XG4gIH1cbiAgcmV0dXJuIGlkO1xufTtcblxuLy8gc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHNcbnZhciBjb21tb25Qcm9wZXJ0aWVzID0gW1wibmFtZVwiLCBcIm1lc3NhZ2VcIiwgXCJzdGFja1wiLCBcImNvZGVcIl07XG52YXIgUmVqZWN0V2l0aFZhbHVlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihwYXlsb2FkLCBtZXRhKSB7XG4gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICB9XG4gIC8qXG4gIHR5cGUtb25seSBwcm9wZXJ0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFJlamVjdFdpdGhWYWx1ZSBhbmQgRnVsZmlsbFdpdGhNZXRhXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcbiAgKi9cbiAgX3R5cGU7XG59O1xudmFyIEZ1bGZpbGxXaXRoTWV0YSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IocGF5bG9hZCwgbWV0YSkge1xuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgfVxuICAvKlxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXG4gICovXG4gIF90eXBlO1xufTtcbnZhciBtaW5pU2VyaWFsaXplRXJyb3IgPSAodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNpbXBsZUVycm9yID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBjb21tb25Qcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzaW1wbGVFcnJvcltwcm9wZXJ0eV0gPSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW1wbGVFcnJvcjtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSlcbiAgfTtcbn07XG52YXIgZXh0ZXJuYWxBYm9ydE1lc3NhZ2UgPSBcIkV4dGVybmFsIHNpZ25hbCB3YXMgYWJvcnRlZFwiO1xudmFyIGNyZWF0ZUFzeW5jVGh1bmsgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IHtcbiAgZnVuY3Rpb24gY3JlYXRlQXN5bmNUaHVuazIodHlwZVByZWZpeCwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBmdWxmaWxsZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL2Z1bGZpbGxlZFwiLCAocGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIG1ldGEpID0+ICh7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJmdWxmaWxsZWRcIlxuICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgPT4gKHtcbiAgICAgIHBheWxvYWQ6IHZvaWQgMCxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgLi4ubWV0YSB8fCB7fSxcbiAgICAgICAgYXJnLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXG4gICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IHJlamVjdGVkID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9yZWplY3RlZFwiLCAoZXJyb3IsIHJlcXVlc3RJZCwgYXJnLCBwYXlsb2FkLCBtZXRhKSA9PiAoe1xuICAgICAgcGF5bG9hZCxcbiAgICAgIGVycm9yOiAob3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZUVycm9yIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoZXJyb3IgfHwgXCJSZWplY3RlZFwiKSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgLi4ubWV0YSB8fCB7fSxcbiAgICAgICAgYXJnLFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXG4gICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWJvcnRlZDogZXJyb3I/Lm5hbWUgPT09IFwiQWJvcnRFcnJvclwiLFxuICAgICAgICBjb25kaXRpb246IGVycm9yPy5uYW1lID09PSBcIkNvbmRpdGlvbkVycm9yXCJcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihhcmcsIHtcbiAgICAgIHNpZ25hbFxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpIDogbmFub2lkKCk7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgbGV0IGFib3J0SGFuZGxlcjtcbiAgICAgICAgbGV0IGFib3J0UmVhc29uO1xuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcbiAgICAgICAgICBhYm9ydFJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICBhYm9ydChleHRlcm5hbEFib3J0TWVzc2FnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gYWJvcnQoZXh0ZXJuYWxBYm9ydE1lc3NhZ2UpLCB7XG4gICAgICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbGV0IGZpbmFsQWN0aW9uO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gb3B0aW9ucz8uY29uZGl0aW9uPy4oYXJnLCB7XG4gICAgICAgICAgICAgIGdldFN0YXRlLFxuICAgICAgICAgICAgICBleHRyYVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IGF3YWl0IGNvbmRpdGlvblJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQgPT09IGZhbHNlIHx8IGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGFib3J0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKHtcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBhcmdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIGV4dHJhXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW2Fib3J0ZWRQcm9taXNlLCBQcm9taXNlLnJlc29sdmUocGF5bG9hZENyZWF0b3IoYXJnLCB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoLFxuICAgICAgICAgICAgICBnZXRTdGF0ZSxcbiAgICAgICAgICAgICAgZXh0cmEsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiAodmFsdWUsIG1ldGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICh2YWx1ZSwgbWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVsZmlsbFdpdGhNZXRhKHZhbHVlLCBtZXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBGdWxmaWxsV2l0aE1ldGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdC5wYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgcmVzdWx0Lm1ldGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LCByZXF1ZXN0SWQsIGFyZyk7XG4gICAgICAgICAgICB9KV0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnIgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKSA6IHJlamVjdGVkKGVyciwgcmVxdWVzdElkLCBhcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYWJvcnRIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNraXBEaXNwYXRjaCA9IG9wdGlvbnMgJiYgIW9wdGlvbnMuZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24gJiYgcmVqZWN0ZWQubWF0Y2goZmluYWxBY3Rpb24pICYmIGZpbmFsQWN0aW9uLm1ldGEuY29uZGl0aW9uO1xuICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvbjtcbiAgICAgICAgfSgpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlLCB7XG4gICAgICAgICAgYWJvcnQsXG4gICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgIGFyZyxcbiAgICAgICAgICB1bndyYXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHVud3JhcFJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjdGlvbkNyZWF0b3IsIHtcbiAgICAgIHBlbmRpbmcsXG4gICAgICByZWplY3RlZCxcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHNldHRsZWQ6IGlzQW55T2YocmVqZWN0ZWQsIGZ1bGZpbGxlZCksXG4gICAgICB0eXBlUHJlZml4XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlQXN5bmNUaHVuazIud2l0aFR5cGVzID0gKCkgPT4gY3JlYXRlQXN5bmNUaHVuazI7XG4gIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcbn0pKCk7XG5mdW5jdGlvbiB1bndyYXBSZXN1bHQoYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xuICAgIHRocm93IGFjdGlvbi5wYXlsb2FkO1xuICB9XG4gIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICB0aHJvdyBhY3Rpb24uZXJyb3I7XG4gIH1cbiAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xufVxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbi8vIHNyYy9jcmVhdGVTbGljZS50c1xudmFyIGFzeW5jVGh1bmtTeW1ib2wgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcihcInJ0ay1zbGljZS1jcmVhdGVhc3luY3RodW5rXCIpO1xudmFyIGFzeW5jVGh1bmtDcmVhdG9yID0ge1xuICBbYXN5bmNUaHVua1N5bWJvbF06IGNyZWF0ZUFzeW5jVGh1bmtcbn07XG52YXIgUmVkdWNlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChSZWR1Y2VyVHlwZTIpID0+IHtcbiAgUmVkdWNlclR5cGUyW1wicmVkdWNlclwiXSA9IFwicmVkdWNlclwiO1xuICBSZWR1Y2VyVHlwZTJbXCJyZWR1Y2VyV2l0aFByZXBhcmVcIl0gPSBcInJlZHVjZXJXaXRoUHJlcGFyZVwiO1xuICBSZWR1Y2VyVHlwZTJbXCJhc3luY1RodW5rXCJdID0gXCJhc3luY1RodW5rXCI7XG4gIHJldHVybiBSZWR1Y2VyVHlwZTI7XG59KShSZWR1Y2VyVHlwZSB8fCB7fSk7XG5mdW5jdGlvbiBnZXRUeXBlKHNsaWNlLCBhY3Rpb25LZXkpIHtcbiAgcmV0dXJuIGAke3NsaWNlfS8ke2FjdGlvbktleX1gO1xufVxuZnVuY3Rpb24gYnVpbGRDcmVhdGVTbGljZSh7XG4gIGNyZWF0b3JzXG59ID0ge30pIHtcbiAgY29uc3QgY0FUID0gY3JlYXRvcnM/LmFzeW5jVGh1bms/Llthc3luY1RodW5rU3ltYm9sXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVNsaWNlMihvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHJlZHVjZXJQYXRoID0gbmFtZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWR1Y2VycyA9ICh0eXBlb2Ygb3B0aW9ucy5yZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5yZWR1Y2VycyhidWlsZFJlZHVjZXJDcmVhdG9ycygpKSA6IG9wdGlvbnMucmVkdWNlcnMpIHx8IHt9O1xuICAgIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWU6IHt9LFxuICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGU6IHt9LFxuICAgICAgYWN0aW9uQ3JlYXRvcnM6IHt9LFxuICAgICAgc2xpY2VNYXRjaGVyczogW11cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHRNZXRob2RzID0ge1xuICAgICAgYWRkQ2FzZSh0eXBlT3JBY3Rpb25DcmVhdG9yLCByZWR1Y2VyMikge1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xuICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcImBjb250ZXh0LmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSBpbiBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTMpIDogXCJgY29udGV4dC5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gcmVkdWNlcjI7XG4gICAgICAgIHJldHVybiBjb250ZXh0TWV0aG9kcztcbiAgICAgIH0sXG4gICAgICBhZGRNYXRjaGVyKG1hdGNoZXIsIHJlZHVjZXIyKSB7XG4gICAgICAgIGNvbnRleHQuc2xpY2VNYXRjaGVycy5wdXNoKHtcbiAgICAgICAgICBtYXRjaGVyLFxuICAgICAgICAgIHJlZHVjZXI6IHJlZHVjZXIyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9LFxuICAgICAgZXhwb3NlQWN0aW9uKG5hbWUyLCBhY3Rpb25DcmVhdG9yKSB7XG4gICAgICAgIGNvbnRleHQuYWN0aW9uQ3JlYXRvcnNbbmFtZTJdID0gYWN0aW9uQ3JlYXRvcjtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZXRob2RzO1xuICAgICAgfSxcbiAgICAgIGV4cG9zZUNhc2VSZWR1Y2VyKG5hbWUyLCByZWR1Y2VyMikge1xuICAgICAgICBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW25hbWUyXSA9IHJlZHVjZXIyO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaCgocmVkdWNlck5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZXJEZWZpbml0aW9uID0gcmVkdWNlcnNbcmVkdWNlck5hbWVdO1xuICAgICAgY29uc3QgcmVkdWNlckRldGFpbHMgPSB7XG4gICAgICAgIHJlZHVjZXJOYW1lLFxuICAgICAgICB0eXBlOiBnZXRUeXBlKG5hbWUsIHJlZHVjZXJOYW1lKSxcbiAgICAgICAgY3JlYXRlTm90YXRpb246IHR5cGVvZiBvcHRpb25zLnJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgIH07XG4gICAgICBpZiAoaXNBc3luY1RodW5rU2xpY2VSZWR1Y2VyRGVmaW5pdGlvbihyZWR1Y2VyRGVmaW5pdGlvbikpIHtcbiAgICAgICAgaGFuZGxlVGh1bmtDYXNlUmVkdWNlckRlZmluaXRpb24ocmVkdWNlckRldGFpbHMsIHJlZHVjZXJEZWZpbml0aW9uLCBjb250ZXh0TWV0aG9kcywgY0FUKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZU5vcm1hbFJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZXRhaWxzLCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dE1ldGhvZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNCkgOiBcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBoYXMgYmVlbiByZW1vdmVkLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IFtleHRyYVJlZHVjZXJzID0ge30sIGFjdGlvbk1hdGNoZXJzID0gW10sIGRlZmF1bHRDYXNlUmVkdWNlciA9IHZvaWQgMF0gPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc107XG4gICAgICBjb25zdCBmaW5hbENhc2VSZWR1Y2VycyA9IHtcbiAgICAgICAgLi4uZXh0cmFSZWR1Y2VycyxcbiAgICAgICAgLi4uY29udGV4dC5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKG9wdGlvbnMuaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBzTSBvZiBjb250ZXh0LnNsaWNlTWF0Y2hlcnMpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZE1hdGNoZXIoc00ubWF0Y2hlciwgc00ucmVkdWNlcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkRGVmYXVsdENhc2UoZGVmYXVsdENhc2VSZWR1Y2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdFNlbGYgPSAoc3RhdGUpID0+IHN0YXRlO1xuICAgIGNvbnN0IGluamVjdGVkU2VsZWN0b3JDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgY29uc3QgaW5qZWN0ZWRTdGF0ZUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gICAgbGV0IF9yZWR1Y2VyO1xuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcbiAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcbiAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFrZVNlbGVjdG9yUHJvcHMocmVkdWNlclBhdGgyLCBpbmplY3RlZCA9IGZhbHNlKSB7XG4gICAgICBmdW5jdGlvbiBzZWxlY3RTbGljZShzdGF0ZSkge1xuICAgICAgICBsZXQgc2xpY2VTdGF0ZSA9IHN0YXRlW3JlZHVjZXJQYXRoMl07XG4gICAgICAgIGlmICh0eXBlb2Ygc2xpY2VTdGF0ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICAgICAgc2xpY2VTdGF0ZSA9IGdldE9ySW5zZXJ0Q29tcHV0ZWQoaW5qZWN0ZWRTdGF0ZUNhY2hlLCBzZWxlY3RTbGljZSwgZ2V0SW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogXCJzZWxlY3RTbGljZSByZXR1cm5lZCB1bmRlZmluZWQgZm9yIGFuIHVuaW5qZWN0ZWQgc2xpY2UgcmVkdWNlclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNsaWNlU3RhdGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoc2VsZWN0U3RhdGUgPSBzZWxlY3RTZWxmKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yQ2FjaGUgPSBnZXRPckluc2VydENvbXB1dGVkKGluamVjdGVkU2VsZWN0b3JDYWNoZSwgaW5qZWN0ZWQsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbiAgICAgICAgcmV0dXJuIGdldE9ySW5zZXJ0Q29tcHV0ZWQoc2VsZWN0b3JDYWNoZSwgc2VsZWN0U3RhdGUsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXAgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lMiwgc2VsZWN0b3JdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuc2VsZWN0b3JzID8/IHt9KSkge1xuICAgICAgICAgICAgbWFwW25hbWUyXSA9IHdyYXBTZWxlY3RvcihzZWxlY3Rvciwgc2VsZWN0U3RhdGUsICgpID0+IGdldE9ySW5zZXJ0Q29tcHV0ZWQoaW5qZWN0ZWRTdGF0ZUNhY2hlLCBzZWxlY3RTdGF0ZSwgZ2V0SW5pdGlhbFN0YXRlKSwgaW5qZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiByZWR1Y2VyUGF0aDIsXG4gICAgICAgIGdldFNlbGVjdG9ycyxcbiAgICAgICAgZ2V0IHNlbGVjdG9ycygpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0U2VsZWN0b3JzKHNlbGVjdFNsaWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0U2xpY2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHJlZHVjZXIsXG4gICAgICBhY3Rpb25zOiBjb250ZXh0LmFjdGlvbkNyZWF0b3JzLFxuICAgICAgY2FzZVJlZHVjZXJzOiBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lLFxuICAgICAgZ2V0SW5pdGlhbFN0YXRlLFxuICAgICAgLi4ubWFrZVNlbGVjdG9yUHJvcHMocmVkdWNlclBhdGgpLFxuICAgICAgaW5qZWN0SW50byhpbmplY3RhYmxlLCB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiBwYXRoT3B0LFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBuZXdSZWR1Y2VyUGF0aCA9IHBhdGhPcHQgPz8gcmVkdWNlclBhdGg7XG4gICAgICAgIGluamVjdGFibGUuaW5qZWN0KHtcbiAgICAgICAgICByZWR1Y2VyUGF0aDogbmV3UmVkdWNlclBhdGgsXG4gICAgICAgICAgcmVkdWNlclxuICAgICAgICB9LCBjb25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNsaWNlLFxuICAgICAgICAgIC4uLm1ha2VTZWxlY3RvclByb3BzKG5ld1JlZHVjZXJQYXRoLCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNsaWNlO1xuICB9O1xufVxuZnVuY3Rpb24gd3JhcFNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RTdGF0ZSwgZ2V0SW5pdGlhbFN0YXRlLCBpbmplY3RlZCkge1xuICBmdW5jdGlvbiB3cmFwcGVyKHJvb3RTdGF0ZSwgLi4uYXJncykge1xuICAgIGxldCBzbGljZVN0YXRlID0gc2VsZWN0U3RhdGUocm9vdFN0YXRlKTtcbiAgICBpZiAodHlwZW9mIHNsaWNlU3RhdGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICBzbGljZVN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcInNlbGVjdFN0YXRlIHJldHVybmVkIHVuZGVmaW5lZCBmb3IgYW4gdW5pbmplY3RlZCBzbGljZSByZWR1Y2VyXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0b3Ioc2xpY2VTdGF0ZSwgLi4uYXJncyk7XG4gIH1cbiAgd3JhcHBlci51bndyYXBwZWQgPSBzZWxlY3RvcjtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG52YXIgY3JlYXRlU2xpY2UgPSAvKiBAX19QVVJFX18gKi8gYnVpbGRDcmVhdGVTbGljZSgpO1xuZnVuY3Rpb24gYnVpbGRSZWR1Y2VyQ3JlYXRvcnMoKSB7XG4gIGZ1bmN0aW9uIGFzeW5jVGh1bmsocGF5bG9hZENyZWF0b3IsIGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBfcmVkdWNlckRlZmluaXRpb25UeXBlOiBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovLFxuICAgICAgcGF5bG9hZENyZWF0b3IsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuICB9XG4gIGFzeW5jVGh1bmsud2l0aFR5cGVzID0gKCkgPT4gYXN5bmNUaHVuaztcbiAgcmV0dXJuIHtcbiAgICByZWR1Y2VyKGNhc2VSZWR1Y2VyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIC8vIGhhY2sgc28gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc28gdGhlIGByZWR1Y2VyRGVmaW5pdGlvblR5cGVgIGlzIG5vdCBhc3NpZ25lZCB0byB0aGUgb3JpZ2luYWxcbiAgICAgICAgW2Nhc2VSZWR1Y2VyLm5hbWVdKC4uLmFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1bY2FzZVJlZHVjZXIubmFtZV0sIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyXCIgLyogcmVkdWNlciAqL1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVwYXJlZFJlZHVjZXIocHJlcGFyZSwgcmVkdWNlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi8sXG4gICAgICAgIHByZXBhcmUsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luY1RodW5rXG4gIH07XG59XG5mdW5jdGlvbiBoYW5kbGVOb3JtYWxSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lLFxuICBjcmVhdGVOb3RhdGlvblxufSwgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUsIGNvbnRleHQpIHtcbiAgbGV0IGNhc2VSZWR1Y2VyO1xuICBsZXQgcHJlcGFyZUNhbGxiYWNrO1xuICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcbiAgICBpZiAoY3JlYXRlTm90YXRpb24gJiYgIWlzQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZURlZmluaXRpb24obWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNykgOiBcIlBsZWFzZSB1c2UgdGhlIGBjcmVhdGUucHJlcGFyZWRSZWR1Y2VyYCBub3RhdGlvbiBmb3IgcHJlcGFyZWQgYWN0aW9uIGNyZWF0b3JzIHdpdGggdGhlIGBjcmVhdGVgIG5vdGF0aW9uLlwiKTtcbiAgICB9XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xuICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmU7XG4gIH0gZWxzZSB7XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcbiAgfVxuICBjb250ZXh0LmFkZENhc2UodHlwZSwgY2FzZVJlZHVjZXIpLmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCBjYXNlUmVkdWNlcikuZXhwb3NlQWN0aW9uKHJlZHVjZXJOYW1lLCBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKSk7XG59XG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtTbGljZVJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZWZpbml0aW9uKSB7XG4gIHJldHVybiByZWR1Y2VyRGVmaW5pdGlvbi5fcmVkdWNlckRlZmluaXRpb25UeXBlID09PSBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovO1xufVxuZnVuY3Rpb24gaXNDYXNlUmVkdWNlcldpdGhQcmVwYXJlRGVmaW5pdGlvbihyZWR1Y2VyRGVmaW5pdGlvbikge1xuICByZXR1cm4gcmVkdWNlckRlZmluaXRpb24uX3JlZHVjZXJEZWZpbml0aW9uVHlwZSA9PT0gXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi87XG59XG5mdW5jdGlvbiBoYW5kbGVUaHVua0Nhc2VSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lXG59LCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dCwgY0FUKSB7XG4gIGlmICghY0FUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTgpIDogXCJDYW5ub3QgdXNlIGBjcmVhdGUuYXN5bmNUaHVua2AgaW4gdGhlIGJ1aWx0LWluIGBjcmVhdGVTbGljZWAuIFVzZSBgYnVpbGRDcmVhdGVTbGljZSh7IGNyZWF0b3JzOiB7IGFzeW5jVGh1bms6IGFzeW5jVGh1bmtDcmVhdG9yIH0gfSlgIHRvIGNyZWF0ZSBhIGN1c3RvbWlzZWQgdmVyc2lvbiBvZiBgY3JlYXRlU2xpY2VgLlwiKTtcbiAgfVxuICBjb25zdCB7XG4gICAgcGF5bG9hZENyZWF0b3IsXG4gICAgZnVsZmlsbGVkLFxuICAgIHBlbmRpbmcsXG4gICAgcmVqZWN0ZWQsXG4gICAgc2V0dGxlZCxcbiAgICBvcHRpb25zXG4gIH0gPSByZWR1Y2VyRGVmaW5pdGlvbjtcbiAgY29uc3QgdGh1bmsgPSBjQVQodHlwZSwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpO1xuICBjb250ZXh0LmV4cG9zZUFjdGlvbihyZWR1Y2VyTmFtZSwgdGh1bmspO1xuICBpZiAoZnVsZmlsbGVkKSB7XG4gICAgY29udGV4dC5hZGRDYXNlKHRodW5rLmZ1bGZpbGxlZCwgZnVsZmlsbGVkKTtcbiAgfVxuICBpZiAocGVuZGluZykge1xuICAgIGNvbnRleHQuYWRkQ2FzZSh0aHVuay5wZW5kaW5nLCBwZW5kaW5nKTtcbiAgfVxuICBpZiAocmVqZWN0ZWQpIHtcbiAgICBjb250ZXh0LmFkZENhc2UodGh1bmsucmVqZWN0ZWQsIHJlamVjdGVkKTtcbiAgfVxuICBpZiAoc2V0dGxlZCkge1xuICAgIGNvbnRleHQuYWRkTWF0Y2hlcih0aHVuay5zZXR0bGVkLCBzZXR0bGVkKTtcbiAgfVxuICBjb250ZXh0LmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCB7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQgfHwgbm9vcCxcbiAgICBwZW5kaW5nOiBwZW5kaW5nIHx8IG5vb3AsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkIHx8IG5vb3AsXG4gICAgc2V0dGxlZDogc2V0dGxlZCB8fCBub29wXG4gIH0pO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cblxuLy8gc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50c1xuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGlkczogW10sXG4gICAgZW50aXRpZXM6IHt9XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KHN0YXRlQWRhcHRlcikge1xuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlID0ge30sIGVudGl0aWVzKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xuICAgIHJldHVybiBlbnRpdGllcyA/IHN0YXRlQWRhcHRlci5zZXRBbGwoc3RhdGUsIGVudGl0aWVzKSA6IHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgZ2V0SW5pdGlhbFN0YXRlXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9zZWxlY3RvcnMudHNcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JlYXRlU2VsZWN0b3I6IGNyZWF0ZVNlbGVjdG9yMiA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlKSA9PiBzdGF0ZS5pZHM7XG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGUpID0+IHN0YXRlLmVudGl0aWVzO1xuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RJZHMsIHNlbGVjdEVudGl0aWVzLCAoaWRzLCBlbnRpdGllcykgPT4gaWRzLm1hcCgoaWQpID0+IGVudGl0aWVzW2lkXSkpO1xuICAgIGNvbnN0IHNlbGVjdElkID0gKF8sIGlkKSA9PiBpZDtcbiAgICBjb25zdCBzZWxlY3RCeUlkID0gKGVudGl0aWVzLCBpZCkgPT4gZW50aXRpZXNbaWRdO1xuICAgIGNvbnN0IHNlbGVjdFRvdGFsID0gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aCk7XG4gICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0SWRzLFxuICAgICAgICBzZWxlY3RFbnRpdGllcyxcbiAgICAgICAgc2VsZWN0QWxsLFxuICAgICAgICBzZWxlY3RUb3RhbCxcbiAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RJZHM6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcbiAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXG4gICAgICBzZWxlY3RBbGw6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcbiAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVTZWxlY3RvcjIoc2VsZWN0U3RhdGUsIHNlbGVjdFRvdGFsKSxcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZXRTZWxlY3RvcnNcbiAgfTtcbn1cblxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlMywgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xudmFyIGlzRHJhZnRUeXBlZCA9IGlzRHJhZnQzO1xuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcbiAgY29uc3Qgb3BlcmF0b3IgPSBjcmVhdGVTdGF0ZU9wZXJhdG9yKChfLCBzdGF0ZSkgPT4gbXV0YXRvcihzdGF0ZSkpO1xuICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU3RhdGVPcGVyYXRvcihtdXRhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xuICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcbiAgICAgIHJldHVybiBpc0ZTQShhcmcyKTtcbiAgICB9XG4gICAgY29uc3QgcnVuTXV0YXRvciA9IChkcmFmdCkgPT4ge1xuICAgICAgaWYgKGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZykpIHtcbiAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0RyYWZ0VHlwZWQoc3RhdGUpKSB7XG4gICAgICBydW5NdXRhdG9yKHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcbmltcG9ydCB7IGN1cnJlbnQgYXMgY3VycmVudDIsIGlzRHJhZnQgYXMgaXNEcmFmdDQgfSBmcm9tIFwiaW1tZXJcIjtcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xuICBjb25zdCBrZXkgPSBzZWxlY3RJZChlbnRpdHkpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcbiAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xuICB9XG4gIHJldHVybiBlbnRpdGllcztcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnQodmFsdWUpIHtcbiAgcmV0dXJuIGlzRHJhZnQ0KHZhbHVlKSA/IGN1cnJlbnQyKHZhbHVlKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSB7XG4gIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzQXJyYXkgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChleGlzdGluZ0lkc0FycmF5KTtcbiAgY29uc3QgYWRkZWQgPSBbXTtcbiAgY29uc3QgYWRkZWRJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbXSk7XG4gIGNvbnN0IHVwZGF0ZWQgPSBbXTtcbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcbiAgICBjb25zdCBpZCA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XG4gICAgaWYgKGV4aXN0aW5nSWRzLmhhcyhpZCkgfHwgYWRkZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdXBkYXRlZC5wdXNoKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNoYW5nZXM6IGVudGl0eVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZGVkSWRzLmFkZChpZCk7XG4gICAgICBhZGRlZC5wdXNoKGVudGl0eSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbYWRkZWQsIHVwZGF0ZWQsIGV4aXN0aW5nSWRzQXJyYXldO1xufVxuXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpIHtcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgY29uc3Qga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcbiAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcbiAgfVxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIG5ld0VudGl0aWVzKSB7XG4gICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xuICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcbiAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIDtcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xuICB9XG4gIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcbiAgICAgIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgICBzdGF0ZS5pZHMgPSBbXTtcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xuICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlTWFueU11dGFibHkoa2V5cywgc3RhdGUpIHtcbiAgICBsZXQgZGlkTXV0YXRlID0gZmFsc2U7XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV07XG4gICAgICAgIGRpZE11dGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRpZE11dGF0ZSkge1xuICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcigoaWQpID0+IGlkIGluIHN0YXRlLmVudGl0aWVzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlQWxsTXV0YWJseShzdGF0ZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIHtcbiAgICAgIGlkczogW10sXG4gICAgICBlbnRpdGllczoge31cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiB0YWtlTmV3S2V5KGtleXMsIHVwZGF0ZSwgc3RhdGUpIHtcbiAgICBjb25zdCBvcmlnaW5hbDMgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xuICAgIGlmIChvcmlnaW5hbDMgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwzLCB1cGRhdGUuY2hhbmdlcyk7XG4gICAgY29uc3QgbmV3S2V5ID0gc2VsZWN0SWRWYWx1ZSh1cGRhdGVkLCBzZWxlY3RJZCk7XG4gICAgY29uc3QgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWQ7XG4gICAgaWYgKGhhc05ld0tleSkge1xuICAgICAga2V5c1t1cGRhdGUuaWRdID0gbmV3S2V5O1xuICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XG4gICAgfVxuICAgIDtcbiAgICBzdGF0ZS5lbnRpdGllc1tuZXdLZXldID0gdXBkYXRlZDtcbiAgICByZXR1cm4gaGFzTmV3S2V5O1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlLCBzdGF0ZSkge1xuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XG4gICAgY29uc3QgbmV3S2V5cyA9IHt9O1xuICAgIGNvbnN0IHVwZGF0ZXNQZXJFbnRpdHkgPSB7fTtcbiAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xuICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XG4gICAgICAgICAgaWQ6IHVwZGF0ZS5pZCxcbiAgICAgICAgICAvLyBTcHJlYWRzIGlnbm9yZSBmYWxzeSB2YWx1ZXMsIHNvIHRoaXMgd29ya3MgZXZlbiBpZiB0aGVyZSBpc24ndFxuICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHVwZGF0ZSBhbHJlYWR5IGF0IHRoaXMga2V5XG4gICAgICAgICAgY2hhbmdlczoge1xuICAgICAgICAgICAgLi4udXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdPy5jaGFuZ2VzLFxuICAgICAgICAgICAgLi4udXBkYXRlLmNoYW5nZXNcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdXBkYXRlcyA9IE9iamVjdC52YWx1ZXModXBkYXRlc1BlckVudGl0eSk7XG4gICAgY29uc3QgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XG4gICAgICBjb25zdCBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcigodXBkYXRlKSA9PiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpKS5sZW5ndGggPiAwO1xuICAgICAgaWYgKGRpZE11dGF0ZUlkcykge1xuICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKS5tYXAoKGUpID0+IHNlbGVjdElkVmFsdWUoZSwgc2VsZWN0SWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSk7XG4gICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXG4gICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxuICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxuICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXG4gICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxuICAgIHJlbW92ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVPbmVNdXRhYmx5KSxcbiAgICByZW1vdmVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU1hbnlNdXRhYmx5KVxuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHNcbmZ1bmN0aW9uIGZpbmRJbnNlcnRJbmRleChzb3J0ZWRJdGVtcywgaXRlbSwgY29tcGFyaXNvbkZ1bmN0aW9uKSB7XG4gIGxldCBsb3dJbmRleCA9IDA7XG4gIGxldCBoaWdoSW5kZXggPSBzb3J0ZWRJdGVtcy5sZW5ndGg7XG4gIHdoaWxlIChsb3dJbmRleCA8IGhpZ2hJbmRleCkge1xuICAgIGxldCBtaWRkbGVJbmRleCA9IGxvd0luZGV4ICsgaGlnaEluZGV4ID4+PiAxO1xuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gc29ydGVkSXRlbXNbbWlkZGxlSW5kZXhdO1xuICAgIGNvbnN0IHJlcyA9IGNvbXBhcmlzb25GdW5jdGlvbihpdGVtLCBjdXJyZW50SXRlbSk7XG4gICAgaWYgKHJlcyA+PSAwKSB7XG4gICAgICBsb3dJbmRleCA9IG1pZGRsZUluZGV4ICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaEluZGV4ID0gbWlkZGxlSW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiBsb3dJbmRleDtcbn1cbmZ1bmN0aW9uIGluc2VydChzb3J0ZWRJdGVtcywgaXRlbSwgY29tcGFyaXNvbkZ1bmN0aW9uKSB7XG4gIGNvbnN0IGluc2VydEF0SW5kZXggPSBmaW5kSW5zZXJ0SW5kZXgoc29ydGVkSXRlbXMsIGl0ZW0sIGNvbXBhcmlzb25GdW5jdGlvbik7XG4gIHNvcnRlZEl0ZW1zLnNwbGljZShpbnNlcnRBdEluZGV4LCAwLCBpdGVtKTtcbiAgcmV0dXJuIHNvcnRlZEl0ZW1zO1xufVxuZnVuY3Rpb24gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBjb21wYXJlcikge1xuICBjb25zdCB7XG4gICAgcmVtb3ZlT25lLFxuICAgIHJlbW92ZU1hbnksXG4gICAgcmVtb3ZlQWxsXG4gIH0gPSBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCk7XG4gIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xuICAgIHJldHVybiBhZGRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSwgZXhpc3RpbmdJZHMpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQoZXhpc3RpbmdJZHMgPz8gZ2V0Q3VycmVudChzdGF0ZS5pZHMpKTtcbiAgICBjb25zdCBtb2RlbHMgPSBuZXdFbnRpdGllcy5maWx0ZXIoKG1vZGVsKSA9PiAhZXhpc3RpbmdLZXlzLmhhcyhzZWxlY3RJZFZhbHVlKG1vZGVsLCBzZWxlY3RJZCkpKTtcbiAgICBpZiAobW9kZWxzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgbWVyZ2VGdW5jdGlvbihzdGF0ZSwgbW9kZWxzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgICBpZiAobmV3RW50aXRpZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV3RW50aXRpZXMpIHtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKGl0ZW0pXTtcbiAgICAgIH1cbiAgICAgIG1lcmdlRnVuY3Rpb24oc3RhdGUsIG5ld0VudGl0aWVzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIHN0YXRlLmVudGl0aWVzID0ge307XG4gICAgc3RhdGUuaWRzID0gW107XG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlLCBbXSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcbiAgICBsZXQgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBsZXQgcmVwbGFjZWRJZHMgPSBmYWxzZTtcbiAgICBmb3IgKGxldCB1cGRhdGUgb2YgdXBkYXRlcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICAgIGlmICghZW50aXR5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYXBwbGllZFVwZGF0ZXMgPSB0cnVlO1xuICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcbiAgICAgIGNvbnN0IG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcbiAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XG4gICAgICAgIHJlcGxhY2VkSWRzID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XG4gICAgICAgIGNvbnN0IG9sZEluZGV4ID0gc3RhdGUuaWRzLmluZGV4T2YodXBkYXRlLmlkKTtcbiAgICAgICAgc3RhdGUuaWRzW29sZEluZGV4XSA9IG5ld0lkO1xuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xuICAgICAgbWVyZ2VGdW5jdGlvbihzdGF0ZSwgW10sIGFwcGxpZWRVcGRhdGVzLCByZXBsYWNlZElkcyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xuICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIGNvbnN0IFthZGRlZCwgdXBkYXRlZCwgZXhpc3RpbmdJZHNBcnJheV0gPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpO1xuICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSwgZXhpc3RpbmdJZHNBcnJheSk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkLmxlbmd0aCkge1xuICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldID09PSBiW2ldKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBtZXJnZUZ1bmN0aW9uID0gKHN0YXRlLCBhZGRlZEl0ZW1zLCBhcHBsaWVkVXBkYXRlcywgcmVwbGFjZWRJZHMpID0+IHtcbiAgICBjb25zdCBjdXJyZW50RW50aXRpZXMgPSBnZXRDdXJyZW50KHN0YXRlLmVudGl0aWVzKTtcbiAgICBjb25zdCBjdXJyZW50SWRzID0gZ2V0Q3VycmVudChzdGF0ZS5pZHMpO1xuICAgIGNvbnN0IHN0YXRlRW50aXRpZXMgPSBzdGF0ZS5lbnRpdGllcztcbiAgICBsZXQgaWRzID0gY3VycmVudElkcztcbiAgICBpZiAocmVwbGFjZWRJZHMpIHtcbiAgICAgIGlkcyA9IG5ldyBTZXQoY3VycmVudElkcyk7XG4gICAgfVxuICAgIGxldCBzb3J0ZWRFbnRpdGllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBjdXJyZW50RW50aXRpZXNbaWRdO1xuICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICBzb3J0ZWRFbnRpdGllcy5wdXNoKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHdhc1ByZXZpb3VzbHlFbXB0eSA9IHNvcnRlZEVudGl0aWVzLmxlbmd0aCA9PT0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWRkZWRJdGVtcykge1xuICAgICAgc3RhdGVFbnRpdGllc1tzZWxlY3RJZChpdGVtKV0gPSBpdGVtO1xuICAgICAgaWYgKCF3YXNQcmV2aW91c2x5RW1wdHkpIHtcbiAgICAgICAgaW5zZXJ0KHNvcnRlZEVudGl0aWVzLCBpdGVtLCBjb21wYXJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh3YXNQcmV2aW91c2x5RW1wdHkpIHtcbiAgICAgIHNvcnRlZEVudGl0aWVzID0gYWRkZWRJdGVtcy5zbGljZSgpLnNvcnQoY29tcGFyZXIpO1xuICAgIH0gZWxzZSBpZiAoYXBwbGllZFVwZGF0ZXMpIHtcbiAgICAgIHNvcnRlZEVudGl0aWVzLnNvcnQoY29tcGFyZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0ZWRJZHMgPSBzb3J0ZWRFbnRpdGllcy5tYXAoc2VsZWN0SWQpO1xuICAgIGlmICghYXJlQXJyYXlzRXF1YWwoY3VycmVudElkcywgbmV3U29ydGVkSWRzKSkge1xuICAgICAgc3RhdGUuaWRzID0gbmV3U29ydGVkSWRzO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICByZW1vdmVPbmUsXG4gICAgcmVtb3ZlTWFueSxcbiAgICByZW1vdmVBbGwsXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxuICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxuICAgIHNldEFsbDogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRBbGxNdXRhYmx5KSxcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcbiAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KVxuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvY3JlYXRlX2FkYXB0ZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzZWxlY3RJZCxcbiAgICBzb3J0Q29tcGFyZXJcbiAgfSA9IHtcbiAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxuICAgIHNlbGVjdElkOiAoaW5zdGFuY2UpID0+IGluc3RhbmNlLmlkLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3Qgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyID8gY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkLCBzb3J0Q29tcGFyZXIpIDogY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpO1xuICBjb25zdCBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KHN0YXRlQWRhcHRlcik7XG4gIGNvbnN0IHNlbGVjdG9yc0ZhY3RvcnkgPSBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCk7XG4gIHJldHVybiB7XG4gICAgc2VsZWN0SWQsXG4gICAgc29ydENvbXBhcmVyLFxuICAgIC4uLnN0YXRlRmFjdG9yeSxcbiAgICAuLi5zZWxlY3RvcnNGYWN0b3J5LFxuICAgIC4uLnN0YXRlQWRhcHRlclxuICB9O1xufVxuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXG5pbXBvcnQgeyBpc0FjdGlvbiBhcyBpc0FjdGlvbjMgfSBmcm9tIFwicmVkdXhcIjtcblxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzXG52YXIgdGFzayA9IFwidGFza1wiO1xudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xudmFyIGNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG52YXIgY2FuY2VsbGVkID0gXCJjYW5jZWxsZWRcIjtcbnZhciB0YXNrQ2FuY2VsbGVkID0gYHRhc2stJHtjYW5jZWxsZWR9YDtcbnZhciB0YXNrQ29tcGxldGVkID0gYHRhc2stJHtjb21wbGV0ZWR9YDtcbnZhciBsaXN0ZW5lckNhbmNlbGxlZCA9IGAke2xpc3RlbmVyfS0ke2NhbmNlbGxlZH1gO1xudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gYCR7bGlzdGVuZXJ9LSR7Y29tcGxldGVkfWA7XG52YXIgVGFza0Fib3J0RXJyb3IgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKGNvZGUpIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMubWVzc2FnZSA9IGAke3Rhc2t9ICR7Y2FuY2VsbGVkfSAocmVhc29uOiAke2NvZGV9KWA7XG4gIH1cbiAgbmFtZSA9IFwiVGFza0Fib3J0RXJyb3JcIjtcbiAgbWVzc2FnZTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHNcbnZhciBhc3NlcnRGdW5jdGlvbiA9IChmdW5jLCBleHBlY3RlZCkgPT4ge1xuICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMikgOiBgJHtleHBlY3RlZH0gaXMgbm90IGEgZnVuY3Rpb25gKTtcbiAgfVxufTtcbnZhciBub29wMiA9ICgpID0+IHtcbn07XG52YXIgY2F0Y2hSZWplY3Rpb24gPSAocHJvbWlzZSwgb25FcnJvciA9IG5vb3AyKSA9PiB7XG4gIHByb21pc2UuY2F0Y2gob25FcnJvcik7XG4gIHJldHVybiBwcm9taXNlO1xufTtcbnZhciBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gKGFib3J0U2lnbmFsLCBjYWxsYmFjaykgPT4ge1xuICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHtcbiAgICBvbmNlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gKCkgPT4gYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGNhbGxiYWNrKTtcbn07XG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikgPT4ge1xuICBjb25zdCBzaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCEoXCJyZWFzb25cIiBpbiBzaWduYWwpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpZ25hbCwgXCJyZWFzb25cIiwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiByZWFzb24sXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIDtcbiAgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbik7XG59O1xuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcbnZhciB2YWxpZGF0ZUFjdGl2ZSA9IChzaWduYWwpID0+IHtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVhc29uXG4gICAgfSA9IHNpZ25hbDtcbiAgICB0aHJvdyBuZXcgVGFza0Fib3J0RXJyb3IocmVhc29uKTtcbiAgfVxufTtcbmZ1bmN0aW9uIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkge1xuICBsZXQgY2xlYW51cCA9IG5vb3AyO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG5vdGlmeVJlamVjdGlvbiA9ICgpID0+IHJlamVjdChuZXcgVGFza0Fib3J0RXJyb3Ioc2lnbmFsLnJlYXNvbikpO1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsZWFudXAgPSBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHNpZ25hbCwgbm90aWZ5UmVqZWN0aW9uKTtcbiAgICBwcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYW51cCgpKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgIGNsZWFudXAgPSBub29wMjtcbiAgfSk7XG59XG52YXIgcnVuVGFzayA9IGFzeW5jICh0YXNrMiwgY2xlYW5VcCkgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGFzazIoKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcIm9rXCIsXG4gICAgICB2YWx1ZVxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/IFwiY2FuY2VsbGVkXCIgOiBcInJlamVjdGVkXCIsXG4gICAgICBlcnJvclxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYW5VcD8uKCk7XG4gIH1cbn07XG52YXIgY3JlYXRlUGF1c2UgPSAoc2lnbmFsKSA9PiB7XG4gIHJldHVybiAocHJvbWlzZSkgPT4ge1xuICAgIHJldHVybiBjYXRjaFJlamVjdGlvbihyYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UpLnRoZW4oKG91dHB1dCkgPT4ge1xuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSkpO1xuICB9O1xufTtcbnZhciBjcmVhdGVEZWxheSA9IChzaWduYWwpID0+IHtcbiAgY29uc3QgcGF1c2UgPSBjcmVhdGVQYXVzZShzaWduYWwpO1xuICByZXR1cm4gKHRpbWVvdXRNcykgPT4ge1xuICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpKSk7XG4gIH07XG59O1xuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXG52YXIge1xuICBhc3NpZ25cbn0gPSBPYmplY3Q7XG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XG52YXIgYWxtID0gXCJsaXN0ZW5lck1pZGRsZXdhcmVcIjtcbnZhciBjcmVhdGVGb3JrID0gKHBhcmVudEFib3J0U2lnbmFsLCBwYXJlbnRCbG9ja2luZ1Byb21pc2VzKSA9PiB7XG4gIGNvbnN0IGxpbmtDb250cm9sbGVycyA9IChjb250cm9sbGVyKSA9PiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCAoKSA9PiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbikpO1xuICByZXR1cm4gKHRhc2tFeGVjdXRvciwgb3B0cykgPT4ge1xuICAgIGFzc2VydEZ1bmN0aW9uKHRhc2tFeGVjdXRvciwgXCJ0YXNrRXhlY3V0b3JcIik7XG4gICAgY29uc3QgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgbGlua0NvbnRyb2xsZXJzKGNoaWxkQWJvcnRDb250cm9sbGVyKTtcbiAgICBjb25zdCByZXN1bHQgPSBydW5UYXNrKGFzeW5jICgpID0+IHtcbiAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKTtcbiAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICBjb25zdCByZXN1bHQyID0gYXdhaXQgdGFza0V4ZWN1dG9yKHtcbiAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxuICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgcmV0dXJuIHJlc3VsdDI7XG4gICAgfSwgKCkgPT4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NvbXBsZXRlZCkpO1xuICAgIGlmIChvcHRzPy5hdXRvSm9pbikge1xuICAgICAgcGFyZW50QmxvY2tpbmdQcm9taXNlcy5wdXNoKHJlc3VsdC5jYXRjaChub29wMikpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcbiAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NhbmNlbGxlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkgPT4ge1xuICBjb25zdCB0YWtlID0gYXN5bmMgKHByZWRpY2F0ZSwgdGltZW91dCkgPT4ge1xuICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XG4gICAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIH07XG4gICAgY29uc3QgdHVwbGVQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHN0b3BMaXN0ZW5pbmcgPSBzdGFydExpc3RlbmluZyh7XG4gICAgICAgIHByZWRpY2F0ZSxcbiAgICAgICAgZWZmZWN0OiAoYWN0aW9uLCBsaXN0ZW5lckFwaSkgPT4ge1xuICAgICAgICAgIGxpc3RlbmVyQXBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmVzb2x2ZShbYWN0aW9uLCBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLCBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKCldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgICAgc3RvcExpc3RlbmluZygpO1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdHVwbGVQcm9taXNlXTtcbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpKSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByYWNlV2l0aFNpZ25hbChzaWduYWwsIFByb21pc2UucmFjZShwcm9taXNlcykpO1xuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKHByZWRpY2F0ZSwgdGltZW91dCkgPT4gY2F0Y2hSZWplY3Rpb24odGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpKTtcbn07XG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IChvcHRpb25zKSA9PiB7XG4gIGxldCB7XG4gICAgdHlwZSxcbiAgICBhY3Rpb25DcmVhdG9yLFxuICAgIG1hdGNoZXIsXG4gICAgcHJlZGljYXRlLFxuICAgIGVmZmVjdFxuICB9ID0gb3B0aW9ucztcbiAgaWYgKHR5cGUpIHtcbiAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XG4gIH0gZWxzZSBpZiAoYWN0aW9uQ3JlYXRvcikge1xuICAgIHR5cGUgPSBhY3Rpb25DcmVhdG9yLnR5cGU7XG4gICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaDtcbiAgfSBlbHNlIGlmIChtYXRjaGVyKSB7XG4gICAgcHJlZGljYXRlID0gbWF0Y2hlcjtcbiAgfSBlbHNlIGlmIChwcmVkaWNhdGUpIHtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyMSkgOiBcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcbiAgfVxuICBhc3NlcnRGdW5jdGlvbihlZmZlY3QsIFwib3B0aW9ucy5saXN0ZW5lclwiKTtcbiAgcmV0dXJuIHtcbiAgICBwcmVkaWNhdGUsXG4gICAgdHlwZSxcbiAgICBlZmZlY3RcbiAgfTtcbn07XG52YXIgY3JlYXRlTGlzdGVuZXJFbnRyeSA9IC8qIEBfX1BVUkVfXyAqLyBhc3NpZ24oKG9wdGlvbnMpID0+IHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgcHJlZGljYXRlLFxuICAgIGVmZmVjdFxuICB9ID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKTtcbiAgY29uc3QgZW50cnkgPSB7XG4gICAgaWQ6IG5hbm9pZCgpLFxuICAgIGVmZmVjdCxcbiAgICB0eXBlLFxuICAgIHByZWRpY2F0ZSxcbiAgICBwZW5kaW5nOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLFxuICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyMikgOiBcIlVuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBlbnRyeTtcbn0sIHtcbiAgd2l0aFR5cGVzOiAoKSA9PiBjcmVhdGVMaXN0ZW5lckVudHJ5XG59KTtcbnZhciBmaW5kTGlzdGVuZXJFbnRyeSA9IChsaXN0ZW5lck1hcCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBlZmZlY3QsXG4gICAgcHJlZGljYXRlXG4gIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpO1xuICByZXR1cm4gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSkuZmluZCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9IHR5cGVvZiB0eXBlID09PSBcInN0cmluZ1wiID8gZW50cnkudHlwZSA9PT0gdHlwZSA6IGVudHJ5LnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xuICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeS5lZmZlY3QgPT09IGVmZmVjdDtcbiAgfSk7XG59O1xudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IChlbnRyeSkgPT4ge1xuICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcbiAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcbiAgfSk7XG59O1xudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gKGxpc3RlbmVyTWFwKSA9PiB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgbGlzdGVuZXJNYXAuZm9yRWFjaChjYW5jZWxBY3RpdmVMaXN0ZW5lcnMpO1xuICAgIGxpc3RlbmVyTWFwLmNsZWFyKCk7XG4gIH07XG59O1xudmFyIHNhZmVseU5vdGlmeUVycm9yID0gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSA9PiB7XG4gIHRyeSB7XG4gICAgZXJyb3JIYW5kbGVyKGVycm9yVG9Ob3RpZnksIGVycm9ySW5mbyk7XG4gIH0gY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvcjtcbiAgICB9LCAwKTtcbiAgfVxufTtcbnZhciBhZGRMaXN0ZW5lciA9IC8qIEBfX1BVUkVfXyAqLyBhc3NpZ24oLyogQF9fUFVSRV9fICovIGNyZWF0ZUFjdGlvbihgJHthbG19L2FkZGApLCB7XG4gIHdpdGhUeXBlczogKCkgPT4gYWRkTGlzdGVuZXJcbn0pO1xudmFyIGNsZWFyQWxsTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIGNyZWF0ZUFjdGlvbihgJHthbG19L3JlbW92ZUFsbGApO1xudmFyIHJlbW92ZUxpc3RlbmVyID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vcmVtb3ZlYCksIHtcbiAgd2l0aFR5cGVzOiAoKSA9PiByZW1vdmVMaXN0ZW5lclxufSk7XG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9ICguLi5hcmdzKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoYCR7YWxtfS9lcnJvcmAsIC4uLmFyZ3MpO1xufTtcbnZhciBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUgPSAobWlkZGxld2FyZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBsaXN0ZW5lck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIGNvbnN0IHtcbiAgICBleHRyYSxcbiAgICBvbkVycm9yID0gZGVmYXVsdEVycm9ySGFuZGxlclxuICB9ID0gbWlkZGxld2FyZU9wdGlvbnM7XG4gIGFzc2VydEZ1bmN0aW9uKG9uRXJyb3IsIFwib25FcnJvclwiKTtcbiAgY29uc3QgaW5zZXJ0RW50cnkgPSAoZW50cnkpID0+IHtcbiAgICBlbnRyeS51bnN1YnNjcmliZSA9ICgpID0+IGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7XG4gICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgcmV0dXJuIChjYW5jZWxPcHRpb25zKSA9PiB7XG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xuICAgICAgaWYgKGNhbmNlbE9wdGlvbnM/LmNhbmNlbEFjdGl2ZSkge1xuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHN0YXJ0TGlzdGVuaW5nID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGxpc3RlbmVyTWFwLCBvcHRpb25zKSA/PyBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xuICAgIHJldHVybiBpbnNlcnRFbnRyeShlbnRyeSk7XG4gIH07XG4gIGFzc2lnbihzdGFydExpc3RlbmluZywge1xuICAgIHdpdGhUeXBlczogKCkgPT4gc3RhcnRMaXN0ZW5pbmdcbiAgfSk7XG4gIGNvbnN0IHN0b3BMaXN0ZW5pbmcgPSAob3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkobGlzdGVuZXJNYXAsIG9wdGlvbnMpO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKTtcbiAgICAgIGlmIChvcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gISFlbnRyeTtcbiAgfTtcbiAgYXNzaWduKHN0b3BMaXN0ZW5pbmcsIHtcbiAgICB3aXRoVHlwZXM6ICgpID0+IHN0b3BMaXN0ZW5pbmdcbiAgfSk7XG4gIGNvbnN0IG5vdGlmeUxpc3RlbmVyID0gYXN5bmMgKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGludGVybmFsVGFza0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgY29uc3QgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKHN0YXJ0TGlzdGVuaW5nLCBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgY29uc3QgYXV0b0pvaW5Qcm9taXNlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShlbnRyeS5lZmZlY3QoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgLy8gVXNlIGFzc2lnbigpIHJhdGhlciB0aGFuIC4uLiB0byBhdm9pZCBleHRyYSBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIHRvIGJ1bmRsZVxuICAgICAgICBhc3NpZ24oe30sIGFwaSwge1xuICAgICAgICAgIGdldE9yaWdpbmFsU3RhdGUsXG4gICAgICAgICAgY29uZGl0aW9uOiAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKSxcbiAgICAgICAgICB0YWtlLFxuICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgICBleHRyYSxcbiAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIGZvcms6IGNyZWF0ZUZvcmsoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsIGF1dG9Kb2luUHJvbWlzZXMpLFxuICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcbiAgICAgICAgICBzdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIsIF8sIHNldCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcbiAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZGVsZXRlKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhyb3dJZkNhbmNlbGxlZDogKCkgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICkpO1xuICAgIH0gY2F0Y2ggKGxpc3RlbmVyRXJyb3IpIHtcbiAgICAgIGlmICghKGxpc3RlbmVyRXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvcikpIHtcbiAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgbGlzdGVuZXJFcnJvciwge1xuICAgICAgICAgIHJhaXNlZEJ5OiBcImVmZmVjdFwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChhdXRvSm9pblByb21pc2VzKTtcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpO1xuICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XG4gICAgfVxuICB9O1xuICBjb25zdCBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKGxpc3RlbmVyTWFwKTtcbiAgY29uc3QgbWlkZGxld2FyZSA9IChhcGkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgaWYgKCFpc0FjdGlvbjMoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKGFkZExpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIHJldHVybiBzdGFydExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XG4gICAgfVxuICAgIGlmIChjbGVhckFsbExpc3RlbmVycy5tYXRjaChhY3Rpb24pKSB7XG4gICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIHN0b3BMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xuICAgIH1cbiAgICBsZXQgb3JpZ2luYWxTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGdldE9yaWdpbmFsU3RhdGUgPSAoKSA9PiB7XG4gICAgICBpZiAob3JpZ2luYWxTdGF0ZSA9PT0gSU5URVJOQUxfTklMX1RPS0VOKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIzKSA6IGAke2FsbX06IGdldE9yaWdpbmFsU3RhdGUgY2FuIG9ubHkgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xuICAgIH07XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xuICAgICAgaWYgKGxpc3RlbmVyTWFwLnNpemUgPiAwKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBsaXN0ZW5lckVudHJpZXMpIHtcbiAgICAgICAgICBsZXQgcnVuTGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKHByZWRpY2F0ZUVycm9yKSB7XG4gICAgICAgICAgICBydW5MaXN0ZW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcbiAgICAgICAgICAgICAgcmFpc2VkQnk6IFwicHJlZGljYXRlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4ge1xuICAgIG1pZGRsZXdhcmUsXG4gICAgc3RhcnRMaXN0ZW5pbmcsXG4gICAgc3RvcExpc3RlbmluZyxcbiAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcbiAgfTtcbn07XG5cbi8vIHNyYy9keW5hbWljTWlkZGxld2FyZS9pbmRleC50c1xuaW1wb3J0IHsgY29tcG9zZSBhcyBjb21wb3NlMyB9IGZyb20gXCJyZWR1eFwiO1xudmFyIGNyZWF0ZU1pZGRsZXdhcmVFbnRyeSA9IChtaWRkbGV3YXJlKSA9PiAoe1xuICBtaWRkbGV3YXJlLFxuICBhcHBsaWVkOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpXG59KTtcbnZhciBtYXRjaEluc3RhbmNlID0gKGluc3RhbmNlSWQpID0+IChhY3Rpb24pID0+IGFjdGlvbj8ubWV0YT8uaW5zdGFuY2VJZCA9PT0gaW5zdGFuY2VJZDtcbnZhciBjcmVhdGVEeW5hbWljTWlkZGxld2FyZSA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IG5hbm9pZCgpO1xuICBjb25zdCBtaWRkbGV3YXJlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgd2l0aE1pZGRsZXdhcmUgPSBPYmplY3QuYXNzaWduKGNyZWF0ZUFjdGlvbihcImR5bmFtaWNNaWRkbGV3YXJlL2FkZFwiLCAoLi4ubWlkZGxld2FyZXMpID0+ICh7XG4gICAgcGF5bG9hZDogbWlkZGxld2FyZXMsXG4gICAgbWV0YToge1xuICAgICAgaW5zdGFuY2VJZFxuICAgIH1cbiAgfSkpLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiB3aXRoTWlkZGxld2FyZVxuICB9KTtcbiAgY29uc3QgYWRkTWlkZGxld2FyZSA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gYWRkTWlkZGxld2FyZTIoLi4ubWlkZGxld2FyZXMpIHtcbiAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlMikgPT4ge1xuICAgICAgZ2V0T3JJbnNlcnRDb21wdXRlZChtaWRkbGV3YXJlTWFwLCBtaWRkbGV3YXJlMiwgY3JlYXRlTWlkZGxld2FyZUVudHJ5KTtcbiAgICB9KTtcbiAgfSwge1xuICAgIHdpdGhUeXBlczogKCkgPT4gYWRkTWlkZGxld2FyZVxuICB9KTtcbiAgY29uc3QgZ2V0RmluYWxNaWRkbGV3YXJlID0gKGFwaSkgPT4ge1xuICAgIGNvbnN0IGFwcGxpZWRNaWRkbGV3YXJlID0gQXJyYXkuZnJvbShtaWRkbGV3YXJlTWFwLnZhbHVlcygpKS5tYXAoKGVudHJ5KSA9PiBnZXRPckluc2VydENvbXB1dGVkKGVudHJ5LmFwcGxpZWQsIGFwaSwgZW50cnkubWlkZGxld2FyZSkpO1xuICAgIHJldHVybiBjb21wb3NlMyguLi5hcHBsaWVkTWlkZGxld2FyZSk7XG4gIH07XG4gIGNvbnN0IGlzV2l0aE1pZGRsZXdhcmUgPSBpc0FsbE9mKHdpdGhNaWRkbGV3YXJlLCBtYXRjaEluc3RhbmNlKGluc3RhbmNlSWQpKTtcbiAgY29uc3QgbWlkZGxld2FyZSA9IChhcGkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgaWYgKGlzV2l0aE1pZGRsZXdhcmUoYWN0aW9uKSkge1xuICAgICAgYWRkTWlkZGxld2FyZSguLi5hY3Rpb24ucGF5bG9hZCk7XG4gICAgICByZXR1cm4gYXBpLmRpc3BhdGNoO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RmluYWxNaWRkbGV3YXJlKGFwaSkobmV4dCkoYWN0aW9uKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBtaWRkbGV3YXJlLFxuICAgIGFkZE1pZGRsZXdhcmUsXG4gICAgd2l0aE1pZGRsZXdhcmUsXG4gICAgaW5zdGFuY2VJZFxuICB9O1xufTtcblxuLy8gc3JjL2NvbWJpbmVTbGljZXMudHNcbmltcG9ydCB7IGNvbWJpbmVSZWR1Y2VycyBhcyBjb21iaW5lUmVkdWNlcnMyIH0gZnJvbSBcInJlZHV4XCI7XG52YXIgaXNTbGljZUxpa2UgPSAobWF5YmVTbGljZUxpa2UpID0+IFwicmVkdWNlclBhdGhcIiBpbiBtYXliZVNsaWNlTGlrZSAmJiB0eXBlb2YgbWF5YmVTbGljZUxpa2UucmVkdWNlclBhdGggPT09IFwic3RyaW5nXCI7XG52YXIgZ2V0UmVkdWNlcnMgPSAoc2xpY2VzKSA9PiBzbGljZXMuZmxhdE1hcCgoc2xpY2VPck1hcCkgPT4gaXNTbGljZUxpa2Uoc2xpY2VPck1hcCkgPyBbW3NsaWNlT3JNYXAucmVkdWNlclBhdGgsIHNsaWNlT3JNYXAucmVkdWNlcl1dIDogT2JqZWN0LmVudHJpZXMoc2xpY2VPck1hcCkpO1xudmFyIE9SSUdJTkFMX1NUQVRFID0gU3ltYm9sLmZvcihcInJ0ay1zdGF0ZS1wcm94eS1vcmlnaW5hbFwiKTtcbnZhciBpc1N0YXRlUHJveHkgPSAodmFsdWUpID0+ICEhdmFsdWUgJiYgISF2YWx1ZVtPUklHSU5BTF9TVEFURV07XG52YXIgc3RhdGVQcm94eU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIGNyZWF0ZVN0YXRlUHJveHkgPSAoc3RhdGUsIHJlZHVjZXJNYXAsIGluaXRpYWxTdGF0ZUNhY2hlKSA9PiBnZXRPckluc2VydENvbXB1dGVkKHN0YXRlUHJveHlNYXAsIHN0YXRlLCAoKSA9PiBuZXcgUHJveHkoc3RhdGUsIHtcbiAgZ2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4ge1xuICAgIGlmIChwcm9wID09PSBPUklHSU5BTF9TVEFURSkgcmV0dXJuIHRhcmdldDtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3QgY2FjaGVkID0gaW5pdGlhbFN0YXRlQ2FjaGVbcHJvcF07XG4gICAgICBpZiAodHlwZW9mIGNhY2hlZCAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGNhY2hlZDtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2VyTWFwW3Byb3BdO1xuICAgICAgaWYgKHJlZHVjZXIpIHtcbiAgICAgICAgY29uc3QgcmVkdWNlclJlc3VsdCA9IHJlZHVjZXIodm9pZCAwLCB7XG4gICAgICAgICAgdHlwZTogbmFub2lkKClcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVkdWNlclJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI0KSA6IGBUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFwiJHtwcm9wLnRvU3RyaW5nKCl9XCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gY2FsbGVkIGZvciBzZWxlY3RvcigpLiBJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGluaXRpYWxTdGF0ZUNhY2hlW3Byb3BdID0gcmVkdWNlclJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlZHVjZXJSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pKTtcbnZhciBvcmlnaW5hbCA9IChzdGF0ZSkgPT4ge1xuICBpZiAoIWlzU3RhdGVQcm94eShzdGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNSkgOiBcIm9yaWdpbmFsIG11c3QgYmUgdXNlZCBvbiBzdGF0ZSBQcm94eVwiKTtcbiAgfVxuICByZXR1cm4gc3RhdGVbT1JJR0lOQUxfU1RBVEVdO1xufTtcbnZhciBlbXB0eU9iamVjdCA9IHt9O1xudmFyIG5vb3BSZWR1Y2VyID0gKHN0YXRlID0gZW1wdHlPYmplY3QpID0+IHN0YXRlO1xuZnVuY3Rpb24gY29tYmluZVNsaWNlcyguLi5zbGljZXMpIHtcbiAgY29uc3QgcmVkdWNlck1hcCA9IE9iamVjdC5mcm9tRW50cmllcyhnZXRSZWR1Y2VycyhzbGljZXMpKTtcbiAgY29uc3QgZ2V0UmVkdWNlciA9ICgpID0+IE9iamVjdC5rZXlzKHJlZHVjZXJNYXApLmxlbmd0aCA/IGNvbWJpbmVSZWR1Y2VyczIocmVkdWNlck1hcCkgOiBub29wUmVkdWNlcjtcbiAgbGV0IHJlZHVjZXIgPSBnZXRSZWR1Y2VyKCk7XG4gIGZ1bmN0aW9uIGNvbWJpbmVkUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgcmV0dXJuIHJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gIH1cbiAgY29tYmluZWRSZWR1Y2VyLndpdGhMYXp5TG9hZGVkU2xpY2VzID0gKCkgPT4gY29tYmluZWRSZWR1Y2VyO1xuICBjb25zdCBpbml0aWFsU3RhdGVDYWNoZSA9IHt9O1xuICBjb25zdCBpbmplY3QgPSAoc2xpY2UsIGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVkdWNlclBhdGgsXG4gICAgICByZWR1Y2VyOiByZWR1Y2VyVG9JbmplY3RcbiAgICB9ID0gc2xpY2U7XG4gICAgY29uc3QgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyTWFwW3JlZHVjZXJQYXRoXTtcbiAgICBpZiAoIWNvbmZpZy5vdmVycmlkZUV4aXN0aW5nICYmIGN1cnJlbnRSZWR1Y2VyICYmIGN1cnJlbnRSZWR1Y2VyICE9PSByZWR1Y2VyVG9JbmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbGxlZCBcXGBpbmplY3RcXGAgdG8gb3ZlcnJpZGUgYWxyZWFkeS1leGlzdGluZyByZWR1Y2VyICR7cmVkdWNlclBhdGh9IHdpdGhvdXQgc3BlY2lmeWluZyBcXGBvdmVycmlkZUV4aXN0aW5nOiB0cnVlXFxgYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZWRSZWR1Y2VyO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm92ZXJyaWRlRXhpc3RpbmcgJiYgY3VycmVudFJlZHVjZXIgIT09IHJlZHVjZXJUb0luamVjdCkge1xuICAgICAgZGVsZXRlIGluaXRpYWxTdGF0ZUNhY2hlW3JlZHVjZXJQYXRoXTtcbiAgICB9XG4gICAgcmVkdWNlck1hcFtyZWR1Y2VyUGF0aF0gPSByZWR1Y2VyVG9JbmplY3Q7XG4gICAgcmVkdWNlciA9IGdldFJlZHVjZXIoKTtcbiAgICByZXR1cm4gY29tYmluZWRSZWR1Y2VyO1xuICB9O1xuICBjb25zdCBzZWxlY3RvciA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gbWFrZVNlbGVjdG9yKHNlbGVjdG9yRm4sIHNlbGVjdFN0YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNlbGVjdG9yMihzdGF0ZSwgLi4uYXJncykge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yRm4oY3JlYXRlU3RhdGVQcm94eShzZWxlY3RTdGF0ZSA/IHNlbGVjdFN0YXRlKHN0YXRlLCAuLi5hcmdzKSA6IHN0YXRlLCByZWR1Y2VyTWFwLCBpbml0aWFsU3RhdGVDYWNoZSksIC4uLmFyZ3MpO1xuICAgIH07XG4gIH0sIHtcbiAgICBvcmlnaW5hbFxuICB9KTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29tYmluZWRSZWR1Y2VyLCB7XG4gICAgaW5qZWN0LFxuICAgIHNlbGVjdG9yXG4gIH0pO1xufVxuXG4vLyBzcmMvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS50c1xuZnVuY3Rpb24gZm9ybWF0UHJvZEVycm9yTWVzc2FnZShjb2RlKSB7XG4gIHJldHVybiBgTWluaWZpZWQgUmVkdXggVG9vbGtpdCBlcnJvciAjJHtjb2RlfTsgdmlzaXQgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9FcnJvcnM/Y29kZT0ke2NvZGV9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuIGA7XG59XG5leHBvcnQge1xuICBSZWR1Y2VyVHlwZSxcbiAgU0hPVUxEX0FVVE9CQVRDSCxcbiAgVGFza0Fib3J0RXJyb3IsXG4gIFR1cGxlLFxuICBhZGRMaXN0ZW5lcixcbiAgYXN5bmNUaHVua0NyZWF0b3IsXG4gIGF1dG9CYXRjaEVuaGFuY2VyLFxuICBidWlsZENyZWF0ZVNsaWNlLFxuICBjbGVhckFsbExpc3RlbmVycyxcbiAgY29tYmluZVNsaWNlcyxcbiAgY29uZmlndXJlU3RvcmUsXG4gIGNyZWF0ZUFjdGlvbixcbiAgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUsXG4gIGNyZWF0ZUFzeW5jVGh1bmssXG4gIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLFxuICBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvckNyZWF0b3IsXG4gIGNyZWF0ZUR5bmFtaWNNaWRkbGV3YXJlLFxuICBjcmVhdGVFbnRpdHlBZGFwdGVyLFxuICBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXG4gIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSxcbiAgcHJvZHVjZSBhcyBjcmVhdGVOZXh0U3RhdGUsXG4gIGNyZWF0ZVJlZHVjZXIsXG4gIGNyZWF0ZVNlbGVjdG9yLFxuICBjcmVhdGVTZWxlY3RvckNyZWF0b3IyIGFzIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcixcbiAgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxuICBjcmVhdGVTbGljZSxcbiAgY3VycmVudDMgYXMgY3VycmVudCxcbiAgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLFxuICBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlLFxuICBmcmVlemUsXG4gIGlzQWN0aW9uQ3JlYXRvcixcbiAgaXNBbGxPZixcbiAgaXNBbnlPZixcbiAgaXNBc3luY1RodW5rQWN0aW9uLFxuICBpc0RyYWZ0NSBhcyBpc0RyYWZ0LFxuICBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbixcbiAgaXNGdWxmaWxsZWQsXG4gIGlzSW1tdXRhYmxlRGVmYXVsdCxcbiAgaXNQZW5kaW5nLFxuICBpc1BsYWluLFxuICBpc1JlamVjdGVkLFxuICBpc1JlamVjdGVkV2l0aFZhbHVlLFxuICBscnVNZW1vaXplLFxuICBtaW5pU2VyaWFsaXplRXJyb3IsXG4gIG5hbm9pZCxcbiAgb3JpZ2luYWwyIGFzIG9yaWdpbmFsLFxuICBwcmVwYXJlQXV0b0JhdGNoZWQsXG4gIHJlbW92ZUxpc3RlbmVyLFxuICB1bndyYXBSZXN1bHQsXG4gIHdlYWtNYXBNZW1vaXplMiBhcyB3ZWFrTWFwTWVtb2l6ZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQubW9kZXJuLm1qcy5tYXAiLCJcInVzZSBjbGllbnRcIjtcbmZ1bmN0aW9uIE10KHQpe2lmKCF0fHx0eXBlb2YgZG9jdW1lbnQ9PVwidW5kZWZpbmVkXCIpcmV0dXJuO2xldCBvPWRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtlLnR5cGU9XCJ0ZXh0L2Nzc1wiLG8uZmlyc3RDaGlsZD9vLmluc2VydEJlZm9yZShlLG8uZmlyc3RDaGlsZCk6by5hcHBlbmRDaGlsZChlKSxlLnN0eWxlU2hlZXQ/ZS5zdHlsZVNoZWV0LmNzc1RleHQ9dDplLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKX1NdChgOnJvb3R7LS10b2FzdGlmeS1jb2xvci1saWdodDogI2ZmZjstLXRvYXN0aWZ5LWNvbG9yLWRhcms6ICMxMjEyMTI7LS10b2FzdGlmeS1jb2xvci1pbmZvOiAjMzQ5OGRiOy0tdG9hc3RpZnktY29sb3Itc3VjY2VzczogIzA3YmMwYzstLXRvYXN0aWZ5LWNvbG9yLXdhcm5pbmc6ICNmMWM0MGY7LS10b2FzdGlmeS1jb2xvci1lcnJvcjogaHNsKDYsIDc4JSwgNTclKTstLXRvYXN0aWZ5LWNvbG9yLXRyYW5zcGFyZW50OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC43KTstLXRvYXN0aWZ5LWljb24tY29sb3ItaW5mbzogdmFyKC0tdG9hc3RpZnktY29sb3ItaW5mbyk7LS10b2FzdGlmeS1pY29uLWNvbG9yLXN1Y2Nlc3M6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLXN1Y2Nlc3MpOy0tdG9hc3RpZnktaWNvbi1jb2xvci13YXJuaW5nOiB2YXIoLS10b2FzdGlmeS1jb2xvci13YXJuaW5nKTstLXRvYXN0aWZ5LWljb24tY29sb3ItZXJyb3I6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLWVycm9yKTstLXRvYXN0aWZ5LWNvbnRhaW5lci13aWR0aDogZml0LWNvbnRlbnQ7LS10b2FzdGlmeS10b2FzdC13aWR0aDogMzIwcHg7LS10b2FzdGlmeS10b2FzdC1vZmZzZXQ6IDE2cHg7LS10b2FzdGlmeS10b2FzdC10b3A6IG1heCh2YXIoLS10b2FzdGlmeS10b2FzdC1vZmZzZXQpLCBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpOy0tdG9hc3RpZnktdG9hc3QtcmlnaHQ6IG1heCh2YXIoLS10b2FzdGlmeS10b2FzdC1vZmZzZXQpLCBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSk7LS10b2FzdGlmeS10b2FzdC1sZWZ0OiBtYXgodmFyKC0tdG9hc3RpZnktdG9hc3Qtb2Zmc2V0KSwgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7LS10b2FzdGlmeS10b2FzdC1ib3R0b206IG1heCh2YXIoLS10b2FzdGlmeS10b2FzdC1vZmZzZXQpLCBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpOy0tdG9hc3RpZnktdG9hc3QtYmFja2dyb3VuZDogI2ZmZjstLXRvYXN0aWZ5LXRvYXN0LXBhZGRpbmc6IDE0cHg7LS10b2FzdGlmeS10b2FzdC1taW4taGVpZ2h0OiA2NHB4Oy0tdG9hc3RpZnktdG9hc3QtbWF4LWhlaWdodDogODAwcHg7LS10b2FzdGlmeS10b2FzdC1iZC1yYWRpdXM6IDZweDstLXRvYXN0aWZ5LXRvYXN0LXNoYWRvdzogMHB4IDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgLjEpOy0tdG9hc3RpZnktZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7LS10b2FzdGlmeS16LWluZGV4OiA5OTk5Oy0tdG9hc3RpZnktdGV4dC1jb2xvci1saWdodDogIzc1NzU3NTstLXRvYXN0aWZ5LXRleHQtY29sb3ItZGFyazogI2ZmZjstLXRvYXN0aWZ5LXRleHQtY29sb3ItaW5mbzogI2ZmZjstLXRvYXN0aWZ5LXRleHQtY29sb3Itc3VjY2VzczogI2ZmZjstLXRvYXN0aWZ5LXRleHQtY29sb3Itd2FybmluZzogI2ZmZjstLXRvYXN0aWZ5LXRleHQtY29sb3ItZXJyb3I6ICNmZmY7LS10b2FzdGlmeS1zcGlubmVyLWNvbG9yOiAjNjE2MTYxOy0tdG9hc3RpZnktc3Bpbm5lci1jb2xvci1lbXB0eS1hcmVhOiAjZTBlMGUwOy0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtbGlnaHQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRjZDk2NCwgIzVhYzhmYSwgIzAwN2FmZiwgIzM0YWFkYywgIzU4NTZkNiwgI2ZmMmQ1NSk7LS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1kYXJrOiAjYmI4NmZjOy0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtaW5mbzogdmFyKC0tdG9hc3RpZnktY29sb3ItaW5mbyk7LS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1zdWNjZXNzOiB2YXIoLS10b2FzdGlmeS1jb2xvci1zdWNjZXNzKTstLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLXdhcm5pbmc6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLXdhcm5pbmcpOy0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtZXJyb3I6IHZhcigtLXRvYXN0aWZ5LWNvbG9yLWVycm9yKTstLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWJnbzogLjJ9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXJ7ei1pbmRleDp2YXIoLS10b2FzdGlmeS16LWluZGV4KTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsdmFyKC0tdG9hc3RpZnktei1pbmRleCkpO3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXRvYXN0aWZ5LWNvbnRhaW5lci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tdG9wLWxlZnR7dG9wOnZhcigtLXRvYXN0aWZ5LXRvYXN0LXRvcCk7bGVmdDp2YXIoLS10b2FzdGlmeS10b2FzdC1sZWZ0KX0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tdG9wLWNlbnRlcnt0b3A6dmFyKC0tdG9hc3RpZnktdG9hc3QtdG9wKTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tdG9wLXJpZ2h0e3RvcDp2YXIoLS10b2FzdGlmeS10b2FzdC10b3ApO3JpZ2h0OnZhcigtLXRvYXN0aWZ5LXRvYXN0LXJpZ2h0KTthbGlnbi1pdGVtczplbmR9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLWJvdHRvbS1sZWZ0e2JvdHRvbTp2YXIoLS10b2FzdGlmeS10b2FzdC1ib3R0b20pO2xlZnQ6dmFyKC0tdG9hc3RpZnktdG9hc3QtbGVmdCl9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLWJvdHRvbS1jZW50ZXJ7Ym90dG9tOnZhcigtLXRvYXN0aWZ5LXRvYXN0LWJvdHRvbSk7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKTthbGlnbi1pdGVtczpjZW50ZXJ9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLWJvdHRvbS1yaWdodHtib3R0b206dmFyKC0tdG9hc3RpZnktdG9hc3QtYm90dG9tKTtyaWdodDp2YXIoLS10b2FzdGlmeS10b2FzdC1yaWdodCk7YWxpZ24taXRlbXM6ZW5kfS5Ub2FzdGlmeV9fdG9hc3R7LS15OiAwO3Bvc2l0aW9uOnJlbGF0aXZlO3RvdWNoLWFjdGlvbjpub25lO3dpZHRoOnZhcigtLXRvYXN0aWZ5LXRvYXN0LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLXRvYXN0aWZ5LXRvYXN0LW1pbi1oZWlnaHQpO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW4tYm90dG9tOjFyZW07cGFkZGluZzp2YXIoLS10b2FzdGlmeS10b2FzdC1wYWRkaW5nKTtib3JkZXItcmFkaXVzOnZhcigtLXRvYXN0aWZ5LXRvYXN0LWJkLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS10b2FzdGlmeS10b2FzdC1zaGFkb3cpO21heC1oZWlnaHQ6dmFyKC0tdG9hc3RpZnktdG9hc3QtbWF4LWhlaWdodCk7Zm9udC1mYW1pbHk6dmFyKC0tdG9hc3RpZnktZm9udC1mYW1pbHkpO3otaW5kZXg6MDtkaXNwbGF5OmZsZXg7ZmxleDoxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstd29yZH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lcnt3aWR0aDoxMDB2dztsZWZ0OmVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7bWFyZ2luOjB9LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXItLXRvcC1sZWZ0LC5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS10b3AtY2VudGVyLC5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS10b3AtcmlnaHR7dG9wOmVudihzYWZlLWFyZWEtaW5zZXQtdG9wKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfS5Ub2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS1ib3R0b20tbGVmdCwuVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tYm90dG9tLWNlbnRlciwuVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tYm90dG9tLXJpZ2h0e2JvdHRvbTplbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tcnRse3JpZ2h0OmVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO2xlZnQ6aW5pdGlhbH0uVG9hc3RpZnlfX3RvYXN0ey0tdG9hc3RpZnktdG9hc3Qtd2lkdGg6IDEwMCU7bWFyZ2luLWJvdHRvbTowO2JvcmRlci1yYWRpdXM6MH19LlRvYXN0aWZ5X190b2FzdC1jb250YWluZXJbZGF0YS1zdGFja2VkPXRydWVde3dpZHRoOnZhcigtLXRvYXN0aWZ5LXRvYXN0LXdpZHRoKX0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2Vke3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCkgc2NhbGUodmFyKC0tcykpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zc30uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtY29sbGFwc2VkXSAuVG9hc3RpZnlfX3RvYXN0LWJvZHksLlRvYXN0aWZ5X190b2FzdC0tc3RhY2tlZFtkYXRhLWNvbGxhcHNlZF0gLlRvYXN0aWZ5X19jbG9zZS1idXR0b257dHJhbnNpdGlvbjpvcGFjaXR5IC4xc30uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtY29sbGFwc2VkPWZhbHNlXXtvdmVyZmxvdzp2aXNpYmxlfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1jb2xsYXBzZWQ9dHJ1ZV06bm90KDpsYXN0LWNoaWxkKT4qe29wYWNpdHk6MH0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkOmFmdGVye2NvbnRlbnQ6XCJcIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nKSAqIDFweCk7Ym90dG9tOjEwMCV9LlRvYXN0aWZ5X190b2FzdC0tc3RhY2tlZFtkYXRhLXBvcz10b3Bde3RvcDowfS5Ub2FzdGlmeV9fdG9hc3QtLXN0YWNrZWRbZGF0YS1wb3M9Ym90XXtib3R0b206MH0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtcG9zPWJvdF0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkOmJlZm9yZXt0cmFuc2Zvcm0tb3JpZ2luOnRvcH0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkW2RhdGEtcG9zPXRvcF0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkOmJlZm9yZXt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbX0uVG9hc3RpZnlfX3RvYXN0LS1zdGFja2VkOmJlZm9yZXtjb250ZW50OlwiXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOnNjYWxlWSgzKTt6LWluZGV4Oi0xfS5Ub2FzdGlmeV9fdG9hc3QtLXJ0bHtkaXJlY3Rpb246cnRsfS5Ub2FzdGlmeV9fdG9hc3QtLWNsb3NlLW9uLWNsaWNre2N1cnNvcjpwb2ludGVyfS5Ub2FzdGlmeV9fdG9hc3QtaWNvbnttYXJnaW4taW5saW5lLWVuZDoxMHB4O3dpZHRoOjIycHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmZsZXh9LlRvYXN0aWZ5LS1hbmltYXRle2FuaW1hdGlvbi1maWxsLW1vZGU6Ym90aDthbmltYXRpb24tZHVyYXRpb246LjVzfS5Ub2FzdGlmeS0tYW5pbWF0ZS1pY29ue2FuaW1hdGlvbi1maWxsLW1vZGU6Ym90aDthbmltYXRpb24tZHVyYXRpb246LjNzfS5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWRhcmt7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1kYXJrKTtjb2xvcjp2YXIoLS10b2FzdGlmeS10ZXh0LWNvbG9yLWRhcmspfS5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWxpZ2h0LC5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3RvYXN0LS1kZWZhdWx0e2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3ItbGlnaHQpO2NvbG9yOnZhcigtLXRvYXN0aWZ5LXRleHQtY29sb3ItbGlnaHQpfS5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3RvYXN0LS1pbmZve2NvbG9yOnZhcigtLXRvYXN0aWZ5LXRleHQtY29sb3ItaW5mbyk7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1pbmZvKX0uVG9hc3RpZnlfX3RvYXN0LXRoZW1lLS1jb2xvcmVkLlRvYXN0aWZ5X190b2FzdC0tc3VjY2Vzc3tjb2xvcjp2YXIoLS10b2FzdGlmeS10ZXh0LWNvbG9yLXN1Y2Nlc3MpO2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3Itc3VjY2Vzcyl9LlRvYXN0aWZ5X190b2FzdC10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fdG9hc3QtLXdhcm5pbmd7Y29sb3I6dmFyKC0tdG9hc3RpZnktdGV4dC1jb2xvci13YXJuaW5nKTtiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXdhcm5pbmcpfS5Ub2FzdGlmeV9fdG9hc3QtdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3RvYXN0LS1lcnJvcntjb2xvcjp2YXIoLS10b2FzdGlmeS10ZXh0LWNvbG9yLWVycm9yKTtiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLWVycm9yKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tbGlnaHR7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1saWdodCl9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLWRhcmt7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1kYXJrKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0taW5mb3tiYWNrZ3JvdW5kOnZhcigtLXRvYXN0aWZ5LWNvbG9yLXByb2dyZXNzLWluZm8pfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3Mtc3VjY2Vzcyl9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy13YXJuaW5nKX0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tZXJyb3J7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci1wcm9ncmVzcy1lcnJvcil9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0taW5mbywuVG9hc3RpZnlfX3Byb2dyZXNzLWJhci10aGVtZS0tY29sb3JlZC5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1zdWNjZXNzLC5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLXRoZW1lLS1jb2xvcmVkLlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXdhcm5pbmcsLlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLWNvbG9yZWQuVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tZXJyb3J7YmFja2dyb3VuZDp2YXIoLS10b2FzdGlmeS1jb2xvci10cmFuc3BhcmVudCl9LlRvYXN0aWZ5X19jbG9zZS1idXR0b257Y29sb3I6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NnB4O3JpZ2h0OjZweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNzt0cmFuc2l0aW9uOi4zcyBlYXNlO3otaW5kZXg6MX0uVG9hc3RpZnlfX3RvYXN0LS1ydGwgLlRvYXN0aWZ5X19jbG9zZS1idXR0b257bGVmdDo2cHg7cmlnaHQ6dW5zZXR9LlRvYXN0aWZ5X19jbG9zZS1idXR0b24tLWxpZ2h0e2NvbG9yOiMwMDA7b3BhY2l0eTouM30uVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbj5zdmd7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjE2cHg7d2lkdGg6MTRweH0uVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbjpob3ZlciwuVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbjpmb2N1c3tvcGFjaXR5OjF9QGtleWZyYW1lcyBUb2FzdGlmeV9fdHJhY2tQcm9ncmVzc3swJXt0cmFuc2Zvcm06c2NhbGVYKDEpfXRve3RyYW5zZm9ybTpzY2FsZVgoMCl9fS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtvcGFjaXR5Oi43O3RyYW5zZm9ybS1vcmlnaW46bGVmdH0uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tYW5pbWF0ZWR7YW5pbWF0aW9uOlRvYXN0aWZ5X190cmFja1Byb2dyZXNzIGxpbmVhciAxIGZvcndhcmRzfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1jb250cm9sbGVke3RyYW5zaXRpb246dHJhbnNmb3JtIC4yc30uVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tcnRse3JpZ2h0OjA7bGVmdDppbml0aWFsO3RyYW5zZm9ybS1vcmlnaW46cmlnaHQ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czppbml0aWFsfS5Ub2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS13cnB7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDo1cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS10b2FzdGlmeS10b2FzdC1iZC1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLXRvYXN0aWZ5LXRvYXN0LWJkLXJhZGl1cyl9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLXdycFtkYXRhLWhpZGRlbj10cnVlXXtvcGFjaXR5OjB9LlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLWJne29wYWNpdHk6dmFyKC0tdG9hc3RpZnktY29sb3ItcHJvZ3Jlc3MtYmdvKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5Ub2FzdGlmeV9fc3Bpbm5lcnt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXItY29sb3I6dmFyKC0tdG9hc3RpZnktc3Bpbm5lci1jb2xvci1lbXB0eS1hcmVhKTtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tdG9hc3RpZnktc3Bpbm5lci1jb2xvcik7YW5pbWF0aW9uOlRvYXN0aWZ5X19zcGluIC42NXMgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZUluUmlnaHR7MCUsNjAlLDc1JSw5MCUsdG97YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDMwMDBweCwwLDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0yNXB4LDAsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMHB4LDAsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNXB4LDAsMCl9dG97dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZU91dFJpZ2h0ezIwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0yMHB4LHZhcigtLXkpLDApfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMjAwMHB4LHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19ib3VuY2VJbkxlZnR7MCUsNjAlLDc1JSw5MCUsdG97YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0zMDAwcHgsMCwwKX02MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyNXB4LDAsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTBweCwwLDApfTkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoNXB4LDAsMCl9dG97dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZU91dExlZnR7MjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMjBweCx2YXIoLS15KSwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0yMDAwcHgsdmFyKC0teSksMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZUluVXB7MCUsNjAlLDc1JSw5MCUsdG97YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMzAwMHB4LDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDEwcHgsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC01cHgsMCl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZU91dFVwezIwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCxjYWxjKHZhcigtLXkpIC0gMTBweCksMCl9NDAlLDQ1JXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYyh2YXIoLS15KSArIDIwcHgpLDApfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjAwMHB4LDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19ib3VuY2VJbkRvd257MCUsNjAlLDc1JSw5MCUsdG97YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTMwMDBweCwwKX02MCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDI1cHgsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMHB4LDApfTkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCw1cHgsMCl9dG97dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2JvdW5jZU91dERvd257MjAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGModmFyKC0teSkgLSAxMHB4KSwwKX00MCUsNDUle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCxjYWxjKHZhcigtLXkpICsgMjBweCksMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDIwMDBweCwwKX19LlRvYXN0aWZ5X19ib3VuY2UtZW50ZXItLXRvcC1sZWZ0LC5Ub2FzdGlmeV9fYm91bmNlLWVudGVyLS1ib3R0b20tbGVmdHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlSW5MZWZ0fS5Ub2FzdGlmeV9fYm91bmNlLWVudGVyLS10b3AtcmlnaHQsLlRvYXN0aWZ5X19ib3VuY2UtZW50ZXItLWJvdHRvbS1yaWdodHthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlSW5SaWdodH0uVG9hc3RpZnlfX2JvdW5jZS1lbnRlci0tdG9wLWNlbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fYm91bmNlSW5Eb3dufS5Ub2FzdGlmeV9fYm91bmNlLWVudGVyLS1ib3R0b20tY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19ib3VuY2VJblVwfS5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLXRvcC1sZWZ0LC5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLWJvdHRvbS1sZWZ0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19ib3VuY2VPdXRMZWZ0fS5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLXRvcC1yaWdodCwuVG9hc3RpZnlfX2JvdW5jZS1leGl0LS1ib3R0b20tcmlnaHR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2JvdW5jZU91dFJpZ2h0fS5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLXRvcC1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2JvdW5jZU91dFVwfS5Ub2FzdGlmeV9fYm91bmNlLWV4aXQtLWJvdHRvbS1jZW50ZXJ7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX2JvdW5jZU91dERvd259QGtleWZyYW1lcyBUb2FzdGlmeV9fem9vbUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUzZCguMywuMywuMyl9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBUb2FzdGlmeV9fem9vbU91dHswJXtvcGFjaXR5OjF9NTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKSBzY2FsZTNkKC4zLC4zLC4zKX10b3tvcGFjaXR5OjB9fS5Ub2FzdGlmeV9fem9vbS1lbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fem9vbUlufS5Ub2FzdGlmeV9fem9vbS1leGl0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X196b29tT3V0fUBrZXlmcmFtZXMgVG9hc3RpZnlfX2ZsaXBJbnswJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoOTBkZWcpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjtvcGFjaXR5OjB9NDAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgtMjBkZWcpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn02MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKDEwZGVnKTtvcGFjaXR5OjF9ODAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgtNWRlZyl9dG97dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KX19QGtleWZyYW1lcyBUb2FzdGlmeV9fZmxpcE91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKSBwZXJzcGVjdGl2ZSg0MDBweCl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApIHBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKC0yMGRlZyk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApIHBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKDkwZGVnKTtvcGFjaXR5OjB9fS5Ub2FzdGlmeV9fZmxpcC1lbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fZmxpcElufS5Ub2FzdGlmeV9fZmxpcC1leGl0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19mbGlwT3V0fUBrZXlmcmFtZXMgVG9hc3RpZnlfX3NsaWRlSW5SaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTEwJSwwLDApO3Zpc2liaWxpdHk6dmlzaWJsZX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVJbkxlZnR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMTAlLDAsMCk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZUluVXB7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTEwJSwwKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsdmFyKC0teSksMCl9fUBrZXlmcmFtZXMgVG9hc3RpZnlfX3NsaWRlSW5Eb3duezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMTAlLDApO3Zpc2liaWxpdHk6dmlzaWJsZX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVPdXRSaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCx2YXIoLS15KSwwKX10b3t2aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTEwJSx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVPdXRMZWZ0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTEwJSx2YXIoLS15KSwwKX19QGtleWZyYW1lcyBUb2FzdGlmeV9fc2xpZGVPdXREb3duezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDUwMHB4LDApfX1Aa2V5ZnJhbWVzIFRvYXN0aWZ5X19zbGlkZU91dFVwezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLHZhcigtLXkpLDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC01MDBweCwwKX19LlRvYXN0aWZ5X19zbGlkZS1lbnRlci0tdG9wLWxlZnQsLlRvYXN0aWZ5X19zbGlkZS1lbnRlci0tYm90dG9tLWxlZnR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlSW5MZWZ0fS5Ub2FzdGlmeV9fc2xpZGUtZW50ZXItLXRvcC1yaWdodCwuVG9hc3RpZnlfX3NsaWRlLWVudGVyLS1ib3R0b20tcmlnaHR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlSW5SaWdodH0uVG9hc3RpZnlfX3NsaWRlLWVudGVyLS10b3AtY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19zbGlkZUluRG93bn0uVG9hc3RpZnlfX3NsaWRlLWVudGVyLS1ib3R0b20tY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19zbGlkZUluVXB9LlRvYXN0aWZ5X19zbGlkZS1leGl0LS10b3AtbGVmdCwuVG9hc3RpZnlfX3NsaWRlLWV4aXQtLWJvdHRvbS1sZWZ0e2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19zbGlkZU91dExlZnQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9LlRvYXN0aWZ5X19zbGlkZS1leGl0LS10b3AtcmlnaHQsLlRvYXN0aWZ5X19zbGlkZS1leGl0LS1ib3R0b20tcmlnaHR7YW5pbWF0aW9uLW5hbWU6VG9hc3RpZnlfX3NsaWRlT3V0UmlnaHQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9LlRvYXN0aWZ5X19zbGlkZS1leGl0LS10b3AtY2VudGVye2FuaW1hdGlvbi1uYW1lOlRvYXN0aWZ5X19zbGlkZU91dFVwO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjthbmltYXRpb24tZHVyYXRpb246LjNzfS5Ub2FzdGlmeV9fc2xpZGUtZXhpdC0tYm90dG9tLWNlbnRlcnthbmltYXRpb24tbmFtZTpUb2FzdGlmeV9fc2xpZGVPdXREb3duO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjthbmltYXRpb24tZHVyYXRpb246LjNzfUBrZXlmcmFtZXMgVG9hc3RpZnlfX3NwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fVxuYCk7aW1wb3J0e2lzVmFsaWRFbGVtZW50IGFzICR0fWZyb21cInJlYWN0XCI7dmFyIEw9dD0+dHlwZW9mIHQ9PVwibnVtYmVyXCImJiFpc05hTih0KSxOPXQ9PnR5cGVvZiB0PT1cInN0cmluZ1wiLFA9dD0+dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIixtdD10PT5OKHQpfHxMKHQpLEI9dD0+Tih0KXx8UCh0KT90Om51bGwscHQ9KHQsbyk9PnQ9PT0hMXx8TCh0KSYmdD4wP3Q6byx6PXQ9PiR0KHQpfHxOKHQpfHxQKHQpfHxMKHQpO2ltcG9ydCB1dCx7dXNlRWZmZWN0IGFzIFJ0LHVzZUxheW91dEVmZmVjdCBhcyBCdCx1c2VSZWYgYXMgenR9ZnJvbVwicmVhY3RcIjtmdW5jdGlvbiBaKHQsbyxlPTMwMCl7bGV0e3Njcm9sbEhlaWdodDpyLHN0eWxlOnN9PXQ7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cy5taW5IZWlnaHQ9XCJpbml0aWFsXCIscy5oZWlnaHQ9citcInB4XCIscy50cmFuc2l0aW9uPWBhbGwgJHtlfW1zYCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntzLmhlaWdodD1cIjBcIixzLnBhZGRpbmc9XCIwXCIscy5tYXJnaW49XCIwXCIsc2V0VGltZW91dChvLGUpfSl9KX1mdW5jdGlvbiAkKHtlbnRlcjp0LGV4aXQ6byxhcHBlbmRQb3NpdGlvbjplPSExLGNvbGxhcHNlOnI9ITAsY29sbGFwc2VEdXJhdGlvbjpzPTMwMH0pe3JldHVybiBmdW5jdGlvbih7Y2hpbGRyZW46YSxwb3NpdGlvbjpkLHByZXZlbnRFeGl0VHJhbnNpdGlvbjpjLGRvbmU6VCxub2RlUmVmOmcsaXNJbjp2LHBsYXlUb2FzdDp4fSl7bGV0IEM9ZT9gJHt0fS0tJHtkfWA6dCxTPWU/YCR7b30tLSR7ZH1gOm8sRT16dCgwKTtyZXR1cm4gQnQoKCk9PntsZXQgZj1nLmN1cnJlbnQscD1DLnNwbGl0KFwiIFwiKSxiPW49PntuLnRhcmdldD09PWcuY3VycmVudCYmKHgoKSxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25lbmRcIixiKSxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25jYW5jZWxcIixiKSxFLmN1cnJlbnQ9PT0wJiZuLnR5cGUhPT1cImFuaW1hdGlvbmNhbmNlbFwiJiZmLmNsYXNzTGlzdC5yZW1vdmUoLi4ucCkpfTsoKCk9PntmLmNsYXNzTGlzdC5hZGQoLi4ucCksZi5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIsYiksZi5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uY2FuY2VsXCIsYil9KSgpfSxbXSksUnQoKCk9PntsZXQgZj1nLmN1cnJlbnQscD0oKT0+e2YucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLHApLHI/WihmLFQscyk6VCgpfTt2fHwoYz9wKCk6KCgpPT57RS5jdXJyZW50PTEsZi5jbGFzc05hbWUrPWAgJHtTfWAsZi5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIscCl9KSgpKX0sW3ZdKSx1dC5jcmVhdGVFbGVtZW50KHV0LkZyYWdtZW50LG51bGwsYSl9fWltcG9ydHtjbG9uZUVsZW1lbnQgYXMgRnQsaXNWYWxpZEVsZW1lbnQgYXMgVXR9ZnJvbVwicmVhY3RcIjtmdW5jdGlvbiBKKHQsbyl7cmV0dXJue2NvbnRlbnQ6dHQodC5jb250ZW50LHQucHJvcHMpLGNvbnRhaW5lcklkOnQucHJvcHMuY29udGFpbmVySWQsaWQ6dC5wcm9wcy50b2FzdElkLHRoZW1lOnQucHJvcHMudGhlbWUsdHlwZTp0LnByb3BzLnR5cGUsZGF0YTp0LnByb3BzLmRhdGF8fHt9LGlzTG9hZGluZzp0LnByb3BzLmlzTG9hZGluZyxpY29uOnQucHJvcHMuaWNvbixyZWFzb246dC5yZW1vdmFsUmVhc29uLHN0YXR1czpvfX1mdW5jdGlvbiB0dCh0LG8sZT0hMSl7cmV0dXJuIFV0KHQpJiYhTih0LnR5cGUpP0Z0KHQse2Nsb3NlVG9hc3Q6by5jbG9zZVRvYXN0LHRvYXN0UHJvcHM6byxkYXRhOm8uZGF0YSxpc1BhdXNlZDplfSk6UCh0KT90KHtjbG9zZVRvYXN0Om8uY2xvc2VUb2FzdCx0b2FzdFByb3BzOm8sZGF0YTpvLmRhdGEsaXNQYXVzZWQ6ZX0pOnR9aW1wb3J0IG90IGZyb21cInJlYWN0XCI7ZnVuY3Rpb24geXQoe2Nsb3NlVG9hc3Q6dCx0aGVtZTpvLGFyaWFMYWJlbDplPVwiY2xvc2VcIn0pe3JldHVybiBvdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2NsYXNzTmFtZTpgVG9hc3RpZnlfX2Nsb3NlLWJ1dHRvbiBUb2FzdGlmeV9fY2xvc2UtYnV0dG9uLS0ke299YCx0eXBlOlwiYnV0dG9uXCIsb25DbGljazpyPT57ci5zdG9wUHJvcGFnYXRpb24oKSx0KCEwKX0sXCJhcmlhLWxhYmVsXCI6ZX0sb3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsdmlld0JveDpcIjAgMCAxNCAxNlwifSxvdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixkOlwiTTcuNzEgOC4yM2wzLjc1IDMuNzUtMS40OCAxLjQ4LTMuNzUtMy43NS0zLjc1IDMuNzVMMSAxMS45OGwzLjc1LTMuNzVMMSA0LjQ4IDIuNDggM2wzLjc1IDMuNzVMOS45OCAzbDEuNDggMS40OC0zLjc1IDMuNzV6XCJ9KSkpfWltcG9ydCBldCBmcm9tXCJyZWFjdFwiO2ltcG9ydCBUdCBmcm9tXCJjbHN4XCI7ZnVuY3Rpb24gZ3Qoe2RlbGF5OnQsaXNSdW5uaW5nOm8sY2xvc2VUb2FzdDplLHR5cGU6cj1cImRlZmF1bHRcIixoaWRlOnMsY2xhc3NOYW1lOmwsY29udHJvbGxlZFByb2dyZXNzOmEscHJvZ3Jlc3M6ZCxydGw6Yyxpc0luOlQsdGhlbWU6Z30pe2xldCB2PXN8fGEmJmQ9PT0wLHg9e2FuaW1hdGlvbkR1cmF0aW9uOmAke3R9bXNgLGFuaW1hdGlvblBsYXlTdGF0ZTpvP1wicnVubmluZ1wiOlwicGF1c2VkXCJ9O2EmJih4LnRyYW5zZm9ybT1gc2NhbGVYKCR7ZH0pYCk7bGV0IEM9VHQoXCJUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyXCIsYT9cIlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLWNvbnRyb2xsZWRcIjpcIlRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLWFuaW1hdGVkXCIsYFRvYXN0aWZ5X19wcm9ncmVzcy1iYXItdGhlbWUtLSR7Z31gLGBUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS0ke3J9YCx7W1wiVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0tcnRsXCJdOmN9KSxTPVAobCk/bCh7cnRsOmMsdHlwZTpyLGRlZmF1bHRDbGFzc05hbWU6Q30pOlR0KEMsbCksRT17W2EmJmQ+PTE/XCJvblRyYW5zaXRpb25FbmRcIjpcIm9uQW5pbWF0aW9uRW5kXCJdOmEmJmQ8MT9udWxsOigpPT57VCYmZSgpfX07cmV0dXJuIGV0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiVG9hc3RpZnlfX3Byb2dyZXNzLWJhci0td3JwXCIsXCJkYXRhLWhpZGRlblwiOnZ9LGV0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOmBUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLS1iZyBUb2FzdGlmeV9fcHJvZ3Jlc3MtYmFyLXRoZW1lLS0ke2d9IFRvYXN0aWZ5X19wcm9ncmVzcy1iYXItLSR7cn1gfSksZXQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtyb2xlOlwicHJvZ3Jlc3NiYXJcIixcImFyaWEtaGlkZGVuXCI6dj9cInRydWVcIjpcImZhbHNlXCIsXCJhcmlhLWxhYmVsXCI6XCJub3RpZmljYXRpb24gdGltZXJcIixjbGFzc05hbWU6UyxzdHlsZTp4LC4uLkV9KSl9aW1wb3J0IER0IGZyb21cImNsc3hcIjtpbXBvcnQgY3Qse3VzZUVmZmVjdCBhcyB5byx1c2VSZWYgYXMgVG8sdXNlU3RhdGUgYXMgZ299ZnJvbVwicmVhY3RcIjt2YXIgWHQ9MSxhdD0oKT0+YCR7WHQrK31gO2Z1bmN0aW9uIF90KHQsbyxlKXtsZXQgcj0xLHM9MCxsPVtdLGE9W10sZD1vLGM9bmV3IE1hcCxUPW5ldyBTZXQsZz1pPT4oVC5hZGQoaSksKCk9PlQuZGVsZXRlKGkpKSx2PSgpPT57YT1BcnJheS5mcm9tKGMudmFsdWVzKCkpLFQuZm9yRWFjaChpPT5pKCkpfSx4PSh7Y29udGFpbmVySWQ6aSx0b2FzdElkOm4sdXBkYXRlSWQ6dX0pPT57bGV0IGg9aT9pIT09dDp0IT09MSxtPWMuaGFzKG4pJiZ1PT1udWxsO3JldHVybiBofHxtfSxDPShpLG4pPT57Yy5mb3JFYWNoKHU9Pnt2YXIgaDsobj09bnVsbHx8bj09PXUucHJvcHMudG9hc3RJZCkmJigoaD11LnRvZ2dsZSk9PW51bGx8fGguY2FsbCh1LGkpKX0pfSxTPWk9Pnt2YXIgbix1Oyh1PShuPWkucHJvcHMpPT1udWxsP3ZvaWQgMDpuLm9uQ2xvc2UpPT1udWxsfHx1LmNhbGwobixpLnJlbW92YWxSZWFzb24pLGkuaXNBY3RpdmU9ITF9LEU9aT0+e2lmKGk9PW51bGwpYy5mb3JFYWNoKFMpO2Vsc2V7bGV0IG49Yy5nZXQoaSk7biYmUyhuKX12KCl9LGY9KCk9PntzLT1sLmxlbmd0aCxsPVtdfSxwPWk9Pnt2YXIgbSxfO2xldHt0b2FzdElkOm4sdXBkYXRlSWQ6dX09aS5wcm9wcyxoPXU9PW51bGw7aS5zdGFsZUlkJiZjLmRlbGV0ZShpLnN0YWxlSWQpLGkuaXNBY3RpdmU9ITAsYy5zZXQobixpKSx2KCksZShKKGksaD9cImFkZGVkXCI6XCJ1cGRhdGVkXCIpKSxoJiYoKF89KG09aS5wcm9wcykub25PcGVuKT09bnVsbHx8Xy5jYWxsKG0pKX07cmV0dXJue2lkOnQscHJvcHM6ZCxvYnNlcnZlOmcsdG9nZ2xlOkMscmVtb3ZlVG9hc3Q6RSx0b2FzdHM6YyxjbGVhclF1ZXVlOmYsYnVpbGRUb2FzdDooaSxuKT0+e2lmKHgobikpcmV0dXJuO2xldHt0b2FzdElkOnUsdXBkYXRlSWQ6aCxkYXRhOm0sc3RhbGVJZDpfLGRlbGF5Omt9PW4sTT1oPT1udWxsO00mJnMrKztsZXQgQT17Li4uZCxzdHlsZTpkLnRvYXN0U3R5bGUsa2V5OnIrKywuLi5PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikuZmlsdGVyKChbRCxZXSk9PlkhPW51bGwpKSx0b2FzdElkOnUsdXBkYXRlSWQ6aCxkYXRhOm0saXNJbjohMSxjbGFzc05hbWU6QihuLmNsYXNzTmFtZXx8ZC50b2FzdENsYXNzTmFtZSkscHJvZ3Jlc3NDbGFzc05hbWU6QihuLnByb2dyZXNzQ2xhc3NOYW1lfHxkLnByb2dyZXNzQ2xhc3NOYW1lKSxhdXRvQ2xvc2U6bi5pc0xvYWRpbmc/ITE6cHQobi5hdXRvQ2xvc2UsZC5hdXRvQ2xvc2UpLGNsb3NlVG9hc3QoRCl7Yy5nZXQodSkucmVtb3ZhbFJlYXNvbj1ELEUodSl9LGRlbGV0ZVRvYXN0KCl7bGV0IEQ9Yy5nZXQodSk7aWYoRCE9bnVsbCl7aWYoZShKKEQsXCJyZW1vdmVkXCIpKSxjLmRlbGV0ZSh1KSxzLS0sczwwJiYocz0wKSxsLmxlbmd0aD4wKXtwKGwuc2hpZnQoKSk7cmV0dXJufXYoKX19fTtBLmNsb3NlQnV0dG9uPWQuY2xvc2VCdXR0b24sbi5jbG9zZUJ1dHRvbj09PSExfHx6KG4uY2xvc2VCdXR0b24pP0EuY2xvc2VCdXR0b249bi5jbG9zZUJ1dHRvbjpuLmNsb3NlQnV0dG9uPT09ITAmJihBLmNsb3NlQnV0dG9uPXooZC5jbG9zZUJ1dHRvbik/ZC5jbG9zZUJ1dHRvbjohMCk7bGV0IFI9e2NvbnRlbnQ6aSxwcm9wczpBLHN0YWxlSWQ6X307ZC5saW1pdCYmZC5saW1pdD4wJiZzPmQubGltaXQmJk0/bC5wdXNoKFIpOkwoayk/c2V0VGltZW91dCgoKT0+e3AoUil9LGspOnAoUil9LHNldFByb3BzKGkpe2Q9aX0sc2V0VG9nZ2xlOihpLG4pPT57bGV0IHU9Yy5nZXQoaSk7dSYmKHUudG9nZ2xlPW4pfSxpc1RvYXN0QWN0aXZlOmk9Pnt2YXIgbjtyZXR1cm4obj1jLmdldChpKSk9PW51bGw/dm9pZCAwOm4uaXNBY3RpdmV9LGdldFNuYXBzaG90OigpPT5hfX12YXIgST1uZXcgTWFwLEY9W10sc3Q9bmV3IFNldCxWdD10PT5zdC5mb3JFYWNoKG89Pm8odCkpLGJ0PSgpPT5JLnNpemU+MDtmdW5jdGlvbiBRdCgpe0YuZm9yRWFjaCh0PT5udCh0LmNvbnRlbnQsdC5vcHRpb25zKSksRj1bXX12YXIgdnQ9KHQse2NvbnRhaW5lcklkOm99KT0+e3ZhciBlO3JldHVybihlPUkuZ2V0KG98fDEpKT09bnVsbD92b2lkIDA6ZS50b2FzdHMuZ2V0KHQpfTtmdW5jdGlvbiBYKHQsbyl7dmFyIHI7aWYobylyZXR1cm4hISgocj1JLmdldChvKSkhPW51bGwmJnIuaXNUb2FzdEFjdGl2ZSh0KSk7bGV0IGU9ITE7cmV0dXJuIEkuZm9yRWFjaChzPT57cy5pc1RvYXN0QWN0aXZlKHQpJiYoZT0hMCl9KSxlfWZ1bmN0aW9uIGh0KHQpe2lmKCFidCgpKXtGPUYuZmlsdGVyKG89PnQhPW51bGwmJm8ub3B0aW9ucy50b2FzdElkIT09dCk7cmV0dXJufWlmKHQ9PW51bGx8fG10KHQpKUkuZm9yRWFjaChvPT57by5yZW1vdmVUb2FzdCh0KX0pO2Vsc2UgaWYodCYmKFwiY29udGFpbmVySWRcImluIHR8fFwiaWRcImluIHQpKXtsZXQgbz1JLmdldCh0LmNvbnRhaW5lcklkKTtvP28ucmVtb3ZlVG9hc3QodC5pZCk6SS5mb3JFYWNoKGU9PntlLnJlbW92ZVRvYXN0KHQuaWQpfSl9fXZhciBDdD0odD17fSk9PntJLmZvckVhY2gobz0+e28ucHJvcHMubGltaXQmJighdC5jb250YWluZXJJZHx8by5pZD09PXQuY29udGFpbmVySWQpJiZvLmNsZWFyUXVldWUoKX0pfTtmdW5jdGlvbiBudCh0LG8pe3oodCkmJihidCgpfHxGLnB1c2goe2NvbnRlbnQ6dCxvcHRpb25zOm99KSxJLmZvckVhY2goZT0+e2UuYnVpbGRUb2FzdCh0LG8pfSkpfWZ1bmN0aW9uIHh0KHQpe3ZhciBvOyhvPUkuZ2V0KHQuY29udGFpbmVySWR8fDEpKT09bnVsbHx8by5zZXRUb2dnbGUodC5pZCx0LmZuKX1mdW5jdGlvbiBydCh0LG8pe0kuZm9yRWFjaChlPT57KG89PW51bGx8fCEobyE9bnVsbCYmby5jb250YWluZXJJZCl8fChvPT1udWxsP3ZvaWQgMDpvLmNvbnRhaW5lcklkKT09PWUuaWQpJiZlLnRvZ2dsZSh0LG89PW51bGw/dm9pZCAwOm8uaWQpfSl9ZnVuY3Rpb24gRXQodCl7bGV0IG89dC5jb250YWluZXJJZHx8MTtyZXR1cm57c3Vic2NyaWJlKGUpe2xldCByPV90KG8sdCxWdCk7SS5zZXQobyxyKTtsZXQgcz1yLm9ic2VydmUoZSk7cmV0dXJuIFF0KCksKCk9PntzKCksSS5kZWxldGUobyl9fSxzZXRQcm9wcyhlKXt2YXIgcjsocj1JLmdldChvKSk9PW51bGx8fHIuc2V0UHJvcHMoZSl9LGdldFNuYXBzaG90KCl7dmFyIGU7cmV0dXJuKGU9SS5nZXQobykpPT1udWxsP3ZvaWQgMDplLmdldFNuYXBzaG90KCl9fX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gc3QuYWRkKHQpLCgpPT57c3QuZGVsZXRlKHQpfX1mdW5jdGlvbiBXdCh0KXtyZXR1cm4gdCYmKE4odC50b2FzdElkKXx8TCh0LnRvYXN0SWQpKT90LnRvYXN0SWQ6YXQoKX1mdW5jdGlvbiBVKHQsbyl7cmV0dXJuIG50KHQsbyksby50b2FzdElkfWZ1bmN0aW9uIFYodCxvKXtyZXR1cm57Li4ubyx0eXBlOm8mJm8udHlwZXx8dCx0b2FzdElkOld0KG8pfX1mdW5jdGlvbiBRKHQpe3JldHVybihvLGUpPT5VKG8sVih0LGUpKX1mdW5jdGlvbiB5KHQsbyl7cmV0dXJuIFUodCxWKFwiZGVmYXVsdFwiLG8pKX15LmxvYWRpbmc9KHQsbyk9PlUodCxWKFwiZGVmYXVsdFwiLHtpc0xvYWRpbmc6ITAsYXV0b0Nsb3NlOiExLGNsb3NlT25DbGljazohMSxjbG9zZUJ1dHRvbjohMSxkcmFnZ2FibGU6ITEsLi4ub30pKTtmdW5jdGlvbiBHdCh0LHtwZW5kaW5nOm8sZXJyb3I6ZSxzdWNjZXNzOnJ9LHMpe2xldCBsO28mJihsPU4obyk/eS5sb2FkaW5nKG8scyk6eS5sb2FkaW5nKG8ucmVuZGVyLHsuLi5zLC4uLm99KSk7bGV0IGE9e2lzTG9hZGluZzpudWxsLGF1dG9DbG9zZTpudWxsLGNsb3NlT25DbGljazpudWxsLGNsb3NlQnV0dG9uOm51bGwsZHJhZ2dhYmxlOm51bGx9LGQ9KFQsZyx2KT0+e2lmKGc9PW51bGwpe3kuZGlzbWlzcyhsKTtyZXR1cm59bGV0IHg9e3R5cGU6VCwuLi5hLC4uLnMsZGF0YTp2fSxDPU4oZyk/e3JlbmRlcjpnfTpnO3JldHVybiBsP3kudXBkYXRlKGwsey4uLngsLi4uQ30pOnkoQy5yZW5kZXIsey4uLngsLi4uQ30pLHZ9LGM9UCh0KT90KCk6dDtyZXR1cm4gYy50aGVuKFQ9PmQoXCJzdWNjZXNzXCIscixUKSkuY2F0Y2goVD0+ZChcImVycm9yXCIsZSxUKSksY315LnByb21pc2U9R3Q7eS5zdWNjZXNzPVEoXCJzdWNjZXNzXCIpO3kuaW5mbz1RKFwiaW5mb1wiKTt5LmVycm9yPVEoXCJlcnJvclwiKTt5Lndhcm5pbmc9UShcIndhcm5pbmdcIik7eS53YXJuPXkud2FybmluZzt5LmRhcms9KHQsbyk9PlUodCxWKFwiZGVmYXVsdFwiLHt0aGVtZTpcImRhcmtcIiwuLi5vfSkpO2Z1bmN0aW9uIHF0KHQpe2h0KHQpfXkuZGlzbWlzcz1xdDt5LmNsZWFyV2FpdGluZ1F1ZXVlPUN0O3kuaXNBY3RpdmU9WDt5LnVwZGF0ZT0odCxvPXt9KT0+e2xldCBlPXZ0KHQsbyk7aWYoZSl7bGV0e3Byb3BzOnIsY29udGVudDpzfT1lLGw9e2RlbGF5OjEwMCwuLi5yLC4uLm8sdG9hc3RJZDpvLnRvYXN0SWR8fHQsdXBkYXRlSWQ6YXQoKX07bC50b2FzdElkIT09dCYmKGwuc3RhbGVJZD10KTtsZXQgYT1sLnJlbmRlcnx8cztkZWxldGUgbC5yZW5kZXIsVShhLGwpfX07eS5kb25lPXQ9Pnt5LnVwZGF0ZSh0LHtwcm9ncmVzczoxfSl9O3kub25DaGFuZ2U9UHQ7eS5wbGF5PXQ9PnJ0KCEwLHQpO3kucGF1c2U9dD0+cnQoITEsdCk7aW1wb3J0e3VzZVJlZiBhcyBLdCx1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhcyBZdH1mcm9tXCJyZWFjdFwiO2Z1bmN0aW9uIEl0KHQpe3ZhciBhO2xldHtzdWJzY3JpYmU6byxnZXRTbmFwc2hvdDplLHNldFByb3BzOnJ9PUt0KEV0KHQpKS5jdXJyZW50O3IodCk7bGV0IHM9KGE9WXQobyxlLGUpKT09bnVsbD92b2lkIDA6YS5zbGljZSgpO2Z1bmN0aW9uIGwoZCl7aWYoIXMpcmV0dXJuW107bGV0IGM9bmV3IE1hcDtyZXR1cm4gdC5uZXdlc3RPblRvcCYmcy5yZXZlcnNlKCkscy5mb3JFYWNoKFQ9PntsZXR7cG9zaXRpb246Z309VC5wcm9wcztjLmhhcyhnKXx8Yy5zZXQoZyxbXSksYy5nZXQoZykucHVzaChUKX0pLEFycmF5LmZyb20oYyxUPT5kKFRbMF0sVFsxXSkpfXJldHVybntnZXRUb2FzdFRvUmVuZGVyOmwsaXNUb2FzdEFjdGl2ZTpYLGNvdW50OnM9PW51bGw/dm9pZCAwOnMubGVuZ3RofX1pbXBvcnR7dXNlRWZmZWN0IGFzIFp0LHVzZVJlZiBhcyBTdCx1c2VTdGF0ZSBhcyBrdH1mcm9tXCJyZWFjdFwiO2Z1bmN0aW9uIEF0KHQpe2xldFtvLGVdPWt0KCExKSxbcixzXT1rdCghMSksbD1TdChudWxsKSxhPVN0KHtzdGFydDowLGRlbHRhOjAscmVtb3ZhbERpc3RhbmNlOjAsY2FuQ2xvc2VPbkNsaWNrOiEwLGNhbkRyYWc6ITEsZGlkTW92ZTohMX0pLmN1cnJlbnQse2F1dG9DbG9zZTpkLHBhdXNlT25Ib3ZlcjpjLGNsb3NlVG9hc3Q6VCxvbkNsaWNrOmcsY2xvc2VPbkNsaWNrOnZ9PXQ7eHQoe2lkOnQudG9hc3RJZCxjb250YWluZXJJZDp0LmNvbnRhaW5lcklkLGZuOmV9KSxadCgoKT0+e2lmKHQucGF1c2VPbkZvY3VzTG9zcylyZXR1cm4geCgpLCgpPT57QygpfX0sW3QucGF1c2VPbkZvY3VzTG9zc10pO2Z1bmN0aW9uIHgoKXtkb2N1bWVudC5oYXNGb2N1cygpfHxwKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLGYpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHApfWZ1bmN0aW9uIEMoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIscCl9ZnVuY3Rpb24gUyhtKXtpZih0LmRyYWdnYWJsZT09PSEwfHx0LmRyYWdnYWJsZT09PW0ucG9pbnRlclR5cGUpe2IoKTtsZXQgXz1sLmN1cnJlbnQ7YS5jYW5DbG9zZU9uQ2xpY2s9ITAsYS5jYW5EcmFnPSEwLF8uc3R5bGUudHJhbnNpdGlvbj1cIm5vbmVcIix0LmRyYWdnYWJsZURpcmVjdGlvbj09PVwieFwiPyhhLnN0YXJ0PW0uY2xpZW50WCxhLnJlbW92YWxEaXN0YW5jZT1fLm9mZnNldFdpZHRoKih0LmRyYWdnYWJsZVBlcmNlbnQvMTAwKSk6KGEuc3RhcnQ9bS5jbGllbnRZLGEucmVtb3ZhbERpc3RhbmNlPV8ub2Zmc2V0SGVpZ2h0Kih0LmRyYWdnYWJsZVBlcmNlbnQ9PT04MD90LmRyYWdnYWJsZVBlcmNlbnQqMS41OnQuZHJhZ2dhYmxlUGVyY2VudCkvMTAwKX19ZnVuY3Rpb24gRShtKXtsZXR7dG9wOl8sYm90dG9tOmssbGVmdDpNLHJpZ2h0OkF9PWwuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTttLm5hdGl2ZUV2ZW50LnR5cGUhPT1cInRvdWNoZW5kXCImJnQucGF1c2VPbkhvdmVyJiZtLmNsaWVudFg+PU0mJm0uY2xpZW50WDw9QSYmbS5jbGllbnRZPj1fJiZtLmNsaWVudFk8PWs/cCgpOmYoKX1mdW5jdGlvbiBmKCl7ZSghMCl9ZnVuY3Rpb24gcCgpe2UoITEpfWZ1bmN0aW9uIGIoKXthLmRpZE1vdmU9ITEsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsbiksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLHUpfWZ1bmN0aW9uIGkoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixuKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdSl9ZnVuY3Rpb24gbihtKXtsZXQgXz1sLmN1cnJlbnQ7aWYoYS5jYW5EcmFnJiZfKXthLmRpZE1vdmU9ITAsbyYmcCgpLHQuZHJhZ2dhYmxlRGlyZWN0aW9uPT09XCJ4XCI/YS5kZWx0YT1tLmNsaWVudFgtYS5zdGFydDphLmRlbHRhPW0uY2xpZW50WS1hLnN0YXJ0LGEuc3RhcnQhPT1tLmNsaWVudFgmJihhLmNhbkNsb3NlT25DbGljaz0hMSk7bGV0IGs9dC5kcmFnZ2FibGVEaXJlY3Rpb249PT1cInhcIj9gJHthLmRlbHRhfXB4LCB2YXIoLS15KWA6YDAsIGNhbGMoJHthLmRlbHRhfXB4ICsgdmFyKC0teSkpYDtfLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtrfSwwKWAsXy5zdHlsZS5vcGFjaXR5PWAkezEtTWF0aC5hYnMoYS5kZWx0YS9hLnJlbW92YWxEaXN0YW5jZSl9YH19ZnVuY3Rpb24gdSgpe2koKTtsZXQgbT1sLmN1cnJlbnQ7aWYoYS5jYW5EcmFnJiZhLmRpZE1vdmUmJm0pe2lmKGEuY2FuRHJhZz0hMSxNYXRoLmFicyhhLmRlbHRhKT5hLnJlbW92YWxEaXN0YW5jZSl7cyghMCksdC5jbG9zZVRvYXN0KCEwKSx0LmNvbGxhcHNlQWxsKCk7cmV0dXJufW0uc3R5bGUudHJhbnNpdGlvbj1cInRyYW5zZm9ybSAwLjJzLCBvcGFjaXR5IDAuMnNcIixtLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNmb3JtXCIpLG0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJvcGFjaXR5XCIpfX1sZXQgaD17b25Qb2ludGVyRG93bjpTLG9uUG9pbnRlclVwOkV9O3JldHVybiBkJiZjJiYoaC5vbk1vdXNlRW50ZXI9cCx0LnN0YWNrZWR8fChoLm9uTW91c2VMZWF2ZT1mKSksdiYmKGgub25DbGljaz1tPT57ZyYmZyhtKSxhLmNhbkNsb3NlT25DbGljayYmVCghMCl9KSx7cGxheVRvYXN0OmYscGF1c2VUb2FzdDpwLGlzUnVubmluZzpvLHByZXZlbnRFeGl0VHJhbnNpdGlvbjpyLHRvYXN0UmVmOmwsZXZlbnRIYW5kbGVyczpofX1pbXBvcnR7dXNlRWZmZWN0IGFzIEp0LHVzZUxheW91dEVmZmVjdCBhcyB0b31mcm9tXCJyZWFjdFwiO3ZhciBPdD10eXBlb2Ygd2luZG93IT1cInVuZGVmaW5lZFwiP3RvOkp0O2ltcG9ydCBpdCBmcm9tXCJjbHN4XCI7aW1wb3J0IHEse2Nsb25lRWxlbWVudCBhcyBjbyxpc1ZhbGlkRWxlbWVudCBhcyBmb31mcm9tXCJyZWFjdFwiO2ltcG9ydCBPLHtjbG9uZUVsZW1lbnQgYXMgb28saXNWYWxpZEVsZW1lbnQgYXMgZW99ZnJvbVwicmVhY3RcIjt2YXIgRz0oe3RoZW1lOnQsdHlwZTpvLGlzTG9hZGluZzplLC4uLnJ9KT0+Ty5jcmVhdGVFbGVtZW50KFwic3ZnXCIse3ZpZXdCb3g6XCIwIDAgMjQgMjRcIix3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsZmlsbDp0PT09XCJjb2xvcmVkXCI/XCJjdXJyZW50Q29sb3JcIjpgdmFyKC0tdG9hc3RpZnktaWNvbi1jb2xvci0ke299KWAsLi4ucn0pO2Z1bmN0aW9uIGFvKHQpe3JldHVybiBPLmNyZWF0ZUVsZW1lbnQoRyx7Li4udH0sTy5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTIzLjMyIDE3LjE5MUwxNS40MzggMi4xODRDMTQuNzI4LjgzMyAxMy40MTYgMCAxMS45OTYgMGMtMS40MiAwLTIuNzMzLjgzMy0zLjQ0MyAyLjE4NEwuNTMzIDE3LjQ0OGE0Ljc0NCA0Ljc0NCAwIDAwMCA0LjM2OEMxLjI0MyAyMy4xNjcgMi41NTUgMjQgMy45NzUgMjRoMTYuMDVDMjIuMjIgMjQgMjQgMjIuMDQ0IDI0IDE5LjYzMmMwLS45MDQtLjI1MS0xLjc0Ni0uNjgtMi40NHptLTkuNjIyIDEuNDZjMCAxLjAzMy0uNzI0IDEuODIzLTEuNjk4IDEuODIzcy0xLjY5OC0uNzktMS42OTgtMS44MjJ2LS4wNDNjMC0xLjAyOC43MjQtMS44MjIgMS42OTgtMS44MjJzMS42OTguNzkgMS42OTggMS44MjJ2LjA0M3ptLjAzOS0xMi4yODVsLS44NCA4LjA2Yy0uMDU3LjU4MS0uNDA4Ljk0My0uODk3Ljk0My0uNDkgMC0uODQtLjM2Ny0uODk2LS45NDJsLS44NC04LjA2NWMtLjA1Ny0uNjI0LjI1LTEuMDk1Ljc3OS0xLjA5NWgxLjkxYy41MjguMDA1Ljg0LjQ3Ni43ODQgMS4xelwifSkpfWZ1bmN0aW9uIHNvKHQpe3JldHVybiBPLmNyZWF0ZUVsZW1lbnQoRyx7Li4udH0sTy5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTEyIDBhMTIgMTIgMCAxMDEyIDEyQTEyLjAxMyAxMi4wMTMgMCAwMDEyIDB6bS4yNSA1YTEuNSAxLjUgMCAxMS0xLjUgMS41IDEuNSAxLjUgMCAwMTEuNS0xLjV6bTIuMjUgMTMuNWgtNGExIDEgMCAwMTAtMmguNzVhLjI1LjI1IDAgMDAuMjUtLjI1di00LjVhLjI1LjI1IDAgMDAtLjI1LS4yNWgtLjc1YTEgMSAwIDAxMC0yaDFhMiAyIDAgMDEyIDJ2NC43NWEuMjUuMjUgMCAwMC4yNS4yNWguNzVhMSAxIDAgMTEwIDJ6XCJ9KSl9ZnVuY3Rpb24gbm8odCl7cmV0dXJuIE8uY3JlYXRlRWxlbWVudChHLHsuLi50fSxPLmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIse2Q6XCJNMTIgMGExMiAxMiAwIDEwMTIgMTJBMTIuMDE0IDEyLjAxNCAwIDAwMTIgMHptNi45MjcgOC4ybC02Ljg0NSA5LjI4OWExLjAxMSAxLjAxMSAwIDAxLTEuNDMuMTg4bC00Ljg4OC0zLjkwOGExIDEgMCAxMTEuMjUtMS41NjJsNC4wNzYgMy4yNjEgNi4yMjctOC40NTFhMSAxIDAgMTExLjYxIDEuMTgzelwifSkpfWZ1bmN0aW9uIHJvKHQpe3JldHVybiBPLmNyZWF0ZUVsZW1lbnQoRyx7Li4udH0sTy5jcmVhdGVFbGVtZW50KFwicGF0aFwiLHtkOlwiTTExLjk4MyAwYTEyLjIwNiAxMi4yMDYgMCAwMC04LjUxIDMuNjUzQTExLjggMTEuOCAwIDAwMCAxMi4yMDcgMTEuNzc5IDExLjc3OSAwIDAwMTEuOCAyNGguMjE0QTEyLjExMSAxMi4xMTEgMCAwMDI0IDExLjc5MSAxMS43NjYgMTEuNzY2IDAgMDAxMS45ODMgMHpNMTAuNSAxNi41NDJhMS40NzYgMS40NzYgMCAwMTEuNDQ5LTEuNTNoLjAyN2ExLjUyNyAxLjUyNyAwIDAxMS41MjMgMS40NyAxLjQ3NSAxLjQ3NSAwIDAxLTEuNDQ5IDEuNTNoLS4wMjdhMS41MjkgMS41MjkgMCAwMS0xLjUyMy0xLjQ3ek0xMSAxMi41di02YTEgMSAwIDAxMiAwdjZhMSAxIDAgMTEtMiAwelwifSkpfWZ1bmN0aW9uIGlvKCl7cmV0dXJuIE8uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJUb2FzdGlmeV9fc3Bpbm5lclwifSl9dmFyIFc9e2luZm86c28sd2FybmluZzphbyxzdWNjZXNzOm5vLGVycm9yOnJvLHNwaW5uZXI6aW99LGxvPXQ9PnQgaW4gVztmdW5jdGlvbiBOdCh7dGhlbWU6dCx0eXBlOm8saXNMb2FkaW5nOmUsaWNvbjpyfSl7bGV0IHM9bnVsbCxsPXt0aGVtZTp0LHR5cGU6b307cmV0dXJuIHI9PT0hMXx8KFAocik/cz1yKHsuLi5sLGlzTG9hZGluZzplfSk6ZW8ocik/cz1vbyhyLGwpOmU/cz1XLnNwaW5uZXIoKTpsbyhvKSYmKHM9V1tvXShsKSkpLHN9dmFyIHd0PXQ9PntsZXR7aXNSdW5uaW5nOm8scHJldmVudEV4aXRUcmFuc2l0aW9uOmUsdG9hc3RSZWY6cixldmVudEhhbmRsZXJzOnMscGxheVRvYXN0Omx9PUF0KHQpLHtjbG9zZUJ1dHRvbjphLGNoaWxkcmVuOmQsYXV0b0Nsb3NlOmMsb25DbGljazpULHR5cGU6ZyxoaWRlUHJvZ3Jlc3NCYXI6dixjbG9zZVRvYXN0OngsdHJhbnNpdGlvbjpDLHBvc2l0aW9uOlMsY2xhc3NOYW1lOkUsc3R5bGU6Zixwcm9ncmVzc0NsYXNzTmFtZTpwLHVwZGF0ZUlkOmIscm9sZTppLHByb2dyZXNzOm4scnRsOnUsdG9hc3RJZDpoLGRlbGV0ZVRvYXN0Om0saXNJbjpfLGlzTG9hZGluZzprLGNsb3NlT25DbGljazpNLHRoZW1lOkEsYXJpYUxhYmVsOlJ9PXQsRD1pdChcIlRvYXN0aWZ5X190b2FzdFwiLGBUb2FzdGlmeV9fdG9hc3QtdGhlbWUtLSR7QX1gLGBUb2FzdGlmeV9fdG9hc3QtLSR7Z31gLHtbXCJUb2FzdGlmeV9fdG9hc3QtLXJ0bFwiXTp1fSx7W1wiVG9hc3RpZnlfX3RvYXN0LS1jbG9zZS1vbi1jbGlja1wiXTpNfSksWT1QKEUpP0Uoe3J0bDp1LHBvc2l0aW9uOlMsdHlwZTpnLGRlZmF1bHRDbGFzc05hbWU6RH0pOml0KEQsRSksZnQ9TnQodCksZHQ9ISFufHwhYyxqPXtjbG9zZVRvYXN0OngsdHlwZTpnLHRoZW1lOkF9LEg9bnVsbDtyZXR1cm4gYT09PSExfHwoUChhKT9IPWEoaik6Zm8oYSk/SD1jbyhhLGopOkg9eXQoaikpLHEuY3JlYXRlRWxlbWVudChDLHtpc0luOl8sZG9uZTptLHBvc2l0aW9uOlMscHJldmVudEV4aXRUcmFuc2l0aW9uOmUsbm9kZVJlZjpyLHBsYXlUb2FzdDpsfSxxLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7aWQ6aCx0YWJJbmRleDowLG9uQ2xpY2s6VCxcImRhdGEtaW5cIjpfLGNsYXNzTmFtZTpZLC4uLnMsc3R5bGU6ZixyZWY6ciwuLi5fJiZ7cm9sZTppLFwiYXJpYS1sYWJlbFwiOlJ9fSxmdCE9bnVsbCYmcS5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTppdChcIlRvYXN0aWZ5X190b2FzdC1pY29uXCIse1tcIlRvYXN0aWZ5LS1hbmltYXRlLWljb24gVG9hc3RpZnlfX3pvb20tZW50ZXJcIl06IWt9KX0sZnQpLHR0KGQsdCwhbyksSCwhdC5jdXN0b21Qcm9ncmVzc0JhciYmcS5jcmVhdGVFbGVtZW50KGd0LHsuLi5iJiYhZHQ/e2tleTpgcC0ke2J9YH06e30scnRsOnUsdGhlbWU6QSxkZWxheTpjLGlzUnVubmluZzpvLGlzSW46XyxjbG9zZVRvYXN0OngsaGlkZTp2LHR5cGU6ZyxjbGFzc05hbWU6cCxjb250cm9sbGVkUHJvZ3Jlc3M6ZHQscHJvZ3Jlc3M6bnx8MH0pKSl9O3ZhciBLPSh0LG89ITEpPT4oe2VudGVyOmBUb2FzdGlmeS0tYW5pbWF0ZSBUb2FzdGlmeV9fJHt0fS1lbnRlcmAsZXhpdDpgVG9hc3RpZnktLWFuaW1hdGUgVG9hc3RpZnlfXyR7dH0tZXhpdGAsYXBwZW5kUG9zaXRpb246b30pLGx0PSQoSyhcImJvdW5jZVwiLCEwKSksbW89JChLKFwic2xpZGVcIiwhMCkpLHBvPSQoSyhcInpvb21cIikpLHVvPSQoSyhcImZsaXBcIikpO3ZhciBfbz17cG9zaXRpb246XCJ0b3AtcmlnaHRcIix0cmFuc2l0aW9uOmx0LGF1dG9DbG9zZTo1ZTMsY2xvc2VCdXR0b246ITAscGF1c2VPbkhvdmVyOiEwLHBhdXNlT25Gb2N1c0xvc3M6ITAsZHJhZ2dhYmxlOlwidG91Y2hcIixkcmFnZ2FibGVQZXJjZW50OjgwLGRyYWdnYWJsZURpcmVjdGlvbjpcInhcIixyb2xlOlwiYWxlcnRcIix0aGVtZTpcImxpZ2h0XCIsXCJhcmlhLWxhYmVsXCI6XCJOb3RpZmljYXRpb25zIEFsdCtUXCIsaG90S2V5czp0PT50LmFsdEtleSYmdC5jb2RlPT09XCJLZXlUXCJ9O2Z1bmN0aW9uIEx0KHQpe2xldCBvPXsuLi5fbywuLi50fSxlPXQuc3RhY2tlZCxbcixzXT1nbyghMCksbD1UbyhudWxsKSx7Z2V0VG9hc3RUb1JlbmRlcjphLGlzVG9hc3RBY3RpdmU6ZCxjb3VudDpjfT1JdChvKSx7Y2xhc3NOYW1lOlQsc3R5bGU6ZyxydGw6dixjb250YWluZXJJZDp4LGhvdEtleXM6Q309bztmdW5jdGlvbiBTKGYpe2xldCBwPUR0KFwiVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lclwiLGBUb2FzdGlmeV9fdG9hc3QtY29udGFpbmVyLS0ke2Z9YCx7W1wiVG9hc3RpZnlfX3RvYXN0LWNvbnRhaW5lci0tcnRsXCJdOnZ9KTtyZXR1cm4gUChUKT9UKHtwb3NpdGlvbjpmLHJ0bDp2LGRlZmF1bHRDbGFzc05hbWU6cH0pOkR0KHAsQihUKSl9ZnVuY3Rpb24gRSgpe2UmJihzKCEwKSx5LnBsYXkoKSl9cmV0dXJuIE90KCgpPT57dmFyIGY7aWYoZSl7bGV0IHA9bC5jdXJyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWluPVwidHJ1ZVwiXScpLGI9MTIsaT0oZj1vLnBvc2l0aW9uKT09bnVsbD92b2lkIDA6Zi5pbmNsdWRlcyhcInRvcFwiKSxuPTAsdT0wO0FycmF5LmZyb20ocCkucmV2ZXJzZSgpLmZvckVhY2goKGgsbSk9PntsZXQgXz1oO18uY2xhc3NMaXN0LmFkZChcIlRvYXN0aWZ5X190b2FzdC0tc3RhY2tlZFwiKSxtPjAmJihfLmRhdGFzZXQuY29sbGFwc2VkPWAke3J9YCksXy5kYXRhc2V0LnBvc3x8KF8uZGF0YXNldC5wb3M9aT9cInRvcFwiOlwiYm90XCIpO2xldCBrPW4qKHI/LjI6MSkrKHI/MDpiKm0pO18uc3R5bGUuc2V0UHJvcGVydHkoXCItLXlcIixgJHtpP2s6ayotMX1weGApLF8uc3R5bGUuc2V0UHJvcGVydHkoXCItLWdcIixgJHtifWApLF8uc3R5bGUuc2V0UHJvcGVydHkoXCItLXNcIixgJHsxLShyP3U6MCl9YCksbis9Xy5vZmZzZXRIZWlnaHQsdSs9LjAyNX0pfX0sW3IsYyxlXSkseW8oKCk9PntmdW5jdGlvbiBmKHApe3ZhciBpO2xldCBiPWwuY3VycmVudDtDKHApJiYoKGk9Yi5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9XCIwXCJdJykpPT1udWxsfHxpLmZvY3VzKCkscyghMSkseS5wYXVzZSgpKSxwLmtleT09PVwiRXNjYXBlXCImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09Ynx8YiE9bnVsbCYmYi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkmJihzKCEwKSx5LnBsYXkoKSl9cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZiksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGYpfX0sW0NdKSxjdC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiLHtyZWY6bCxjbGFzc05hbWU6XCJUb2FzdGlmeVwiLGlkOngsb25Nb3VzZUVudGVyOigpPT57ZSYmKHMoITEpLHkucGF1c2UoKSl9LG9uTW91c2VMZWF2ZTpFLFwiYXJpYS1saXZlXCI6XCJwb2xpdGVcIixcImFyaWEtYXRvbWljXCI6XCJmYWxzZVwiLFwiYXJpYS1yZWxldmFudFwiOlwiYWRkaXRpb25zIHRleHRcIixcImFyaWEtbGFiZWxcIjpvW1wiYXJpYS1sYWJlbFwiXX0sYSgoZixwKT0+e2xldCBiPXAubGVuZ3RoP3suLi5nfTp7Li4uZyxwb2ludGVyRXZlbnRzOlwibm9uZVwifTtyZXR1cm4gY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLHt0YWJJbmRleDotMSxjbGFzc05hbWU6UyhmKSxcImRhdGEtc3RhY2tlZFwiOmUsc3R5bGU6YixrZXk6YGMtJHtmfWB9LHAubWFwKCh7Y29udGVudDppLHByb3BzOm59KT0+Y3QuY3JlYXRlRWxlbWVudCh3dCx7Li4ubixzdGFja2VkOmUsY29sbGFwc2VBbGw6RSxpc0luOmQobi50b2FzdElkLG4uY29udGFpbmVySWQpLGtleTpgdC0ke24ua2V5fWB9LGkpKSl9KSl9ZXhwb3J0e2x0IGFzIEJvdW5jZSx1byBhcyBGbGlwLFcgYXMgSWNvbnMsbW8gYXMgU2xpZGUsTHQgYXMgVG9hc3RDb250YWluZXIscG8gYXMgWm9vbSxaIGFzIGNvbGxhcHNlVG9hc3QsJCBhcyBjc3NUcmFuc2l0aW9uLHkgYXMgdG9hc3R9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcCIsImNvbnN0IGlzTG9jYWxob3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JztcclxuXHJcbmNvbnN0IEJBU0VfVVJMID0gaXNMb2NhbGhvc3RcclxuICA/ICdodHRwOi8vbG9jYWxob3N0L3dvcmRwcmVzcydcclxuICA6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcblxyXG4vLyBjb25zdCBBUElfQkFTRV9VUkwgPSBgJHtCQVNFX1VSTH0vd3AtanNvbi9haS1jb250ZW50L3YxYDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJBU0VfVVJMO1xyXG4iLCJpbXBvcnQgeyBjcmVhdGVTbGljZSwgY3JlYXRlQXN5bmNUaHVuayB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSBcInJlYWN0LXRvYXN0aWZ5XCI7XHJcbmltcG9ydCBCQVNFX1VSTCBmcm9tIFwiLi4vLi4vY29uZmlnLmpzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgR2V0Q2hhdGJvdERhdGEgPSBjcmVhdGVBc3luY1RodW5rKFxyXG4gIFwiY2hhdGJvdC9jaGF0Ym90LWRhdGFcIixcclxuICBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxyXG4gICAgICBCQVNFX1VSTCArIFwiL3dwLWpzb24vYWktY29udGVudC92MS9nZXQtY2hhdGJvdC1zZXR0aW5nXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJYLVdQLU5vbmNlXCI6IHdwQXBpU2V0dGluZ3Mubm9uY2UsXHJcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlX2RhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2VfZGF0YTtcclxuICB9LFxyXG4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNhdmVBcHBlYXJhbmNlU2V0dGluZyA9IGNyZWF0ZUFzeW5jVGh1bmsoXHJcbiAgXCJjaGF0Ym90L3NhdmUtY2hhdGJvdC1kYXRhXCIsXHJcbiAgYXN5bmMgKGRhdGEpID0+IHtcclxuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0YSB0byBtYXRjaCB3aGF0IHRoZSBBUEkgZXhwZWN0c1xyXG4gICAgY29uc3QgYXBpRGF0YSA9IHtcclxuICAgICAgYmdfY29sb3I6IGRhdGEucHJpbWFyeUNvbG9yLFxyXG4gICAgICB0ZXh0X2NvbG9yOiBkYXRhLnNlY29uZGFyeUNvbG9yLFxyXG4gICAgICB0eXBlOiBkYXRhLmJvdEljb24sXHJcbiAgICAgIGljb246IGRhdGEuaWNvbixcclxuICAgIH07XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKFwiYmdfY29sb3JcIiwgZGF0YS5CYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKFwidGV4dF9jb2xvclwiLCBkYXRhLnRleHRDb2xvcik7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJ0eXBlXCIsIGRhdGEuYm90SWNvblR5cGUpO1xyXG5cclxuICAgIC8vIE9ubHkgYXBwZW5kIHRoZSBmaWxlIGlmIGl0IGV4aXN0cyBhbmQgYm90SWNvblR5cGUgaXMgJ2N1c3RvbSdcclxuICAgIGlmIChcclxuICAgICAgZGF0YS5ib3RJY29uVHlwZSA9PT0gXCJjdXN0b21cIiAmJlxyXG4gICAgICBkYXRhLmN1c3RvbUJvdEljb24gJiZcclxuICAgICAgZGF0YS5jdXN0b21Cb3RJY29uLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJpY29uXCIsIGRhdGEuY3VzdG9tQm90SWNvblswXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxyXG4gICAgICBCQVNFX1VSTCArIFwiL3dwLWpzb24vYWktY29udGVudC92MS9zYXZlLWFwcGVhcmFuY2Utc2V0dGluZ1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIlgtV1AtTm9uY2VcIjogd3BBcGlTZXR0aW5ncy5ub25jZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlX2RhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2VfZGF0YTtcclxuICB9LFxyXG4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNhdmVNZXNzYWdlU2V0dGluZ3MgPSBjcmVhdGVBc3luY1RodW5rKFxyXG4gIFwiY2hhdGJvdC9zYXZlLW1lc3NhZ2Utc2V0dGluZ3NcIixcclxuICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgY29uc3QgYXBpRGF0YSA9IHtcclxuICAgICAgY2hhdF9ib3RfbXNnOiBkYXRhLndlbGNvbWVNZXNzYWdlLFxyXG4gICAgICBwbGFjZWhvbGRlcl9tc2c6IGRhdGEucGxhY2Vob2xkZXJUZXh0LFxyXG4gICAgICBjaGF0Ym90X25hbWU6IGRhdGEuaGVhZGVyVGV4dCxcclxuICAgIH07XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxyXG4gICAgICBCQVNFX1VSTCArIFwiL3dwLWpzb24vYWktY29udGVudC92MS9zYXZlLW1lc3NhZ2Utc2V0dGluZ1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIlgtV1AtTm9uY2VcIjogd3BBcGlTZXR0aW5ncy5ub25jZSxcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYXBpRGF0YSksXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmVzcG9uc2VfZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIHJldHVybiByZXNwb25zZV9kYXRhO1xyXG4gIH0sXHJcbik7XHJcblxyXG5jb25zdCBDaGF0Ym90U2xpY2UgPSBjcmVhdGVTbGljZSh7XHJcbiAgbmFtZTogXCJjaGF0Ym90XCIsXHJcbiAgaW5pdGlhbFN0YXRlOiB7XHJcbiAgICBpc19sb2FkaW5nOiB7XHJcbiAgICAgIGxvYWQ6IGZhbHNlLFxyXG4gICAgICBhcHBlYXJhbmNlOiBmYWxzZSxcclxuICAgICAgbWVzc2FnZTogZmFsc2UsXHJcbiAgICAgIG1vZGU6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGVycm9yOiBudWxsLFxyXG4gICAgQ2hhdGJvdERhdGE6IHt9LFxyXG4gICAgbWVzc2FnZTogXCJcIixcclxuICB9LFxyXG4gIHJlZHVjZXJzOiB7fSxcclxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShHZXRDaGF0Ym90RGF0YS5wZW5kaW5nLCAoc3RhdGUpID0+IHtcclxuICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmxvYWQgPSB0cnVlO1xyXG4gICAgICAgIHN0YXRlLmVycm9yID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmFkZENhc2UoR2V0Q2hhdGJvdERhdGEuZnVsZmlsbGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgc3RhdGUuQ2hhdGJvdERhdGEgPSBhY3Rpb24ucGF5bG9hZD8uZGF0YT8uZGF0YTtcclxuICAgICAgICAgIHN0YXRlLm1lc3NhZ2UgPSBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZTtcclxuICAgICAgICAgIHN0YXRlLmlzX2xvYWRpbmcubG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnBheWxvYWQ/LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5lcnJvciA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlO1xyXG4gICAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5sb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYWRkQ2FzZShHZXRDaGF0Ym90RGF0YS5yZWplY3RlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9XHJcbiAgICAgICAgICBhY3Rpb24uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZmV0Y2hpbmcgY2hhdGJvdCBkYXRhXCI7XHJcbiAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5sb2FkID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvLyBTYXZlIENoYXRib3QgRGF0YSBjYXNlc1xyXG4gICAgICAuYWRkQ2FzZShTYXZlQXBwZWFyYW5jZVNldHRpbmcucGVuZGluZywgKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5hcHBlYXJhbmNlID0gdHJ1ZTtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVBcHBlYXJhbmNlU2V0dGluZy5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkPy5zdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5DaGF0Ym90RGF0YSA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5kYXRhIHx8IHN0YXRlLkNoYXRib3REYXRhO1xyXG4gICAgICAgICAgdG9hc3Quc3VjY2VzcyhcclxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQ/LmRhdGE/Lm1lc3NhZ2UgfHwgXCJTZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHlcIixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlID1cclxuICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQ/LmRhdGE/Lm1lc3NhZ2UgfHwgXCJTZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHlcIjtcclxuICAgICAgICAgIHN0YXRlLmlzX2xvYWRpbmcuYXBwZWFyYW5jZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnBheWxvYWQ/LnN1Y2Nlc3MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5lcnJvciA9XHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5kYXRhPy5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIHNhdmUgc2V0dGluZ3NcIjtcclxuICAgICAgICAgIHRvYXN0LmVycm9yKFxyXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBzYXZlIHNldHRpbmdzXCIsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5hcHBlYXJhbmNlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYWRkQ2FzZShTYXZlQXBwZWFyYW5jZVNldHRpbmcucmVqZWN0ZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPVxyXG4gICAgICAgICAgYWN0aW9uLmVycm9yPy5tZXNzYWdlIHx8XHJcbiAgICAgICAgICBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyBjaGF0Ym90IGRhdGFcIjtcclxuICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLmFwcGVhcmFuY2UgPSBmYWxzZTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIEFkZCB0aGVzZSBjYXNlcyB0byB5b3VyIGV4aXN0aW5nIGV4dHJhUmVkdWNlcnMgaW4gQ2hhdGJvdFNsaWNlLmpzXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVNZXNzYWdlU2V0dGluZ3MucGVuZGluZywgKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHN0YXRlLmlzX2xvYWRpbmcubWVzc2FnZSA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVNZXNzYWdlU2V0dGluZ3MuZnVsZmlsbGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgc3RhdGUubWVzc2FnZSA9XHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5tZXNzYWdlIHx8IFwiTWVzc2FnZSBzZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHlcIjtcclxuICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkPy5tZXNzYWdlIHx8IFwiTWVzc2FnZSBzZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHlcIixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLm1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3RhdGUuZXJyb3IgPVxyXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBzYXZlIG1lc3NhZ2Ugc2V0dGluZ3NcIjtcclxuICAgICAgICAgIHRvYXN0LmVycm9yKFxyXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZD8uZGF0YT8ubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBzYXZlIG1lc3NhZ2Ugc2V0dGluZ3NcIixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBzdGF0ZS5pc19sb2FkaW5nLm1lc3NhZ2UgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKFNhdmVNZXNzYWdlU2V0dGluZ3MucmVqZWN0ZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPVxyXG4gICAgICAgICAgYWN0aW9uLmVycm9yPy5tZXNzYWdlIHx8XHJcbiAgICAgICAgICBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNhdmluZyBtZXNzYWdlIHNldHRpbmdzXCI7XHJcbiAgICAgICAgc3RhdGUuaXNfbG9hZGluZy5tZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2hhdGJvdFNsaWNlLnJlZHVjZXI7XHJcbiIsIi8qKlxyXG4gKiBTZXJ2ZXItYmFja2VkIHN0b3JhZ2UgKHVzZXIgbWV0YSArIHNpdGUgb3B0aW9ucykgdmlhIFJFU1QgYGF1dG93cC92MS91c2VyLWNsaWVudC1zdG9yYWdlYC5cclxuICogUmVwbGFjZXMgbG9jYWxTdG9yYWdlIGZvciBXUEFJIFNQQSBzdGF0ZS5cclxuICovXHJcblxyXG5jb25zdCBMU19LRVlTID0gW1xyXG4gIFwid3BhaV9hdXRoX3Nlc3Npb25fYmxvYlwiLFxyXG4gIFwidG9rZW5cIixcclxuICBcInVzZXJfZGF0YVwiLFxyXG4gIFwic2VsZWN0ZWRMZWFkc1wiLFxyXG4gIFwic2F2ZWRVcmxzXCIsXHJcbiAgXCJ3cGFpX2FnZW50X21vZGVcIixcclxuICBcIndwYWlfY2hhdGJvdF92aXNpYmxlXCIsXHJcbiAgXCJ3cGFpX3NpZGViYXJfY29sbGFwc2VkXCIsXHJcbiAgXCJ3cGFpX3VzZXJfaWRcIixcclxuICBcIndwYWlfcHVzaF9kZXZpY2VfaWRcIixcclxuICBcIndwYWlfbGFzdF9yZWdpc3RlcmVkX2ZjbV90b2tlblwiLFxyXG4gIFwid3BhaV9yZWFsdGltZV9jaGF0X2VuYWJsZWRcIixcclxuICBcIndwYWlfdmlzaXRvcl9pbnRlbGxpZ2VuY2VfZW5hYmxlZFwiLFxyXG4gIFwiQ2hhdGJvdEF1dGhvcml6YXRpb25cIixcclxuXTtcclxuXHJcbmxldCBjYWNoZSA9IHt9O1xyXG5sZXQgaHlkcmF0ZWQgPSBmYWxzZTtcclxubGV0IGluZmxpZ2h0SHlkcmF0ZSA9IG51bGw7XHJcblxyXG5sZXQgc2F2ZVRpbWVyID0gbnVsbDtcclxuY29uc3QgcGVuZGluZ1BhdGNoID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuXHJcbmZ1bmN0aW9uIHdwUmVzdE5vbmNlKCkge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJcIjtcclxuICByZXR1cm4gKFxyXG4gICAgKHdpbmRvdy53cEFwaVNldHRpbmdzICYmIHdpbmRvdy53cEFwaVNldHRpbmdzLm5vbmNlKSB8fFxyXG4gICAgKHdpbmRvdy53cGFpU2Vzc2lvbkRhdGEgJiYgd2luZG93LndwYWlTZXNzaW9uRGF0YS5ub25jZSkgfHxcclxuICAgIFwiXCJcclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXN0Um9vdCgpIHtcclxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LndwQXBpU2V0dGluZ3M/LnJvb3QpIHJldHVybiBcIlwiO1xyXG4gIHJldHVybiBTdHJpbmcod2luZG93LndwQXBpU2V0dGluZ3Mucm9vdCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyhrZXkpIHtcclxuICBjb25zdCB2ID0gY2FjaGVba2V5XTtcclxuICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIHJldHVybiBTdHJpbmcodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoa2V5LCB2YWx1ZSkge1xyXG4gIGNvbnN0IHMgPVxyXG4gICAgdmFsdWUgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XHJcbiAgaWYgKHMgPT09IG51bGwpIHtcclxuICAgIGRlbGV0ZSBjYWNoZVtrZXldO1xyXG4gICAgcGVuZGluZ1BhdGNoW2tleV0gPSBudWxsO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjYWNoZVtrZXldID0gcztcclxuICAgIHBlbmRpbmdQYXRjaFtrZXldID0gcztcclxuICB9XHJcbiAgc2NoZWR1bGVGbHVzaCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVXNlckNsaWVudFN0b3JhZ2VTeW5jKGtleSkge1xyXG4gIGRlbGV0ZSBjYWNoZVtrZXldO1xyXG4gIHBlbmRpbmdQYXRjaFtrZXldID0gbnVsbDtcclxuICBzY2hlZHVsZUZsdXNoKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNjaGVkdWxlRmx1c2goKSB7XHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICBpZiAoc2F2ZVRpbWVyKSBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTtcclxuICBzYXZlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICBzYXZlVGltZXIgPSBudWxsO1xyXG4gICAgdm9pZCBmbHVzaFBlbmRpbmcoKTtcclxuICB9LCA0MDApO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBmbHVzaFBlbmRpbmcoKSB7XHJcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBlbmRpbmdQYXRjaCk7XHJcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgY29uc3QgcGF0Y2ggPSB7IC4uLnBlbmRpbmdQYXRjaCB9O1xyXG4gIGZvciAoY29uc3QgayBvZiBrZXlzKSBkZWxldGUgcGVuZGluZ1BhdGNoW2tdO1xyXG5cclxuICBjb25zdCByb290ID0gcmVzdFJvb3QoKTtcclxuICBjb25zdCBub25jZSA9IHdwUmVzdE5vbmNlKCk7XHJcbiAgaWYgKCFyb290IHx8ICFub25jZSkge1xyXG4gICAgT2JqZWN0LmFzc2lnbihwZW5kaW5nUGF0Y2gsIHBhdGNoKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke3Jvb3R9L2F1dG93cC92MS91c2VyLWNsaWVudC1zdG9yYWdlYCwge1xyXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgXCJYLVdQLU5vbmNlXCI6IG5vbmNlLFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHBhdGNoIH0pLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoIXJlcy5vaykge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHBlbmRpbmdQYXRjaCwgcGF0Y2gpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcclxuICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIGNhY2hlID0geyAuLi5kYXRhIH07XHJcbiAgICB9XHJcbiAgICBwdXJnZUxlZ2FjeUxvY2FsU3RvcmFnZSgpO1xyXG4gIH0gY2F0Y2gge1xyXG4gICAgT2JqZWN0LmFzc2lnbihwZW5kaW5nUGF0Y2gsIHBhdGNoKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHB1cmdlTGVnYWN5TG9jYWxTdG9yYWdlKCkge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cubG9jYWxTdG9yYWdlKSByZXR1cm47XHJcbiAgdHJ5IHtcclxuICAgIGZvciAoY29uc3QgayBvZiBMU19LRVlTKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICAvKiBpZ25vcmUgKi9cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gY2F0Y2gge1xyXG4gICAgLyogaWdub3JlICovXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtaWdyYXRlTGVnYWN5TG9jYWxTdG9yYWdlVG9DYWNoZSgpIHtcclxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xyXG4gIGlmIChcclxuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAmJlxyXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ3cGFpX2RiX3N0b3JhZ2VfbWlncmF0ZWRfdjFcIilcclxuICApIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICBmb3IgKGNvbnN0IGsgb2YgTFNfS0VZUykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHYgIT0gbnVsbCAmJlxyXG4gICAgICAgIHYgIT09IFwiXCIgJiZcclxuICAgICAgICAoY2FjaGVba10gPT09IHVuZGVmaW5lZCB8fCBjYWNoZVtrXSA9PT0gbnVsbCB8fCBjYWNoZVtrXSA9PT0gXCJcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgY2FjaGVba10gPSB2O1xyXG4gICAgICAgIHBlbmRpbmdQYXRjaFtrXSA9IHY7XHJcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvKiBpZ25vcmUgKi9cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNoYW5nZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlVXNlckNsaWVudFN0b3JhZ2UoKSB7XHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBjYWNoZTtcclxuICBpZiAoaHlkcmF0ZWQpIHJldHVybiBjYWNoZTtcclxuICBpZiAoaW5mbGlnaHRIeWRyYXRlKSByZXR1cm4gaW5mbGlnaHRIeWRyYXRlO1xyXG5cclxuICBpbmZsaWdodEh5ZHJhdGUgPSAoYXN5bmMgKCkgPT4ge1xyXG4gICAgbGV0IHNlcnZlck9rID0gZmFsc2U7XHJcbiAgICBjb25zdCByb290ID0gcmVzdFJvb3QoKTtcclxuICAgIGNvbnN0IG5vbmNlID0gd3BSZXN0Tm9uY2UoKTtcclxuICAgIGlmIChyb290ICYmIG5vbmNlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7cm9vdH0vYXV0b3dwL3YxL3VzZXItY2xpZW50LXN0b3JhZ2VgLCB7XHJcbiAgICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxyXG4gICAgICAgICAgaGVhZGVyczogeyBcIlgtV1AtTm9uY2VcIjogbm9uY2UgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVzLm9rKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcclxuICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlID0geyAuLi5kYXRhIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZXJ2ZXJPayA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICAvKiBpZ25vcmUgKi9cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1pZ3JhdGVkID0gbWlncmF0ZUxlZ2FjeUxvY2FsU3RvcmFnZVRvQ2FjaGUoKTtcclxuICAgIGlmIChtaWdyYXRlZCAmJiBPYmplY3Qua2V5cyhwZW5kaW5nUGF0Y2gpLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXdhaXQgZmx1c2hQZW5kaW5nKCk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ3cGFpX2RiX3N0b3JhZ2VfbWlncmF0ZWRfdjFcIiwgXCIxXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLyogaWdub3JlICovXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VydmVyT2spIHtcclxuICAgICAgcHVyZ2VMZWdhY3lMb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBoeWRyYXRlZCA9IHRydWU7XHJcbiAgICByZXR1cm4gY2FjaGU7XHJcbiAgfSkoKTtcclxuXHJcbiAgY29uc3Qgb3V0ID0gYXdhaXQgaW5mbGlnaHRIeWRyYXRlO1xyXG4gIGluZmxpZ2h0SHlkcmF0ZSA9IG51bGw7XHJcbiAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoVXNlckNsaWVudFN0b3JhZ2VOb3coKSB7XHJcbiAgaWYgKHNhdmVUaW1lciAmJiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTtcclxuICAgIHNhdmVUaW1lciA9IG51bGw7XHJcbiAgfVxyXG4gIGF3YWl0IGZsdXNoUGVuZGluZygpO1xyXG59XHJcbiIsIi8qKlxuICogU2Vzc2lvbiBibG9iIGZvciBjcm9zcy1wYWdlIGF1dGggKHJlcGxhY2VzIGZvcm1lciBSRVNUIGBhaS1jb250ZW50L3YxL2F1dGgtdG9rZW5gKS5cbiAqIE11c3QgbWF0Y2ggbGVnYWN5IHNjcmlwdHM6IGFzc2V0cy9qcy9haS1lZGl0b3ItdG9vbGJhci5qcywgYWktY29tbWVudC1hZG1pbi5qcywgdGVzdC1jb21tZW50LWFqYXguanNcbiAqL1xuaW1wb3J0IHtcbiAgZmx1c2hVc2VyQ2xpZW50U3RvcmFnZU5vdyxcbiAgZ2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jLFxuICBoeWRyYXRlVXNlckNsaWVudFN0b3JhZ2UsXG4gIHJlbW92ZVVzZXJDbGllbnRTdG9yYWdlU3luYyxcbiAgc2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jLFxufSBmcm9tIFwiQC91dGlscy91c2VyQ2xpZW50U3RvcmFnZS5qc1wiO1xuXG5leHBvcnQgY29uc3QgV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVkgPSBcIndwYWlfYXV0aF9zZXNzaW9uX2Jsb2JcIjtcblxuZnVuY3Rpb24gY29uc3VtZUJvb3RzdHJhcFNlc3Npb25CbG9iKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LndwQXBpU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBib290ID0gd2luZG93LndwQXBpU2V0dGluZ3MuYXV0aFNlc3Npb25CbG9iO1xuICBpZiAodHlwZW9mIGJvb3QgIT09IFwic3RyaW5nXCIgfHwgYm9vdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIGRlbGV0ZSB3aW5kb3cud3BBcGlTZXR0aW5ncy5hdXRoU2Vzc2lvbkJsb2I7XG4gIH0gY2F0Y2gge1xuICAgIHdpbmRvdy53cEFwaVNldHRpbmdzLmF1dGhTZXNzaW9uQmxvYiA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIGJvb3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFyQXV0aFNlc3Npb25JbldvcmRQcmVzc0RiKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhd2luZG93LmFqYXh1cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgbm9uY2UgPSB3aW5kb3cud3BBcGlTZXR0aW5ncz8ubm9uY2U7XG4gIGlmICghbm9uY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGJvZHkuc2V0KFwiYWN0aW9uXCIsIFwid3BhaV9jbGVhcl9hdXRoX3Nlc3Npb25cIik7XG4gICAgYm9keS5zZXQoXCJub25jZVwiLCBub25jZSk7XG4gICAgYXdhaXQgZmV0Y2god2luZG93LmFqYXh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiIH0sXG4gICAgICBib2R5LFxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBiZXN0LWVmZm9ydDsgbG9jYWwgc2Vzc2lvbiBpcyBhbHJlYWR5IGNsZWFyZWRcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVG9rZW5IYW5kbGUgPSB7XG4gIGFwaUVycm9yKGVycm9yKSB7XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZFwiO1xuICAgIGlmIChlcnJvcj8ucmVzcG9uc2UpIHtcbiAgICAgIGlmIChlcnJvci5yZXNwb25zZS5kYXRhICYmIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgU2VydmVyIGVycm9yOiAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c31gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXJyb3I/LnJlcXVlc3QpIHtcbiAgICAgIGVycm9yTWVzc2FnZSA9IFwiTm8gcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuIFBsZWFzZSBjaGVjayB5b3VyIGNvbm5lY3Rpb24uXCI7XG4gICAgfSBlbHNlIGlmIChlcnJvcj8ubWVzc2FnZSkge1xuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcbiAgICB9O1xuICB9LFxuXG4gIGFzeW5jIGNyZWF0ZVRva2VuKHRva2VuKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogXCJCcm93c2VyIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZS5cIixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGh5ZHJhdGVVc2VyQ2xpZW50U3RvcmFnZSgpO1xuICAgICAgc2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKFdQQUlfQVVUSF9TRVNTSU9OX1NUT1JBR0VfS0VZLCB0b2tlbik7XG4gICAgICBhd2FpdCBmbHVzaFVzZXJDbGllbnRTdG9yYWdlTm93KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBtZXNzYWdlOiBcIlNlc3Npb24gc3RvcmVkXCIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLmFwaUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgZ2V0VG9rZW4oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCB0b2tlbjogbnVsbCB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgaHlkcmF0ZVVzZXJDbGllbnRTdG9yYWdlKCk7XG4gICAgICBsZXQgYmxvYiA9IGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyhXUEFJX0FVVEhfU0VTU0lPTl9TVE9SQUdFX0tFWSk7XG4gICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgY29uc3QgbWlncmF0ZWQgPSBjb25zdW1lQm9vdHN0cmFwU2Vzc2lvbkJsb2IoKTtcbiAgICAgICAgaWYgKG1pZ3JhdGVkKSB7XG4gICAgICAgICAgc2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKFdQQUlfQVVUSF9TRVNTSU9OX1NUT1JBR0VfS0VZLCBtaWdyYXRlZCk7XG4gICAgICAgICAgYXdhaXQgZmx1c2hVc2VyQ2xpZW50U3RvcmFnZU5vdygpO1xuICAgICAgICAgIGJsb2IgPSBnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMoV1BBSV9BVVRIX1NFU1NJT05fU1RPUkFHRV9LRVkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHRva2VuOiBudWxsIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB0b2tlbjogeyBhdXRoX3Rva2VuOiBibG9iIH0gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5hcGlFcnJvcihlcnJvcik7XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIGRlbGV0ZVRva2VuKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBhd2FpdCBoeWRyYXRlVXNlckNsaWVudFN0b3JhZ2UoKTtcbiAgICAgICAgcmVtb3ZlVXNlckNsaWVudFN0b3JhZ2VTeW5jKFdQQUlfQVVUSF9TRVNTSU9OX1NUT1JBR0VfS0VZKTtcbiAgICAgICAgcmVtb3ZlVXNlckNsaWVudFN0b3JhZ2VTeW5jKFwiQ2hhdGJvdEF1dGhvcml6YXRpb25cIik7XG4gICAgICAgIGF3YWl0IGZsdXNoVXNlckNsaWVudFN0b3JhZ2VOb3coKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNsZWFyQXV0aFNlc3Npb25JbldvcmRQcmVzc0RiKCk7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cud3BBcGlTZXR0aW5ncykge1xuICAgICAgICB3aW5kb3cud3BBcGlTZXR0aW5ncy5hdXRoU2Vzc2lvbkJsb2IgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogXCJBdXRoZW50aWNhdGlvbiB0b2tlbiBjbGVhcmVkIHN1Y2Nlc3NmdWxseVwiLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5hcGlFcnJvcihlcnJvcik7XG4gICAgfVxuICB9LFxufTtcbiIsImltcG9ydCB7IFRva2VuSGFuZGxlIH0gZnJvbSBcIi4vQXV0aFRva2VuXCI7XG5pbXBvcnQge1xuICBnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMsXG4gIHNldFVzZXJDbGllbnRTdG9yYWdlU3luYyxcbn0gZnJvbSBcIi4vdXNlckNsaWVudFN0b3JhZ2UuanNcIjtcblxuLyoqIERpcmVjdCBTYWFTIGJhc2VzIChmYWxsYmFjayB3aGVuIG5vdCBydW5uaW5nIGluc2lkZSBXb3JkUHJlc3Mgd2l0aCBSRVNUIHByb3h5KS4gKi9cbmV4cG9ydCBjb25zdCBBUElfVVJMUyA9IHtcbiAgTE9DQUxIT1NUOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9hcGkvdjEvXCIsXG4gIERFVkVMT1BNRU5UOiBcImh0dHA6Ly9rbGl6b3MuZGRucy5uZXQ6ODAwMC9hcGkvdjEvXCIsXG4gIFBST0RVQ1RJT046IFwiaHR0cHM6Ly9hdXRvd3AuYWkvYXBpL3YxL1wiLFxufTtcblxuLyoqXG4gKiBSRVNUIG5vbmNlIGZvciBhdXRvd3AvdjEgcHJveHkgKHdwX3Jlc3QpLiBNYXRjaGVzIENoYXRib3RTZXJ2aWNlIC8gQWRtaW5Db250cm9sbGVyIGxvY2FsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFdwUmVzdE5vbmNlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIFwiXCI7XG4gIHJldHVybiAoXG4gICAgKHdpbmRvdy53cEFwaVNldHRpbmdzICYmIHdpbmRvdy53cEFwaVNldHRpbmdzLm5vbmNlKSB8fFxuICAgICh3aW5kb3cud3BhaVNlc3Npb25EYXRhICYmIHdpbmRvdy53cGFpU2Vzc2lvbkRhdGEubm9uY2UpIHx8XG4gICAgKHdpbmRvdy5haUNvbnRlbnRTZXR0aW5ncyAmJiB3aW5kb3cuYWlDb250ZW50U2V0dGluZ3Mubm9uY2UpIHx8XG4gICAgXCJcIlxuICApO1xufTtcblxuLyoqXG4gKiBCYXNlIFVSTCBmb3IgU2FhUy1zaGFwZWQgQVBJIGNhbGxzLlxuICogSW4gV29yZFByZXNzIGFkbWluOiBge3dwQXBpU2V0dGluZ3Mucm9vdH1hdXRvd3AvdjEvYCAocGx1Z2luIHByb3h5KS5cbiAqIE92ZXJyaWRlIGRpcmVjdCBTYWFhczogc2V0IGB3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzLmRpcmVjdFNhYVNBcGlVcmxgIChtdXN0IGVuZCB3aXRoIGAvYCBvciBpdCBpcyBub3JtYWxpemVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEF1dG93cEFwaUJhc2VVcmwgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3M/LmRpcmVjdFNhYVNBcGlVcmwpIHtcbiAgICBjb25zdCB1ID0gU3RyaW5nKHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MuZGlyZWN0U2FhU0FwaVVybCkudHJpbSgpO1xuICAgIHJldHVybiB1LmVuZHNXaXRoKFwiL1wiKSA/IHUgOiBgJHt1fS9gO1xuICB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy53cEFwaVNldHRpbmdzPy5yb290KSB7XG4gICAgY29uc3Qgcm9vdCA9IFN0cmluZyh3aW5kb3cud3BBcGlTZXR0aW5ncy5yb290KS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICBcbiAgICByZXR1cm4gYCR7cm9vdH0vYXV0b3dwL3YxL2A7XG4gIH1cbiAgcmV0dXJuIEFQSV9VUkxTLkxPQ0FMSE9TVDtcbn07XG5cbmV4cG9ydCBjb25zdCBBUElfVVJMID0gZ2V0QXV0b3dwQXBpQmFzZVVybCgpO1xuXG5leHBvcnQgY29uc3QgUExVR0lOX0lORk8gPSB7XG4gIG5hbWU6IFwid3BhaS13b3JkcHJlc3MtcGx1Z2luXCIsXG4gIHZlcnNpb246XG4gICAgd2luZG93LndwQXBpU2V0dGluZ3M/LnBsdWdpblZlcnNpb24gfHxcbiAgICB3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzPy52ZXJzaW9uIHx8XG4gICAgXCIxLjAuMFwiLFxufTtcblxuLyoqIExvY2FsU3RvcmFnZSBrZXkgZm9yIFJlYWx0aW1lIENoYXQgYWRkb24gZW5hYmxlZCBzdGF0ZSAodGVtcG9yYXJ5OyB3aWxsIG1vdmUgdG8gYmFja2VuZCBsYXRlcikgKi9cbmV4cG9ydCBjb25zdCBSRUFMVElNRV9DSEFUX1NUT1JBR0VfS0VZID0gXCJ3cGFpX3JlYWx0aW1lX2NoYXRfZW5hYmxlZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhbHRpbWVDaGF0RW5hYmxlZCA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyhSRUFMVElNRV9DSEFUX1NUT1JBR0VfS0VZKSA9PT0gXCJ0cnVlXCI7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UmVhbHRpbWVDaGF0RW5hYmxlZCA9IChlbmFibGVkKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gIHNldFVzZXJDbGllbnRTdG9yYWdlU3luYyhcbiAgICBSRUFMVElNRV9DSEFUX1NUT1JBR0VfS0VZLFxuICAgIGVuYWJsZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgKTtcbn07XG5cbi8qKiBMb2NhbFN0b3JhZ2Uga2V5IGZvciBWaXNpdG9yIEludGVsbGlnZW5jZSAmIENvbnRlbnQgT3B0aW1pemVyIChDb21wZXRpdG9yIEFuYWx5c2lzKSBhZGRvbi4gTm8gdmFsdWUgPSBoaWRkZW4gaW4gc2lkZWJhci4gKi9cbmV4cG9ydCBjb25zdCBWSVNJVE9SX0lOVEVMTElHRU5DRV9TVE9SQUdFX0tFWSA9XG4gIFwid3BhaV92aXNpdG9yX2ludGVsbGlnZW5jZV9lbmFibGVkXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRWaXNpdG9ySW50ZWxsaWdlbmNlRW5hYmxlZCA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGdldFVzZXJDbGllbnRTdG9yYWdlU3luYyhWSVNJVE9SX0lOVEVMTElHRU5DRV9TVE9SQUdFX0tFWSkgPT09IFwidHJ1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFZpc2l0b3JJbnRlbGxpZ2VuY2VFbmFibGVkID0gKGVuYWJsZWQpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgc2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKFxuICAgIFZJU0lUT1JfSU5URUxMSUdFTkNFX1NUT1JBR0VfS0VZLFxuICAgIGVuYWJsZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgKTtcbn07XG5cbi8qKiBXZWJTb2NrZXQgYmFzZSBVUkwgZm9yIHJlYWx0aW1lIGNoYXQgKEZhc3RBUEkgc2VydmVyKS4gT3ZlcnJpZGUgdmlhIHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MucmVhbHRpbWVXc0hvc3QgKi9cbmV4cG9ydCBjb25zdCBnZXRSZWFsdGltZVdzQmFzZVVybCA9ICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBcIndzczovL2NvbnRyb2xjZW50ZXIuYXV0b3dwLmFpXCI7XG4gIHJldHVybiAoXG4gICAgKHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncy5yZWFsdGltZVdzSG9zdCkgfHxcbiAgICBcIndzczovL2NvbnRyb2xjZW50ZXIuYXV0b3dwLmFpXCJcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZXNzaW9uSUQgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy53cGFpU2Vzc2lvbkRhdGEpIHtcbiAgICByZXR1cm4gd2luZG93LndwYWlTZXNzaW9uRGF0YS5zZXNzaW9uSUQgfHwgbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBFbmNyeXB0UGF5bG9hZCA9IChwYXlsb2FkKSA9PiB7XG4gIGNvbnN0IGpzb25EYXRhID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG5cbiAgLy8gRW5jb2RlIHRvIFVURi04IGJlZm9yZSBiYXNlNjRcbiAgY29uc3QgZW5jb2RlZERhdGEgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChqc29uRGF0YSkpKTtcbiAgcmV0dXJuIGVuY29kZWREYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IERlY3J5cHRQYXlsb2FkID0gKHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAoIWlzQmFzZTY0KHBheWxvYWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZERhdGEgPSBhdG9iKHBheWxvYWQpO1xuICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSk7XG4gICAgcmV0dXJuIGpzb25EYXRhO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGRlY29kZSB0aGUgZGF0YS4gUGxlYXNlIGNoZWNrIHRoZSBkYXRhIGZvcm1hdC4nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgaXNCYXNlNjQgPSAoc3RyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGJ0b2EoYXRvYihzdHIpKSA9PT0gc3RyO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIFNvbWUgQVBJcyByZXR1cm4gZW5jb2RlZF9kYXRhIGFzIGEgYmFzZTY0IHN0cmluZzsgb3RoZXJzIHJldHVybiB0aGUgc2FtZSBzaGFwZSBhcyBwYXJzZWQgSlNPTi5cbiAqIFdvcmRQcmVzcyBzZXNzaW9uIHN0b3JhZ2UgZXhwZWN0cyBhIGJhc2U2NCBibG9iIHRoYXQgRGVjcnlwdFBheWxvYWQgY2FuIHJlYWQgb24gcmVsb2FkLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplRW5jb2RlZERhdGFGb3JTZXNzaW9uID0gKGVuY29kZWRfZGF0YSkgPT4ge1xuICBpZiAoZW5jb2RlZF9kYXRhID09IG51bGwgfHwgZW5jb2RlZF9kYXRhID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHsgZGVjb2RlZDogbnVsbCwgc3RvcmFnZVBheWxvYWQ6IG51bGwgfTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kZWRfZGF0YSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShlbmNvZGVkX2RhdGEpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlY29kZWQ6IGVuY29kZWRfZGF0YSxcbiAgICAgIHN0b3JhZ2VQYXlsb2FkOiBFbmNyeXB0UGF5bG9hZChlbmNvZGVkX2RhdGEpLFxuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGVkX2RhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVjb2RlZDogRGVjcnlwdFBheWxvYWQoZW5jb2RlZF9kYXRhKSxcbiAgICAgIHN0b3JhZ2VQYXlsb2FkOiBlbmNvZGVkX2RhdGEsXG4gICAgfTtcbiAgfVxuICByZXR1cm4geyBkZWNvZGVkOiBudWxsLCBzdG9yYWdlUGF5bG9hZDogbnVsbCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IEdldERhdGFGcm9tTG9jYWxTdG9yYWdlID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBkYXRhVG9rZW5SZXNwb25zZSA9IGF3YWl0IFRva2VuSGFuZGxlLmdldFRva2VuKCk7XG5cbiAgY29uc3QgZGF0YSA9IGRhdGFUb2tlblJlc3BvbnNlLnRva2VuPy5hdXRoX3Rva2VuO1xuICBpZiAoZGF0YSkge1xuICAgIGNvbnN0IGRlY3J5cHRlZERhdGEgPSBEZWNyeXB0UGF5bG9hZChkYXRhKTtcbiAgICByZXR1cm4gZGVjcnlwdGVkRGF0YTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBUaW1lRGlmZiA9IChkYXRlKSA9PiB7XG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKChuZXcgRGF0ZSgpIC0gbmV3IERhdGUoZGF0ZSkpIC8gMTAwMCk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XG4gIGlmIChtaW51dGVzIDwgMSkgcmV0dXJuIFwiSnVzdCBub3dcIjtcbiAgaWYgKG1pbnV0ZXMgPCA2MCkgcmV0dXJuIGAke21pbnV0ZXN9IG1pbnV0ZSR7bWludXRlcyA+IDEgPyBcInNcIiA6IFwiXCJ9IGFnb2A7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApO1xuICBpZiAoaG91cnMgPCAyNCkgcmV0dXJuIGAke2hvdXJzfSBob3VyJHtob3VycyA+IDEgPyBcInNcIiA6IFwiXCJ9IGFnb2A7XG4gIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMjQpO1xuICByZXR1cm4gYCR7ZGF5c30gZGF5JHtkYXlzID4gMSA/IFwic1wiIDogXCJcIn0gYWdvYDtcbn07XG5cbmV4cG9ydCBjb25zdCBXcEFpUGx1Z2luc1ByaWNpbmcgPSBbXG4gIHtcbiAgICB0aXRsZTogXCJGcmVlIFBsYW5cIixcbiAgICBhcnRpY2xlc1Blck1vbnRoOiAxNSxcbiAgICBjaGF0Ym90UmVzcG9uc2VzOiA1MDAwLFxuICAgIHByaWNlOiBcIiQwXCIsXG4gICAgcGVyaW9kOiBcIm1vbnRoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlBlcmZlY3QgZm9yIGluZGl2aWR1YWxzIG9yIHNtYWxsIHByb2plY3RzIGp1c3QgZ2V0dGluZyBzdGFydGVkLlwiLFxuICAgIGZlYXR1cmVzOiBbXG4gICAgICBcIkdlbmVyYXRlIDE1IGFydGljbGVzIHBlciBtb250aFwiLFxuICAgICAgXCI1MDAwIEFJIGNoYXRib3QgcmVzcG9uc2VzIHBlciBtb250aFwiLFxuICAgICAgXCIxMDAgQUkgY29tbWVudHMgcGVyIG1vbnRoXCIsXG4gICAgICBcIkJhc2ljIGNoYXRib3QgZmVhdHVyZXNcIixcbiAgICAgIFwiQmFzaWMgU0VPIG9wdGltaXphdGlvblwiLFxuICAgICAgXCJDb21tdW5pdHkgc3VwcG9ydFwiLFxuICAgICAgXCJCYXNpYyBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDE1IHRpbWVzXCIsXG4gICAgICBcIktub3dsZWRnZSBCYXNlIFRva2VuIExpbWl0OiA1MCwwMDAgdG9rZW5zXCIsXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiBcIlNpbHZlciBQbGFuXCIsXG4gICAgYXJ0aWNsZXNQZXJNb250aDogMTAwLFxuICAgIGNoYXRib3RSZXNwb25zZXM6IDUwMDAwLFxuICAgIHByaWNlOiBcIiQyMFwiLFxuICAgIHBlcmlvZDogXCJtb250aFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJHcmVhdCBmb3IgZ3Jvd2luZyBidXNpbmVzc2VzIHNlZWtpbmcgdG8gYm9vc3QgdGhlaXIgZGlnaXRhbCBmb290cHJpbnQgYW5kIGVuZ2FnZW1lbnQuXCIsXG4gICAgZmVhdHVyZXM6IFtcbiAgICAgIFwiR2VuZXJhdGUgMTAwIGFydGljbGVzIHBlciBtb250aFwiLFxuICAgICAgXCI1MCwwMDAgQUkgY2hhdGJvdCByZXNwb25zZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjMwMCBBSSBjb21tZW50cyBwZXIgbW9udGhcIixcbiAgICAgIFwiQ3VzdG9tIGNoYXRib3QgcGVyc29uYWxpdHlcIixcbiAgICAgIFwiQWR2YW5jZWQgU0VPIG9wdGltaXphdGlvblwiLFxuICAgICAgXCJQcmlvcml0eSBzdXBwb3J0XCIsXG4gICAgICBcIkFjY2VzcyB0byBwcmVtaXVtIHRlbXBsYXRlc1wiLFxuICAgICAgXCJDdXN0b20gY29udGVudCB0b25lXCIsXG4gICAgICBcIktleXdvcmQgcmVzZWFyY2ggdG9vbHNcIixcbiAgICAgIFwiQ2hhdCB3aWRnZXQgY3VzdG9taXphdGlvblwiLFxuICAgICAgXCJLbm93bGVkZ2UgQmFzZSBUb2tlbiBMaW1pdDogMTAwLDAwMCB0b2tlbnNcIixcbiAgICAgIFwiYmFzaWMgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAyMCB0aW1lc1wiLFxuICAgICAgXCJBZHZhbmNlZCBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDUwIHRpbWVzXCIsXG4gICAgICBcIlVsdHJhIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMjAgdGltZXNcIixcbiAgICAgIFwiTWF4IEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgMTAgdGltZXNcIixcbiAgICBdLFxuICAgIHBvcHVsYXI6IHRydWUsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogXCJHb2xkIFBsYW5cIixcbiAgICBhcnRpY2xlc1Blck1vbnRoOiAxODAsXG4gICAgY2hhdGJvdFJlc3BvbnNlczogMTUwMDAwLFxuICAgIHByaWNlOiBcIiQ0OVwiLFxuICAgIHBlcmlvZDogXCJtb250aFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJJZGVhbCBmb3Igc21hbGwgYnVzaW5lc3NlcyBsb29raW5nIHRvIGVuaGFuY2UgdGhlaXIgb25saW5lIHByZXNlbmNlLlwiLFxuICAgIGZlYXR1cmVzOiBbXG4gICAgICBcIkdlbmVyYXRlIDE4MCBhcnRpY2xlcyBwZXIgbW9udGhcIixcbiAgICAgIFwiMSw1MCwwMDAgQUkgY2hhdGJvdCByZXNwb25zZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjgwMCBBSSBjb21tZW50cyBwZXIgbW9udGhcIixcbiAgICAgIFwiQ3VzdG9tIGNoYXRib3QgcGVyc29uYWxpdHlcIixcbiAgICAgIFwiQWR2YW5jZWQgU0VPIG9wdGltaXphdGlvblwiLFxuICAgICAgXCJQcmlvcml0eSBzdXBwb3J0XCIsXG4gICAgICBcIkFjY2VzcyB0byBwcmVtaXVtIHRlbXBsYXRlc1wiLFxuICAgICAgXCJDdXN0b20gY29udGVudCB0b25lXCIsXG4gICAgICBcIktleXdvcmQgcmVzZWFyY2ggdG9vbHNcIixcbiAgICAgIFwiQ2hhdCB3aWRnZXQgY3VzdG9taXphdGlvblwiLFxuICAgICAgXCJLbm93bGVkZ2UgQmFzZSBUb2tlbiBMaW1pdDogNTAwLDAwMCB0b2tlbnNcIixcbiAgICAgIFwiYmFzaWMgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAzNSB0aW1lc1wiLFxuICAgICAgXCJBZHZhbmNlZCBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDEwMCB0aW1lc1wiLFxuICAgICAgXCJVbHRyYSBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDMwIHRpbWVzXCIsXG4gICAgICBcIk1heCBBSSBtb2RlbCBhdmFpbGFibGUgZm9yIDE1IHRpbWVzXCIsXG4gICAgXSxcbiAgICBwb3B1bGFyOiB0cnVlLFxuICB9LFxuICB7XG4gICAgdGl0bGU6IFwiUGxhdGludW0gUGxhblwiLFxuICAgIGFydGljbGVzUGVyTW9udGg6IDQzMCxcbiAgICBjaGF0Ym90UmVzcG9uc2VzOiA1MDAwMDAsXG4gICAgcHJpY2U6IFwiJDk5XCIsXG4gICAgcGVyaW9kOiBcIm1vbnRoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIkJlc3QgZm9yIGFnZW5jaWVzIGFuZCBsYXJnZSBidXNpbmVzc2VzIG5lZWRpbmcgZXh0ZW5zaXZlIGNvbnRlbnQgZ2VuZXJhdGlvbi5cIixcbiAgICBmZWF0dXJlczogW1xuICAgICAgXCJHZW5lcmF0ZSA0MzAgYXJ0aWNsZXMgcGVyIG1vbnRoXCIsXG4gICAgICBcIjUsMDAsMDAwIEFJIGNoYXRib3QgcmVzcG9uc2VzIHBlciBtb250aFwiLFxuICAgICAgXCIzLDAwMCBBSSBjb21tZW50cyBwZXIgbW9udGhcIixcbiAgICAgIFwiQWR2YW5jZWQgY2hhdGJvdCBhbmFseXRpY3NcIixcbiAgICAgIFwiTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFwiLFxuICAgICAgXCJFeHBlcnQgU0VPIG9wdGltaXphdGlvblwiLFxuICAgICAgXCIyNC83IFByZW1pdW0gc3VwcG9ydFwiLFxuICAgICAgXCJBbGwgcHJlbWl1bSB0ZW1wbGF0ZXNcIixcbiAgICAgIFwiQWR2YW5jZWQgYW5hbHl0aWNzXCIsXG4gICAgICBcIkFQSSBhY2Nlc3NcIixcbiAgICAgIFwiQ3VzdG9tIGludGVncmF0aW9uc1wiLFxuICAgICAgXCJEZWRpY2F0ZWQgYWNjb3VudCBtYW5hZ2VyXCIsXG4gICAgICBcIktub3dsZWRnZSBCYXNlIFRva2VuIExpbWl0OiAyLDAwMCwwMDAgdG9rZW5zXCIsXG4gICAgICBcImJhc2ljIEFJIG1vZGVsIGF2YWlsYWJsZSBmb3IgNjUgdGltZXNcIixcbiAgICAgIFwiQWR2YW5jZWQgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAyNTAgdGltZXNcIixcbiAgICAgIFwiVWx0cmEgQUkgbW9kZWwgYXZhaWxhYmxlIGZvciA5MCB0aW1lc1wiLFxuICAgICAgXCJNYXggQUkgbW9kZWwgYXZhaWxhYmxlIGZvciAyNSB0aW1lc1wiLFxuICAgIF0sXG4gIH0sXG5dO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgQm94LCBUeXBvZ3JhcGh5IH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcblxyXG4vKipcclxuICogTGlnaHR3ZWlnaHQgbWFya2Rvd24g4oaSIFJlYWN0IChib2xkLCBpbmxpbmUgY29kZSwgZmVuY2VkIGJsb2Nrcywgc2ltcGxlIGxpc3RzKS5cclxuICogTm8gZXh0ZXJuYWwgZGVwczsgc2FmZSBmb3IgdW50cnVzdGVkIGNvbnRlbnQgKG5vIHJhdyBIVE1MKS5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlSW5saW5lKHRleHQpIHtcclxuICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xyXG4gIGNvbnN0IHBhcnRzID0gW107XHJcbiAgbGV0IGtleSA9IDA7XHJcbiAgbGV0IGkgPSAwO1xyXG4gIGNvbnN0IGxlbiA9IHRleHQubGVuZ3RoO1xyXG4gIHdoaWxlIChpIDwgbGVuKSB7XHJcbiAgICBpZiAodGV4dC5zdGFydHNXaXRoKCcqKicsIGkpKSB7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHRleHQuaW5kZXhPZignKionLCBpICsgMik7XHJcbiAgICAgIGlmIChlbmQgIT09IC0xKSB7XHJcbiAgICAgICAgcGFydHMucHVzaCg8c3Ryb25nIGtleT17a2V5Kyt9Pnt0ZXh0LnNsaWNlKGkgKyAyLCBlbmQpfTwvc3Ryb25nPik7XHJcbiAgICAgICAgaSA9IGVuZCArIDI7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0ZXh0W2ldID09PSAnYCcpIHtcclxuICAgICAgY29uc3QgZW5kID0gdGV4dC5pbmRleE9mKCdgJywgaSArIDEpO1xyXG4gICAgICBpZiAoZW5kICE9PSAtMSkge1xyXG4gICAgICAgIHBhcnRzLnB1c2goXHJcbiAgICAgICAgICA8Qm94XHJcbiAgICAgICAgICAgIGNvbXBvbmVudD1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXk9e2tleSsrfVxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIHB4OiAwLjc1LFxyXG4gICAgICAgICAgICAgIHB5OiAwLjEyNSxcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDAuNzUsXHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogJ3JnYmEoMTUsMjMsNDIsMC4wNiknLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICd1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlJyxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzAuODRlbSdcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3RleHQuc2xpY2UoaSArIDEsIGVuZCl9XHJcbiAgICAgICAgICA8L0JveD5cclxuICAgICAgICApO1xyXG4gICAgICAgIGkgPSBlbmQgKyAxO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbmV4dCA9IGxlbjtcclxuICAgIGNvbnN0IGJvbGRBdCA9IHRleHQuaW5kZXhPZignKionLCBpKTtcclxuICAgIGNvbnN0IHRpY2tBdCA9IHRleHQuaW5kZXhPZignYCcsIGkpO1xyXG4gICAgaWYgKGJvbGRBdCAhPT0gLTEpIG5leHQgPSBNYXRoLm1pbihuZXh0LCBib2xkQXQpO1xyXG4gICAgaWYgKHRpY2tBdCAhPT0gLTEpIG5leHQgPSBNYXRoLm1pbihuZXh0LCB0aWNrQXQpO1xyXG4gICAgaWYgKG5leHQgPiBpKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goPHNwYW4ga2V5PXtrZXkrK30+e3RleHQuc2xpY2UoaSwgbmV4dCl9PC9zcGFuPik7XHJcbiAgICB9XHJcbiAgICBpID0gbmV4dCA9PT0gaSA/IGkgKyAxIDogbmV4dDtcclxuICB9XHJcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA/IHBhcnRzIDogdGV4dDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENoYXRib3RNYXJrZG93bkNvbnRlbnQoe1xyXG4gIHRleHQsXHJcbiAgaXNVc2VyLFxyXG4gIGlzU3RyZWFtaW5nXHJcbn0pIHtcclxuICBpZiAodGV4dCA9PSBudWxsIHx8IHRleHQgPT09ICcnKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgaWYgKGlzU3RyZWFtaW5nKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8VHlwb2dyYXBoeVxyXG4gICAgICAgIGNvbXBvbmVudD1cImRpdlwiXHJcbiAgICAgICAgdmFyaWFudD1cImJvZHkxXCJcclxuICAgICAgICBzeD17e1xyXG4gICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyxcclxuICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxyXG4gICAgICAgICAgZm9udFNpemU6ICcwLjkzNzVyZW0nLFxyXG4gICAgICAgICAgbGluZUhlaWdodDogMS42NSxcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcclxuICAgICAgICAgIGxldHRlclNwYWNpbmc6ICcwLjAycHgnXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHt0ZXh0fVxyXG4gICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYmxvY2tzID0gW107XHJcbiAgbGV0IHJlc3QgPSB0ZXh0O1xyXG4gIGxldCBiaSA9IDA7XHJcblxyXG4gIHdoaWxlIChyZXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGZlbmNlID0gcmVzdC5pbmRleE9mKCdgYGAnKTtcclxuICAgIGlmIChmZW5jZSA9PT0gLTEpIHtcclxuICAgICAgYmxvY2tzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdwcm9zZScsXHJcbiAgICAgICAgY29udGVudDogcmVzdFxyXG4gICAgICB9KTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAoZmVuY2UgPiAwKSB7XHJcbiAgICAgIGJsb2Nrcy5wdXNoKHtcclxuICAgICAgICB0eXBlOiAncHJvc2UnLFxyXG4gICAgICAgIGNvbnRlbnQ6IHJlc3Quc2xpY2UoMCwgZmVuY2UpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoZmVuY2UgKyAzKTtcclxuICAgIGNvbnN0IGVuZEZlbmNlID0gcmVzdC5pbmRleE9mKCdgYGAnKTtcclxuICAgIGlmIChlbmRGZW5jZSA9PT0gLTEpIHtcclxuICAgICAgYmxvY2tzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdjb2RlJyxcclxuICAgICAgICBjb250ZW50OiByZXN0XHJcbiAgICAgIH0pO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGJsb2Nrcy5wdXNoKHtcclxuICAgICAgdHlwZTogJ2NvZGUnLFxyXG4gICAgICBjb250ZW50OiByZXN0LnNsaWNlKDAsIGVuZEZlbmNlKS5yZXBsYWNlKC9eXFx3Klxcbi8sICcnKVxyXG4gICAgfSk7XHJcbiAgICByZXN0ID0gcmVzdC5zbGljZShlbmRGZW5jZSArIDMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxCb3ggc3g9e3sgJyYgPiAqOm5vdCg6bGFzdC1jaGlsZCknOiB7IG1iOiAxLjI1IH0gfX0+XHJcbiAgICAgIHtibG9ja3MubWFwKChibG9jaywgaWR4KSA9PiB7XHJcbiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICdjb2RlJykge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPEJveFxyXG4gICAgICAgICAgICAgIGtleT17YGItJHtiaSsrfWB9XHJcbiAgICAgICAgICAgICAgY29tcG9uZW50PVwicHJlXCJcclxuICAgICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgICAgbTogMCxcclxuICAgICAgICAgICAgICAgIHA6IDEuNSxcclxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMixcclxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgYmdjb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJ3JnYmEoMTUsMjMsNDIsMC4wNiknLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkJyxcclxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsMjU1LDI1NSwwLjIpJyA6ICdyZ2JhKDE1LDIzLDQyLDAuMDgpJyxcclxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICd1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlJyxcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC44MTI1cmVtJyxcclxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8Y29kZT57YmxvY2suY29udGVudH08L2NvZGU+XHJcbiAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGluZXMgPSBibG9jay5jb250ZW50LnNwbGl0KCdcXG4nKTtcclxuICAgICAgICBjb25zdCBub2RlcyA9IFtdO1xyXG4gICAgICAgIGxldCBsaSA9IDA7XHJcbiAgICAgICAgbGV0IGxpc3RCdWYgPSBbXTtcclxuICAgICAgICBjb25zdCBmbHVzaExpc3QgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWxpc3RCdWYubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICBub2Rlcy5wdXNoKFxyXG4gICAgICAgICAgICA8Qm94XHJcbiAgICAgICAgICAgICAga2V5PXtgdWwtJHtsaSsrfWB9XHJcbiAgICAgICAgICAgICAgY29tcG9uZW50PVwidWxcIlxyXG4gICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICBtOiAwLFxyXG4gICAgICAgICAgICAgICAgcGw6IDIuMjUsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2luaGVyaXQnLFxyXG4gICAgICAgICAgICAgICAgJyYgbGknOiB7IG1iOiAwLjUgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7bGlzdEJ1Zi5tYXAoKGl0ZW0sIGopID0+IChcclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XHJcbiAgICAgICAgICAgICAgICAgIGtleT17an1cclxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwibGlcIlxyXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxyXG4gICAgICAgICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC45Mzc1cmVtJyxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjY1LFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdsaXN0LWl0ZW0nXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHtwYXJzZUlubGluZShpdGVtKX1cclxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGlzdEJ1ZiA9IFtdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBsaXN0TWF0Y2ggPSBsaW5lLm1hdGNoKC9eXFxzKlstKl1cXHMrKC4qKSQvKTtcclxuICAgICAgICAgIGlmIChsaXN0TWF0Y2gpIHtcclxuICAgICAgICAgICAgbGlzdEJ1Zi5wdXNoKGxpc3RNYXRjaFsxXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmbHVzaExpc3QoKTtcclxuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWU7XHJcbiAgICAgICAgICAgIG5vZGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcclxuICAgICAgICAgICAgICAgIGtleT17YHAtJHtpZHh9LSR7bm9kZXMubGVuZ3RofWB9XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ9XCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImJvZHkxXCJcclxuICAgICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXHJcbiAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuOTM3NXJlbScsXHJcbiAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNjUsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7cGFyc2VJbmxpbmUobGluZSl9XHJcbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmbHVzaExpc3QoKTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17YGZyYWctJHtpZHh9YH0+XHJcbiAgICAgICAgICAgIHtub2Rlc31cclxuICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XHJcbiAgICAgICAgKTtcclxuICAgICAgfSl9XHJcbiAgICA8L0JveD5cclxuICApO1xyXG59XHJcblxyXG5cclxuXHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IEJveCwgVHlwb2dyYXBoeSwgUGFwZXIsIEF2YXRhciwgSWNvbkJ1dHRvbiwgVG9vbHRpcCwgVGV4dEZpZWxkIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DaGVjayc7XHJcbmltcG9ydCBFcnJvck91dGxpbmVJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRXJyb3JPdXRsaW5lJztcclxuaW1wb3J0IFJlZnJlc2hJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvUmVmcmVzaCc7XHJcbmltcG9ydCBIb3VyZ2xhc3NFbXB0eUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9Ib3VyZ2xhc3NFbXB0eSc7XHJcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcclxuaW1wb3J0IHsgQ2hhdGJvdE1hcmtkb3duQ29udGVudCB9IGZyb20gJy4vY2hhdGJvdE1hcmtkb3duLmpzeCc7XHJcblxyXG5jb25zdCBlbnRlclVwID0ga2V5ZnJhbWVzYFxyXG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7IH1cclxuICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxyXG5gO1xyXG5cclxuY29uc3Qgc3RyZWFtR2xvdyA9IGtleWZyYW1lc2BcclxuICAwJSB7IG9wYWNpdHk6IDAuMzU7IH1cclxuICA1MCUgeyBvcGFjaXR5OiAxOyB9XHJcbiAgMTAwJSB7IG9wYWNpdHk6IDAuMzU7IH1cclxuYDtcclxuXHJcbmZ1bmN0aW9uIElubGluZUZvcm1GaWVsZChwcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8VGV4dEZpZWxkXHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgICAgc3g9e3tcclxuICAgICAgICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Jzoge1xyXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXHJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcclxuICAgICAgICAgICcmIGZpZWxkc2V0JzogeyBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyB9LFxyXG4gICAgICAgICAgJyYuTXVpLWZvY3VzZWQnOiB7XHJcbiAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDUpJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJyYgLk11aUlucHV0QmFzZS1pbnB1dCc6IHtcclxuICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxyXG4gICAgICAgICAgZm9udFNpemU6ICcwLjkzNzVyZW0nXHJcbiAgICAgICAgfVxyXG4gICAgICB9fVxyXG4gICAgLz5cclxuICApO1xyXG59XHJcblxyXG5jb25zdCBDaGF0Ym90TWVzc2FnZUJ1YmJsZSA9ICh7XHJcbiAgbWVzc2FnZSxcclxuICBwcmltYXJ5Q29sb3IgPSAnIzYzNjZmMScsXHJcbiAgc2Vjb25kYXJ5Q29sb3IgPSAnI2ZmZmZmZicsXHJcbiAgb25TdHJlYW1Db21wbGV0ZSxcclxuICBvblJldHJ5XHJcbn0pID0+IHtcclxuICBjb25zdCBbdmlzaWJsZUxlbiwgc2V0VmlzaWJsZUxlbl0gPSB1c2VTdGF0ZSgoKSA9PiAoIW1lc3NhZ2UuaXNTdHJlYW1pbmcgPyAobWVzc2FnZS50ZXh0IHx8ICcnKS5sZW5ndGggOiAwKSk7XHJcbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgY29uc3Qgc3RyZWFtTm90aWZpZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XHJcbiAgICBzdHJlYW1Ob3RpZmllZFJlZi5jdXJyZW50ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCFtZXNzYWdlLmlzU3RyZWFtaW5nKSB7XHJcbiAgICAgIHNldFZpc2libGVMZW4oKG1lc3NhZ2UudGV4dCB8fCAnJykubGVuZ3RoKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmdWxsID0gbWVzc2FnZS50ZXh0IHx8ICcnO1xyXG4gICAgaWYgKCFmdWxsLmxlbmd0aCkge1xyXG4gICAgICBpZiAoIXN0cmVhbU5vdGlmaWVkUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICBzdHJlYW1Ob3RpZmllZFJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgICAgICBvblN0cmVhbUNvbXBsZXRlPy4obWVzc2FnZS5pZCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbGVuID0gMDtcclxuICAgIHNldFZpc2libGVMZW4oMCk7XHJcblxyXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcclxuICAgICAgbGVuID0gTWF0aC5taW4oZnVsbC5sZW5ndGgsIGxlbiArIDEpO1xyXG4gICAgICBzZXRWaXNpYmxlTGVuKGxlbik7XHJcbiAgICAgIGlmIChsZW4gPj0gZnVsbC5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIXN0cmVhbU5vdGlmaWVkUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgIHN0cmVhbU5vdGlmaWVkUmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgb25TdHJlYW1Db21wbGV0ZT8uKG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2ggPSBmdWxsW2xlbiAtIDFdO1xyXG4gICAgICBjb25zdCBkZWxheSA9IGNoID09PSAnXFxuJyA/IDI2IDogL1tcXHMsLjs6XS8udGVzdChjaCkgPyAxMiA6IDE2ICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTIpO1xyXG4gICAgICB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQodGljaywgZGVsYXkpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQodGljaywgNDUpO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XHJcbiAgICB9O1xyXG4gIH0sIFttZXNzYWdlLmlkLCBtZXNzYWdlLmlzU3RyZWFtaW5nLCBtZXNzYWdlLnRleHQsIG9uU3RyZWFtQ29tcGxldGVdKTtcclxuXHJcbiAgaWYgKG1lc3NhZ2UuZm9ybUZpZWxkKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8Qm94XHJcbiAgICAgICAgc3g9e3tcclxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxyXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxyXG4gICAgICAgICAgbWI6IDIsXHJcbiAgICAgICAgICBtbDogNSxcclxuICAgICAgICAgIG1heFdpZHRoOiAnODUlJ1xyXG4gICAgICAgIH19XHJcbiAgICAgID5cclxuICAgICAgICA8SW5saW5lRm9ybUZpZWxkXHJcbiAgICAgICAgICBmdWxsV2lkdGhcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPXttZXNzYWdlLnBsYWNlaG9sZGVyfVxyXG4gICAgICAgICAgdmFsdWU9e21lc3NhZ2UudmFsdWV9XHJcbiAgICAgICAgICBvbkNoYW5nZT17bWVzc2FnZS5vbkNoYW5nZX1cclxuICAgICAgICAgIHR5cGU9e21lc3NhZ2UudHlwZSB8fCAndGV4dCd9XHJcbiAgICAgICAgICBlcnJvcj17bWVzc2FnZS5lcnJvcn1cclxuICAgICAgICAgIGhlbHBlclRleHQ9e21lc3NhZ2UuaGVscGVyVGV4dH1cclxuICAgICAgICAgIGF1dG9Gb2N1c1xyXG4gICAgICAgICAgb25LZXlQcmVzcz17ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICBtZXNzYWdlLm9uU3VibWl0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvQm94PlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGlzVXNlciA9IG1lc3NhZ2UuaXNVc2VyO1xyXG4gIGNvbnN0IGZ1bGxMZW4gPSAobWVzc2FnZS50ZXh0IHx8ICcnKS5sZW5ndGg7XHJcbiAgY29uc3QgZGlzcGxheVRleHQgPSAobWVzc2FnZS50ZXh0IHx8ICcnKS5zbGljZSgwLCB2aXNpYmxlTGVuKTtcclxuICBjb25zdCBzdHJlYW1Eb25lID0gIW1lc3NhZ2UuaXNTdHJlYW1pbmcgfHwgdmlzaWJsZUxlbiA+PSBmdWxsTGVuO1xyXG4gIGNvbnN0IHNob3dNZCA9ICFpc1VzZXIgJiYgc3RyZWFtRG9uZTtcclxuXHJcbiAgY29uc3QgdXNlckJ1YmJsZUJnID0gcHJpbWFyeUNvbG9yIHx8ICcjNjM2NmYxJztcclxuICBjb25zdCB1c2VyVGV4dCA9IHNlY29uZGFyeUNvbG9yIHx8ICcjZmZmZmZmJztcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxCb3hcclxuICAgICAgc3g9e3tcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXHJcbiAgICAgICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICBtYjogMixcclxuICAgICAgICBhbmltYXRpb246IGAke2VudGVyVXB9IDAuMzhzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSBib3RoYCxcclxuICAgICAgICAnQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJzoge1xyXG4gICAgICAgICAgYW5pbWF0aW9uOiAnbm9uZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgICcmOmhvdmVyIC53cGFpLW1zZy1tZXRhJzogeyBvcGFjaXR5OiAxIH1cclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPEJveFxyXG4gICAgICAgIHN4PXt7XHJcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICBtYXhXaWR0aDogJzg4JScsXHJcbiAgICAgICAgICBnYXA6IDEuMjUsXHJcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXHJcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1lbmQnXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHshaXNVc2VyICYmIChcclxuICAgICAgICAgIDxBdmF0YXJcclxuICAgICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgICBiZ2NvbG9yOiB1c2VyQnViYmxlQmcsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjdyZW0nLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDgwMCxcclxuICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxyXG4gICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDhweCByZ2JhKDE1LDIzLDQyLDAuMSknLFxyXG4gICAgICAgICAgICAgIGJvcmRlcjogJzJweCBzb2xpZCAjZmZmJ1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBSVxyXG4gICAgICAgICAgPC9BdmF0YXI+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPEJveCBzeD17eyBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDQ4cHgpJywgcG9zaXRpb246ICdyZWxhdGl2ZScgfX0+XHJcbiAgICAgICAgICA8UGFwZXJcclxuICAgICAgICAgICAgZWxldmF0aW9uPXswfVxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIHA6ICcxMnB4IDE2cHgnLFxyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogaXNVc2VyID8gJzE4cHggMThweCA2cHggMThweCcgOiAnMThweCAxOHB4IDE4cHggNnB4JyxcclxuICAgICAgICAgICAgICBiZ2NvbG9yOiBpc1VzZXIgPyB1c2VyQnViYmxlQmcgOiAnI2YxZjVmOScsXHJcbiAgICAgICAgICAgICAgY29sb3I6IGlzVXNlciA/IHVzZXJUZXh0IDogJyMwZjE3MmEnLFxyXG4gICAgICAgICAgICAgIGJveFNoYWRvdzogaXNVc2VyXHJcbiAgICAgICAgICAgICAgICA/ICcwIDRweCAxNHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4xMiknXHJcbiAgICAgICAgICAgICAgICA6ICcwIDRweCAxNHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wNiknLFxyXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCcsXHJcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGlzVXNlciA/ICd0cmFuc3BhcmVudCcgOiAncmdiYSgxNSwyMyw0MiwwLjA2KScsXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JveC1zaGFkb3cgMC4ycyBlYXNlJyxcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpc1VzZXIgPyB1c2VyQnViYmxlQmcgOiAnbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2Y4ZmFmYyAwJSwgI2YxZjVmOSAxMDAlKScsXHJcbiAgICAgICAgICAgICAgLi4uKG1lc3NhZ2UuaXNTdHJlYW1pbmcgJiYgIWlzVXNlclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCA0cHggMjBweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4xMiknLFxyXG4gICAgICAgICAgICAgICAgICAgICcmOjpiZWZvcmUnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGluc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KDExMGRlZywgdHJhbnNwYXJlbnQgMCUsICR7dXNlckJ1YmJsZUJnfTIyIDQ1JSwgdHJhbnNwYXJlbnQgOTAlKWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246IGAke3N0cmVhbUdsb3d9IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlYFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiB7fSlcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2lzVXNlciA/IChcclxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxyXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImJvZHkxXCJcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudD1cImRpdlwiXHJcbiAgICAgICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLFxyXG4gICAgICAgICAgICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjkzNzVyZW0nLFxyXG4gICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjY1LFxyXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA0NTAsXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB1c2VyVGV4dFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7bWVzc2FnZS50ZXh0fVxyXG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgKSA6IHNob3dNZCA/IChcclxuICAgICAgICAgICAgICA8Q2hhdGJvdE1hcmtkb3duQ29udGVudCB0ZXh0PXttZXNzYWdlLnRleHQgfHwgJyd9IGlzVXNlcj17ZmFsc2V9IGlzU3RyZWFtaW5nPXtmYWxzZX0gLz5cclxuICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICA8Q2hhdGJvdE1hcmtkb3duQ29udGVudCB0ZXh0PXtkaXNwbGF5VGV4dH0gaXNVc2VyPXtmYWxzZX0gaXNTdHJlYW1pbmcgLz5cclxuICAgICAgICAgICAgKX1cclxuXHJcbiAgICAgICAgICAgIHttZXNzYWdlLnNvdXJjZXMgJiYgbWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgICAgIDxCb3ggc3g9e3sgbXQ6IDIsIHB0OiAxLjUsIGJvcmRlclRvcDogJzFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMDYpJyB9fT5cclxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJjYXB0aW9uXCIgc3g9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWI6IDEsIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6ICdpbmhlcml0Jywgb3BhY2l0eTogMC43NSB9fT5cclxuICAgICAgICAgICAgICAgICAgU291cmNlc1xyXG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAge21lc3NhZ2Uuc291cmNlcy5tYXAoKHNvdXJjZSwgaW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkga2V5PXtpbmRleH0gdmFyaWFudD1cImNhcHRpb25cIiBzeD17eyBkaXNwbGF5OiAnYmxvY2snLCBtbDogMC41LCBtYjogMC41LCBvcGFjaXR5OiAwLjggfX0+XHJcbiAgICAgICAgICAgICAgICAgICAg4oCiIHtzb3VyY2Uuc291cmNlfSAoUmVsZXZhbmNlOiB7c291cmNlLnJlbGV2YW5jZX0pXHJcbiAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9QYXBlcj5cclxuXHJcbiAgICAgICAgICA8Qm94XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIndwYWktbXNnLW1ldGFcIlxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICAgICAgICBnYXA6IDAuNzUsXHJcbiAgICAgICAgICAgICAgbXQ6IDAuNSxcclxuICAgICAgICAgICAgICBvcGFjaXR5OiAwLjcyLFxyXG4gICAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDAuMnMnLFxyXG4gICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCdcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBzeD17eyBjb2xvcjogJyM2NDc0OGInLCBmb250U2l6ZTogJzAuN3JlbScgfX0+XHJcbiAgICAgICAgICAgICAge21lc3NhZ2UudGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG1lc3NhZ2UudGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KVxyXG4gICAgICAgICAgICAgICAgOiAnJ31cclxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICB7aXNVc2VyICYmIG1lc3NhZ2Uuc3RhdHVzID09PSAnc2VuZGluZycgJiYgKFxyXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPVwiU2VuZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPEhvdXJnbGFzc0VtcHR5SWNvbiBzeD17eyBmb250U2l6ZTogMTQsIGNvbG9yOiAnIzk0YTNiOCcgfX0gYXJpYS1oaWRkZW4gLz5cclxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIHtpc1VzZXIgJiYgbWVzc2FnZS5zdGF0dXMgPT09ICdkZWxpdmVyZWQnICYmIChcclxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIkRlbGl2ZXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgPENoZWNrSWNvbiBzeD17eyBmb250U2l6ZTogMTQsIGNvbG9yOiAnIzIyYzU1ZScgfX0gYXJpYS1oaWRkZW4gLz5cclxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIHtpc1VzZXIgJiYgbWVzc2FnZS5zdGF0dXMgPT09ICdlcnJvcicgJiYgKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT1cIkZhaWxlZCB0byBzZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxFcnJvck91dGxpbmVJY29uIHN4PXt7IGZvbnRTaXplOiAxNiwgY29sb3I6ICcjZWY0NDQ0JyB9fSBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9XCJSZXRyeVwiPlxyXG4gICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJldHJ5IHNlbmRpbmcgbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25SZXRyeT8uKG1lc3NhZ2UpfVxyXG4gICAgICAgICAgICAgICAgICAgIHN4PXt7IHA6IDAuMjUsIGNvbG9yOiAnI2VmNDQ0NCcgfX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxSZWZyZXNoSWNvbiBzeD17eyBmb250U2l6ZTogMTggfX0gLz5cclxuICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgPC9Cb3g+XHJcblxyXG4gICAgICAgIHtpc1VzZXIgJiYgKFxyXG4gICAgICAgICAgPEF2YXRhclxyXG4gICAgICAgICAgICBzeD17e1xyXG4gICAgICAgICAgICAgIGJnY29sb3I6ICdzZWNvbmRhcnkubWFpbicsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjc1cmVtJyxcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXHJcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAycHggOHB4IHJnYmEoMTUsMjMsNDIsMC4xKScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMnB4IHNvbGlkICNmZmYnXHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFVcclxuICAgICAgICAgIDwvQXZhdGFyPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvQm94PlxyXG4gICAgPC9Cb3g+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oQ2hhdGJvdE1lc3NhZ2VCdWJibGUpO1xyXG5cclxuXHJcblxyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBCb3gsIEF2YXRhciwgUGFwZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJztcclxuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xyXG5cclxuY29uc3QgYm91bmNlID0ga2V5ZnJhbWVzYFxyXG4gIDAlLCA4MCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IG9wYWNpdHk6IDAuMzU7IH1cclxuICA0MCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7IG9wYWNpdHk6IDE7IH1cclxuYDtcclxuXHJcbmNvbnN0IHNoaW1tZXIgPSBrZXlmcmFtZXNgXHJcbiAgMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwJSAwOyB9XHJcbiAgMTAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsgfVxyXG5gO1xyXG5cclxuLyoqXHJcbiAqIFR5cGluZyBpbmRpY2F0b3IgaW5zaWRlIGFuIEFJLXN0eWxlIGJ1YmJsZSAoZmFkZSB2aWEgcGFyZW50IHZpc2liaWxpdHkpLlxyXG4gKi9cclxuZnVuY3Rpb24gQ2hhdGJvdFR5cGluZ0luZGljYXRvcih7XHJcbiAgcHJpbWFyeUNvbG9yID0gJyM2MzY2ZjEnLFxyXG4gIGFyaWFMYWJlbCA9ICdBc3Npc3RhbnQgaXMgdHlwaW5nJyxcclxuICBhdmF0YXJMYWJlbCA9ICdBSSdcclxufSkge1xyXG4gIHJldHVybiAoXHJcbiAgICA8Qm94XHJcbiAgICAgIHN4PXt7XHJcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXHJcbiAgICAgICAgZ2FwOiAxLjI1LFxyXG4gICAgICAgIG1iOiAyLFxyXG4gICAgICAgIG1heFdpZHRoOiAnODUlJyxcclxuICAgICAgICBhbmltYXRpb246ICd3cGFpRmFkZVVwIDAuMzVzIGVhc2Utb3V0IGJvdGgnLFxyXG4gICAgICAgICdAa2V5ZnJhbWVzIHdwYWlGYWRlVXAnOiB7XHJcbiAgICAgICAgICBmcm9tOiB7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoOHB4KScgfSxcclxuICAgICAgICAgIHRvOiB7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH1cclxuICAgICAgICB9XHJcbiAgICAgIH19XHJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxyXG4gICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxyXG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XHJcbiAgICA+XHJcbiAgICAgIDxBdmF0YXJcclxuICAgICAgICBzeD17e1xyXG4gICAgICAgICAgd2lkdGg6IDMyLFxyXG4gICAgICAgICAgaGVpZ2h0OiAzMixcclxuICAgICAgICAgIGZvbnRTaXplOiAnMC43NXJlbScsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXHJcbiAgICAgICAgICBiZ2NvbG9yOiBwcmltYXJ5Q29sb3IsXHJcbiAgICAgICAgICBjb2xvcjogJyNmZmYnLFxyXG4gICAgICAgICAgYm94U2hhZG93OiAnMCAycHggOHB4IHJnYmEoMTUsMjMsNDIsMC4xMiknLFxyXG4gICAgICAgICAgYm9yZGVyOiAnMnB4IHNvbGlkICNmZmYnXHJcbiAgICAgICAgfX1cclxuICAgICAgPlxyXG4gICAgICAgIHthdmF0YXJMYWJlbH1cclxuICAgICAgPC9BdmF0YXI+XHJcbiAgICAgIDxQYXBlclxyXG4gICAgICAgIGVsZXZhdGlvbj17MH1cclxuICAgICAgICBzeD17e1xyXG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICAgICAgICBweDogMixcclxuICAgICAgICAgIHB5OiAxLjUsXHJcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxOHB4IDE4cHggMThweCA2cHgnLFxyXG4gICAgICAgICAgYmdjb2xvcjogJyNmMWY1ZjknLFxyXG4gICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMTUsMjMsNDIsMC4wNiknLFxyXG4gICAgICAgICAgYm94U2hhZG93OiAnMCA0cHggMTRweCByZ2JhKDE1LDIzLDQyLDAuMDYpJyxcclxuICAgICAgICAgICcmOjpiZWZvcmUnOiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgIGluc2V0OiAwLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjU1KSA1MCUsIHRyYW5zcGFyZW50IDEwMCUpYCxcclxuICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICcyMDAlIDEwMCUnLFxyXG4gICAgICAgICAgICBhbmltYXRpb246IGAke3NoaW1tZXJ9IDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGVgLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuOVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19XHJcbiAgICAgID5cclxuICAgICAgICA8Qm94IHN4PXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogMC43NSwgcG9zaXRpb246ICdyZWxhdGl2ZScsIHpJbmRleDogMSB9fT5cclxuICAgICAgICAgIHtbMCwgMSwgMl0ubWFwKGkgPT4gKFxyXG4gICAgICAgICAgICA8Qm94XHJcbiAgICAgICAgICAgICAga2V5PXtpfVxyXG4gICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogNyxcclxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXHJcbiAgICAgICAgICAgICAgICBiZ2NvbG9yOiBwcmltYXJ5Q29sb3IsXHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjg1LFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBgJHtib3VuY2V9IDFzIGVhc2UtaW4tb3V0IGluZmluaXRlYCxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkRlbGF5OiBgJHtpICogMC4xNn1zYFxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApKX1cclxuICAgICAgICA8L0JveD5cclxuICAgICAgPC9QYXBlcj5cclxuICAgIDwvQm94PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oQ2hhdGJvdFR5cGluZ0luZGljYXRvcik7XHJcblxyXG5cclxuXHJcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IEJveCwgQnV0dG9uLCBGYWRlIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCBLZXlib2FyZEFycm93RG93bkljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9LZXlib2FyZEFycm93RG93bic7XHJcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcclxuaW1wb3J0IENoYXRib3RNZXNzYWdlQnViYmxlIGZyb20gJy4vQ2hhdGJvdE1lc3NhZ2VCdWJibGUuanN4JztcclxuaW1wb3J0IENoYXRib3RUeXBpbmdJbmRpY2F0b3IgZnJvbSAnLi9DaGF0Ym90VHlwaW5nSW5kaWNhdG9yLmpzeCc7XHJcblxyXG5jb25zdCBNZXNzYWdlQ29udGFpbmVyID0gc3R5bGVkKEJveCkoKHsgdGhlbWUgfSkgPT4gKHtcclxuICBmbGV4OiAxLFxyXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMiwgMi4yNSksXHJcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcclxuICBiYWNrZ3JvdW5kOiAnbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmZmZiAwJSwgI2ZhZmJmYyAxMDAlKScsXHJcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgc2Nyb2xsQmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICcmOjotd2Via2l0LXNjcm9sbGJhcic6IHsgd2lkdGg6IDYgfSxcclxuICAnJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWInOiB7XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjY2JkNWUxJyxcclxuICAgIGJvcmRlclJhZGl1czogM1xyXG4gIH0sXHJcbiAgJyY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrJzoge1xyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2YxZjVmOSdcclxuICB9XHJcbn0pKTtcclxuXHJcbi8qKlxyXG4gKiBTY3JvbGxhYmxlIG1lc3NhZ2UgcmVnaW9uICsgbmV3LW1lc3NhZ2VzIGFmZm9yZGFuY2UgKHNtYXJ0IHNjcm9sbCBsaXZlcyBpbiBwYXJlbnQpLlxyXG4gKi9cclxuZnVuY3Rpb24gQ2hhdGJvdE1lc3NhZ2VMaXN0KHtcclxuICBjb250YWluZXJSZWYsXHJcbiAgYm90dG9tUmVmLFxyXG4gIG9uU2Nyb2xsLFxyXG4gIG1lc3NhZ2VzLFxyXG4gIHByaW1hcnlDb2xvcixcclxuICBzZWNvbmRhcnlDb2xvcixcclxuICBvblN0cmVhbUNvbXBsZXRlLFxyXG4gIG9uUmV0cnksXHJcbiAgY2hpbGRyZW5BYm92ZUVuZCxcclxuICBpc0xvYWRpbmcsXHJcbiAgbGl2ZUFnZW50VHlwaW5nLFxyXG4gIHNob3dOZXdNZXNzYWdlcyxcclxuICBvbkp1bXBUb0xhdGVzdFxyXG59KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxNZXNzYWdlQ29udGFpbmVyXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBvblNjcm9sbD17b25TY3JvbGx9XHJcbiAgICAgIGNsYXNzTmFtZT1cIndwYWlfbWVzc2FnZUNvbnRhaW5lclwiXHJcbiAgICAgIHJvbGU9XCJsb2dcIlxyXG4gICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxyXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWRkaXRpb25zXCJcclxuICAgICAgYXJpYS1sYWJlbD1cIkNoYXQgbWVzc2FnZXNcIlxyXG4gICAgPlxyXG4gICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4gKFxyXG4gICAgICAgIDxDaGF0Ym90TWVzc2FnZUJ1YmJsZVxyXG4gICAgICAgICAga2V5PXttZXNzYWdlLmlkIHx8IGAke21lc3NhZ2UudGltZXN0YW1wfS0ke2luZGV4fWB9XHJcbiAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxyXG4gICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XHJcbiAgICAgICAgICBzZWNvbmRhcnlDb2xvcj17c2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgICAgICBvblN0cmVhbUNvbXBsZXRlPXtvblN0cmVhbUNvbXBsZXRlfVxyXG4gICAgICAgICAgb25SZXRyeT17b25SZXRyeX1cclxuICAgICAgICAvPlxyXG4gICAgICApKX1cclxuICAgICAge2NoaWxkcmVuQWJvdmVFbmR9XHJcbiAgICAgIHtpc0xvYWRpbmcgPyA8Q2hhdGJvdFR5cGluZ0luZGljYXRvciBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn0gLz4gOiBudWxsfVxyXG4gICAgICB7bGl2ZUFnZW50VHlwaW5nID8gKFxyXG4gICAgICAgIDxDaGF0Ym90VHlwaW5nSW5kaWNhdG9yXHJcbiAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cclxuICAgICAgICAgIGFyaWFMYWJlbD1cIkFnZW50IGlzIHR5cGluZ1wiXHJcbiAgICAgICAgICBhdmF0YXJMYWJlbD1cIkFcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICkgOiBudWxsfVxyXG4gICAgICA8ZGl2IHJlZj17Ym90dG9tUmVmfSAvPlxyXG5cclxuICAgICAgPEZhZGUgaW49e3Nob3dOZXdNZXNzYWdlc30+XHJcbiAgICAgICAgPEJveFxyXG4gICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxyXG4gICAgICAgICAgICBib3R0b206IDEyLFxyXG4gICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICByaWdodDogMCxcclxuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcclxuICAgICAgICAgICAgekluZGV4OiAyLFxyXG4gICAgICAgICAgICBtdDogLTZcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcclxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAgICAgb25DbGljaz17b25KdW1wVG9MYXRlc3R9XHJcbiAgICAgICAgICAgIHN0YXJ0SWNvbj17PEtleWJvYXJkQXJyb3dEb3duSWNvbiAvPn1cclxuICAgICAgICAgICAgc3g9e3tcclxuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJ25vbmUnLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDk5OSxcclxuICAgICAgICAgICAgICBweDogMixcclxuICAgICAgICAgICAgICBweTogMC43NSxcclxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDhweCAyNHB4IHJnYmEoMTUsMjMsNDIsMC4xOCknLFxyXG4gICAgICAgICAgICAgIGJnY29sb3I6IHByaW1hcnlDb2xvciB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkp1bXAgdG8gbGF0ZXN0IG1lc3NhZ2VzXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgTmV3IG1lc3NhZ2VzXHJcbiAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICA8L0JveD5cclxuICAgICAgPC9GYWRlPlxyXG4gICAgPC9NZXNzYWdlQ29udGFpbmVyPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oQ2hhdGJvdE1lc3NhZ2VMaXN0KTtcclxuXHJcblxyXG5cclxuIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcclxuXHJcbmNvbnN0IEJPVFRPTV9USFJFU0hPTERfUFggPSA4MDtcclxuXHJcbi8qKlxyXG4gKiBBdXRvLXNjcm9sbCB3aGVuIHVzZXIgaXMgbmVhciBib3R0b207IFwiTmV3IG1lc3NhZ2VzXCIgY2hpcCB3aGVuIHNjcm9sbGVkIHVwLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2hhdFNjcm9sbChjaGF0SGlzdG9yeSwgaXNMb2FkaW5nKSB7XHJcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gIGNvbnN0IGJvdHRvbVJlZiA9IHVzZVJlZihudWxsKTtcclxuICBjb25zdCBzdGlja1RvQm90dG9tUmVmID0gdXNlUmVmKHRydWUpO1xyXG4gIGNvbnN0IHByZXZDb3VudFJlZiA9IHVzZVJlZigwKTtcclxuICBjb25zdCBbc2hvd05ld01lc3NhZ2VzLCBzZXRTaG93TmV3TWVzc2FnZXNdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG5cclxuICBjb25zdCBvblNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIGNvbnN0IGVsID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XHJcbiAgICBpZiAoIWVsKSByZXR1cm47XHJcbiAgICBjb25zdCBkaXN0ID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuc2Nyb2xsVG9wIC0gZWwuY2xpZW50SGVpZ2h0O1xyXG4gICAgc3RpY2tUb0JvdHRvbVJlZi5jdXJyZW50ID0gZGlzdCA8IEJPVFRPTV9USFJFU0hPTERfUFg7XHJcbiAgICBpZiAoc3RpY2tUb0JvdHRvbVJlZi5jdXJyZW50KSB7XHJcbiAgICAgIHNldFNob3dOZXdNZXNzYWdlcyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfSwgW10pO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgZ3JldyA9IGNoYXRIaXN0b3J5Lmxlbmd0aCA+IHByZXZDb3VudFJlZi5jdXJyZW50O1xyXG4gICAgcHJldkNvdW50UmVmLmN1cnJlbnQgPSBjaGF0SGlzdG9yeS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGdyZXcgJiYgIXN0aWNrVG9Cb3R0b21SZWYuY3VycmVudCkge1xyXG4gICAgICBzZXRTaG93TmV3TWVzc2FnZXModHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN0aWNrVG9Cb3R0b21SZWYuY3VycmVudCkge1xyXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIGJvdHRvbVJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXHJcbiAgICAgICAgICBibG9jazogJ2VuZCdcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSwgW2NoYXRIaXN0b3J5LCBpc0xvYWRpbmddKTtcclxuXHJcbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICBzdGlja1RvQm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgc2V0U2hvd05ld01lc3NhZ2VzKGZhbHNlKTtcclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgIGJvdHRvbVJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgICAgIGJsb2NrOiAnZW5kJ1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGNvbnRhaW5lclJlZixcclxuICAgIGJvdHRvbVJlZixcclxuICAgIG9uU2Nyb2xsLFxyXG4gICAgc2hvd05ld01lc3NhZ2VzLFxyXG4gICAgc2Nyb2xsVG9Cb3R0b21cclxuICB9O1xyXG59XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBQYXBlciwgSWNvbkJ1dHRvbiwgVGV4dEZpZWxkLCBCb3gsIFR5cG9ncmFwaHksIEF2YXRhciwgQmFkZ2UsIEJ1dHRvbiwgQ2lyY3VsYXJQcm9ncmVzcywgVG9vbHRpcCwgSW5wdXRBZG9ybm1lbnQsIENoaXAsIFN0YWNrIH0gZnJvbSAnQG11aS9tYXRlcmlhbCc7XHJcbmltcG9ydCB7IHN0eWxlZCwgdXNlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XHJcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcclxuaW1wb3J0IFNlbmRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvU2VuZCc7XHJcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DbG9zZSc7XHJcbmltcG9ydCBTbWFydFRveUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9TbWFydFRveSc7XHJcbmltcG9ydCBDaGF0QnViYmxlT3V0bGluZUljb24gZnJvbSAnQG11aS9pY29ucy1tYXRlcmlhbC9DaGF0QnViYmxlT3V0bGluZSc7XHJcbmltcG9ydCBBdHRhY2hGaWxlSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0F0dGFjaEZpbGUnO1xyXG5pbXBvcnQgUGVyc29uSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1BlcnNvbic7XHJcbmltcG9ydCBSZWNvcmRWb2ljZU92ZXJJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvUmVjb3JkVm9pY2VPdmVyJztcclxuaW1wb3J0IEVtYWlsSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0VtYWlsJztcclxuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xyXG5pbXBvcnQgeyBHZXRDaGF0Ym90RGF0YSB9IGZyb20gJ0AvcmVkdXgvU2xpY2VzL0NoYXRib3RTbGljZSc7XHJcbmltcG9ydCB7IEFQSV9VUkwsIEVuY3J5cHRQYXlsb2FkLCBEZWNyeXB0UGF5bG9hZCwgZ2V0U2Vzc2lvbklELCBnZXRSZWFsdGltZVdzQmFzZVVybCB9IGZyb20gJ0AvdXRpbHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBUb2tlbkhhbmRsZSB9IGZyb20gJ0AvdXRpbHMvQXV0aFRva2VuJztcclxuaW1wb3J0IHsgZ2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jIH0gZnJvbSAnQC91dGlscy91c2VyQ2xpZW50U3RvcmFnZS5qcyc7XHJcblxyXG4vKiogUHVibGljIHBhZ2VzOiB1c2VyIG1ldGEgY2FjaGUgaXMgZW1wdHk7IHVzZSBzZXJ2ZXItbG9jYWxpemVkIGZsYWcgKHNhbWUgc291cmNlIGFzIGNoYXRib3QuanN4IGdhdGUpLiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlQ2hhdGJvdFdpZGdldFZpc2libGUoKSB7XHJcbiAgY29uc3QgZnJvbUNhY2hlID0gZ2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jKCd3cGFpX2NoYXRib3RfdmlzaWJsZScpO1xyXG4gIGlmIChmcm9tQ2FjaGUgPT09ICd0cnVlJykge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGlmIChmcm9tQ2FjaGUgPT09ICdmYWxzZScpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncy5jaGF0Ym90VmlzaWJsZSAhPSBudWxsKSB7XHJcbiAgICBjb25zdCBzID0gU3RyaW5nKHdpbmRvdy53cGFpUGx1Z2luU2V0dGluZ3MuY2hhdGJvdFZpc2libGUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gcyA9PT0gJ3RydWUnIHx8IHMgPT09ICcxJztcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmltcG9ydCBDaGF0Ym90TWVzc2FnZUxpc3QgZnJvbSAnLi9DaGF0Ym90TWVzc2FnZUxpc3QuanN4JztcclxuaW1wb3J0IENoYXRib3RNZXNzYWdlQnViYmxlIGZyb20gJy4vQ2hhdGJvdE1lc3NhZ2VCdWJibGUuanN4JztcclxuaW1wb3J0IHsgdXNlU21hcnRDaGF0U2Nyb2xsIH0gZnJvbSAnLi91c2VTbWFydENoYXRTY3JvbGwuanMnO1xyXG5cclxuLy8gRGVmaW5lIGFuaW1hdGlvbnNcclxuY29uc3QgZmFkZUluID0ga2V5ZnJhbWVzYFxyXG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpOyB9XHJcbiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XHJcbmA7XHJcbmNvbnN0IHNsaWRlVXAgPSBrZXlmcmFtZXNgXHJcbiAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsgb3BhY2l0eTogMDsgfVxyXG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyBvcGFjaXR5OiAxOyB9XHJcbmA7XHJcbmNvbnN0IHB1bHNlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxyXG4gIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxyXG4gIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgfVxyXG4gIDEwMCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEpOyB9XHJcbmA7XHJcbmNvbnN0IHJpcHBsZSA9IGtleWZyYW1lc2BcclxuICAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC44KTtcclxuICAgIG9wYWNpdHk6IDE7XHJcbiAgfVxyXG4gIDEwMCUge1xyXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgyLjQpO1xyXG4gICAgb3BhY2l0eTogMDtcclxuICB9XHJcbmA7XHJcbmNvbnN0IENoYXRXaW5kb3cgPSBzdHlsZWQoUGFwZXIpKCh7IHRoZW1lIH0pID0+ICh7XHJcbiAgcG9zaXRpb246ICdmaXhlZCcsXHJcbiAgYm90dG9tOiAyNCxcclxuICByaWdodDogMjQsXHJcbiAgd2lkdGg6ICdtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAzMnB4KSknLFxyXG4gIGhlaWdodDogJ21pbig2NDBweCwgY2FsYygxMDB2aCAtIDEyMHB4KSknLFxyXG4gIG1heFdpZHRoOiAnY2FsYygxMDB2dyAtIDE2cHgpJyxcclxuICBtYXhIZWlnaHQ6ICdjYWxjKDEwMHZoIC0gMTIwcHgpJyxcclxuICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXHJcbiAgekluZGV4OiAxMDAwLFxyXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICBib3hTaGFkb3c6ICcwIDVweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xNiknLFxyXG4gIGJvcmRlclJhZGl1czogJzE2cHgnLFxyXG4gIGFuaW1hdGlvbjogYCR7ZmFkZUlufSAwLjRzIGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1KWAsXHJcbiAgYmFja2dyb3VuZDogJyNmZmYnLFxyXG4gIGNsYXNzTmFtZTogJ3dwYWlfY2hhdFdpbmRvdycsXHJcbiAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCknLFxyXG4gIFt0aGVtZS5icmVha3BvaW50cy5kb3duKCdzbScpXToge1xyXG4gICAgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gMTZweCknLFxyXG4gICAgaGVpZ2h0OiAnbWluKDUyMHB4LCBjYWxjKDEwMHZoIC0gOTZweCkpJyxcclxuICAgIHJpZ2h0OiA4LFxyXG4gICAgbGVmdDogOCxcclxuICAgIGJvdHRvbTogOCxcclxuICAgIGJvcmRlclJhZGl1czogJzEycHgnXHJcbiAgfVxyXG59KSk7XHJcblxyXG5jb25zdCBDaGF0SGVhZGVyID0gc3R5bGVkKEJveCkoKHsgdGhlbWUsIHRleHRjb2xvciwgYmdjb2xvciB9KSA9PiAoe1xyXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMS41LCAyKSxcclxuICBiYWNrZ3JvdW5kOiBiZ2NvbG9yIHx8IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gIGNvbG9yOiB0ZXh0Y29sb3IgfHwgJyNmZmYnLFxyXG4gIGRpc3BsYXk6ICdmbGV4JyxcclxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxyXG4gIGZsZXhXcmFwOiAnd3JhcCcsXHJcbiAgZ2FwOiB0aGVtZS5zcGFjaW5nKDEpLFxyXG4gIGJvcmRlclRvcExlZnRSYWRpdXM6ICcxNnB4JyxcclxuICBib3JkZXJUb3BSaWdodFJhZGl1czogJzE2cHgnLFxyXG4gIG1pbkhlaWdodDogJzU2cHgnLFxyXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gIHpJbmRleDogMixcclxuICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcclxuICBjbGFzc05hbWU6ICd3cGFpX2NoYXRIZWFkZXInLFxyXG4gICcmIC5NdWlUeXBvZ3JhcGh5LXN1YnRpdGxlMSc6IHtcclxuICAgIGZvbnRTaXplOiAnMC45MzhyZW0nLFxyXG4gICAgZm9udFdlaWdodDogNTAwLFxyXG4gICAgbGV0dGVyU3BhY2luZzogJzAuMTVweCcsXHJcbiAgICBjb2xvcjogdGV4dGNvbG9yIHx8ICcjZmZmJ1xyXG4gIH0sXHJcbiAgJyYgLk11aVR5cG9ncmFwaHktY2FwdGlvbic6IHtcclxuICAgIGZvbnRTaXplOiAnMC43NXJlbScsXHJcbiAgICBjb2xvcjogdGV4dGNvbG9yID8gYCR7dGV4dGNvbG9yfTk5YCA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxyXG4gICAgbGV0dGVyU3BhY2luZzogJzAuNHB4JyxcclxuICAgIGxpbmVIZWlnaHQ6IDEuMlxyXG4gIH0sXHJcbiAgJyYgLk11aUF2YXRhci1yb290Jzoge1xyXG4gICAgd2lkdGg6IDM2LFxyXG4gICAgaGVpZ2h0OiAzNixcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICAgICcmIHN2Zyc6IHtcclxuICAgICAgd2lkdGg6IDIwLFxyXG4gICAgICBoZWlnaHQ6IDIwLFxyXG4gICAgICBjb2xvcjogdGV4dGNvbG9yIHx8ICcjZmZmJ1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgJyYgLk11aUljb25CdXR0b24tcm9vdCc6IHtcclxuICAgIHBhZGRpbmc6ICc2cHgnLFxyXG4gICAgbWFyZ2luTGVmdDogJzhweCcsXHJcbiAgICAnJjpob3Zlcic6IHtcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpJ1xyXG4gICAgfSxcclxuICAgICcmIHN2Zyc6IHtcclxuICAgICAgZm9udFNpemU6ICcyMHB4J1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24oJ3NtJyldOiB7XHJcbiAgICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDEuMjUsIDEuNSksXHJcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnMTJweCcsXHJcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzEycHgnXHJcbiAgfVxyXG59KSk7XHJcblxyXG5jb25zdCBDaGF0SW5wdXQgPSBzdHlsZWQoQm94KSgoeyB0aGVtZSB9KSA9PiAoe1xyXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMi41LCAzKSxcclxuICBiYWNrZ3JvdW5kOiAnI2ZmZicsXHJcbiAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCknLFxyXG4gIGNsYXNzTmFtZTogJ3dwYWlfY2hhdElucHV0JyxcclxuICBbdGhlbWUuYnJlYWtwb2ludHMuZG93bignc20nKV06IHtcclxuICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMS41LCAxLjUpLFxyXG4gICAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSknXHJcbiAgfVxyXG59KSk7XHJcblxyXG4vLyBVcGRhdGUgdGhlIElucHV0RmllbGQgc3R5bGluZ1xyXG5jb25zdCBJbnB1dEZpZWxkID0gc3R5bGVkKFRleHRGaWVsZCkoKHsgdGhlbWUsIHByaW1hcnlDb2xvciB9KSA9PiAoe1xyXG4gIGNsYXNzTmFtZTogJ3dwYWlfaW5wdXRGaWVsZCcsXHJcbiAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdCc6IHtcclxuICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZmFmYicsXHJcbiAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA4KScsXHJcbiAgICB0cmFuc2l0aW9uOiAnYWxsIDAuMnMgZWFzZScsXHJcbiAgICAnJjpob3Zlcic6IHtcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2YzZjRmNicsXHJcbiAgICAgIGJvcmRlckNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjEyKSdcclxuICAgIH0sXHJcbiAgICAnJiBmaWVsZHNldCc6IHtcclxuICAgICAgYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCdcclxuICAgIH0sXHJcbiAgICAnJjpob3ZlciBmaWVsZHNldCc6IHtcclxuICAgICAgYm9yZGVyOiAnbm9uZSdcclxuICAgIH0sXHJcbiAgICAnJi5NdWktZm9jdXNlZCc6IHtcclxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXHJcbiAgICAgIGJvcmRlckNvbG9yOiBwcmltYXJ5Q29sb3IgfHwgdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sXHJcbiAgICAgIGJveFNoYWRvdzogJzAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDUpJyxcclxuICAgICAgJyYgZmllbGRzZXQnOiB7XHJcbiAgICAgICAgYm9yZGVyOiAnbm9uZSdcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICcmIC5NdWlJbnB1dEFkb3JubWVudC1yb290Jzoge1xyXG4gICAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZygxKSxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIG1heEhlaWdodDogJ25vbmUnXHJcbiAgICB9XHJcbiAgfSxcclxuICAnJiAuTXVpSW5wdXRCYXNlLWlucHV0Jzoge1xyXG4gICAgcGFkZGluZzogJzE0cHggMTZweCcsXHJcbiAgICBmb250U2l6ZTogJzAuOTM3NXJlbScsXHJcbiAgICBsaW5lSGVpZ2h0OiAxLjYsXHJcbiAgICAnJjo6cGxhY2Vob2xkZXInOiB7XHJcbiAgICAgIGNvbG9yOiAnIzljYTNhZicsXHJcbiAgICAgIG9wYWNpdHk6IDFcclxuICAgIH1cclxuICB9XHJcbn0pKTtcclxuXHJcbmNvbnN0IENoYXRUb2dnbGUgPSBzdHlsZWQoSWNvbkJ1dHRvbikoKHsgdGhlbWUsIGJnY29sb3IgfSkgPT4gKHtcclxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcclxuICBib3R0b206IDI4LFxyXG4gIHJpZ2h0OiAyOCxcclxuICB3aWR0aDogNTYsXHJcbiAgaGVpZ2h0OiA1NixcclxuICBiYWNrZ3JvdW5kOiBiZ2NvbG9yIHx8IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gIGNvbG9yOiAnI2ZmZicsXHJcbiAgYm94U2hhZG93OiAnMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMTUpJyxcclxuICBib3JkZXJSYWRpdXM6ICc1MCUnLFxyXG4gICcmOmhvdmVyJzoge1xyXG4gICAgYmFja2dyb3VuZDogYmdjb2xvciB8fCB0aGVtZS5wYWxldHRlLnByaW1hcnkuZGFyayxcclxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTJweCknXHJcbiAgfSxcclxuICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZScsXHJcbiAgYW5pbWF0aW9uOiBgJHtwdWxzZUFuaW1hdGlvbn0gMnMgaW5maW5pdGVgLFxyXG4gIHpJbmRleDogOTk5LFxyXG4gIGNsYXNzTmFtZTogJ3dwYWlfY2hhdFRvZ2dsZScsXHJcbiAgJyYgc3ZnJzoge1xyXG4gICAgd2lkdGg6IDI0LFxyXG4gICAgaGVpZ2h0OiAyNFxyXG4gIH0sXHJcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24oJ3NtJyldOiB7XHJcbiAgICBib3R0b206IDE2LFxyXG4gICAgcmlnaHQ6IDE2LFxyXG4gICAgd2lkdGg6IDUyLFxyXG4gICAgaGVpZ2h0OiA1MlxyXG4gIH1cclxufSkpO1xyXG5cclxuY29uc3QgRm9ybVJlc3BvbnNlID0gc3R5bGVkKEJveCkoKHsgdGhlbWUgfSkgPT4gKHtcclxuICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXHJcbiAgZ2FwOiB0aGVtZS5zcGFjaW5nKDIpLFxyXG4gIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgYW5pbWF0aW9uOiBgJHtzbGlkZVVwfSAwLjNzIGVhc2Utb3V0YCxcclxuICBtYXJnaW5MZWZ0OiB0aGVtZS5zcGFjaW5nKDUpLFxyXG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygyKSxcclxuICBjbGFzc05hbWU6ICd3cGFpX2Zvcm1SZXNwb25zZScsXHJcbiAgW3RoZW1lLmJyZWFrcG9pbnRzLmRvd24oJ3NtJyldOiB7XHJcbiAgICBtYXJnaW5MZWZ0OiAwLFxyXG4gICAgbWFyZ2luUmlnaHQ6IDAsXHJcbiAgICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDEsIDApLFxyXG4gICAgd2lkdGg6ICcxMDAlJ1xyXG4gIH1cclxufSkpO1xyXG5cclxuY29uc3QgRm9ybUZpZWxkID0gc3R5bGVkKFRleHRGaWVsZCkoKHsgdGhlbWUgfSkgPT4gKHtcclxuICAnJiAuTXVpT3V0bGluZWRJbnB1dC1yb290Jzoge1xyXG4gICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcclxuICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBlYXNlJyxcclxuICAgICcmOmhvdmVyJzoge1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmYWZiJyxcclxuICAgICAgYm9yZGVyQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJ1xyXG4gICAgfSxcclxuICAgICcmIGZpZWxkc2V0Jzoge1xyXG4gICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50J1xyXG4gICAgfSxcclxuICAgICcmLk11aS1mb2N1c2VkJzoge1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcclxuICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLFxyXG4gICAgICBib3hTaGFkb3c6ICcwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA1KScsXHJcbiAgICAgICcmIGZpZWxkc2V0Jzoge1xyXG4gICAgICAgIGJvcmRlcjogJ25vbmUnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG4gICcmIC5NdWlJbnB1dEJhc2UtaW5wdXQnOiB7XHJcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcclxuICAgIGZvbnRTaXplOiAnMC45Mzc1cmVtJyxcclxuICAgICcmOjpwbGFjZWhvbGRlcic6IHtcclxuICAgICAgY29sb3I6ICcjOWNhM2FmJyxcclxuICAgICAgb3BhY2l0eTogMVxyXG4gICAgfVxyXG4gIH1cclxufSkpO1xyXG5cclxuY29uc3QgTUFYX1JFVFJJRVMgPSAyO1xyXG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMzAwMDA7IC8vIDMwIHNlY29uZHNcclxuXHJcbmNvbnN0IGdldEJvdEljb24gPSAoYm90SWNvbiwgY3VzdG9tQm90SWNvbikgPT4ge1xyXG4gIGlmIChib3RJY29uID09PSAnY3VzdG9tJyAmJiBjdXN0b21Cb3RJY29uKSB7XHJcbiAgICByZXR1cm4gPGltZyBzcmM9e2N1c3RvbUJvdEljb259IGFsdD1cIkN1c3RvbSBCb3QgSWNvblwiIHN0eWxlPXt7XHJcbiAgICAgIHdpZHRoOiAnNDBweCcsXHJcbiAgICAgIGhlaWdodDogJzQwcHgnXHJcbiAgICB9fSAvPjtcclxuICB9XHJcbiAgc3dpdGNoIChib3RJY29uKSB7XHJcbiAgICBjYXNlICdyb2JvdCc6XHJcbiAgICAgIHJldHVybiA8U21hcnRUb3lJY29uIC8+O1xyXG4gICAgY2FzZSAnYXNzaXN0YW50JzpcclxuICAgICAgcmV0dXJuIDxQZXJzb25JY29uIC8+O1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIDxTbWFydFRveUljb24gLz47XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgQ2hhdGJvdCA9ICgpID0+IHtcclxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUoJycpO1xyXG4gIGNvbnN0IFtjaGF0SGlzdG9yeSwgc2V0Q2hhdEhpc3RvcnldID0gdXNlU3RhdGUoW10pO1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3Qge1xyXG4gICAgY29udGFpbmVyUmVmLFxyXG4gICAgYm90dG9tUmVmLFxyXG4gICAgb25TY3JvbGwsXHJcbiAgICBzaG93TmV3TWVzc2FnZXMsXHJcbiAgICBzY3JvbGxUb0JvdHRvbVxyXG4gIH0gPSB1c2VTbWFydENoYXRTY3JvbGwoY2hhdEhpc3RvcnksIGlzTG9hZGluZyk7XHJcbiAgY29uc3QgaGFuZGxlU3RyZWFtQ29tcGxldGUgPSB1c2VDYWxsYmFjayhtc2dJZCA9PiB7XHJcbiAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IHByZXYubWFwKG0gPT4gKG0uaWQgPT09IG1zZ0lkID8geyAuLi5tLCBpc1N0cmVhbWluZzogZmFsc2UgfSA6IG0pKSk7XHJcbiAgfSwgW10pO1xyXG4gIGNvbnN0IFt1c2VySWRdID0gdXNlU3RhdGUoYHVzZXJfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YCk7XHJcbiAgY29uc3QgW3Nob3dVc2VyRm9ybSwgc2V0U2hvd1VzZXJGb3JtXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbdXNlckZvcm1EYXRhLCBzZXRVc2VyRm9ybURhdGFdID0gdXNlU3RhdGUoe1xyXG4gICAgbmFtZTogJycsXHJcbiAgICBlbWFpbDogJycsXHJcbiAgICBwaG9uZTogJydcclxuICB9KTtcclxuICBjb25zdCBbZm9ybVN0ZXAsIHNldEZvcm1TdGVwXSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IFtyZXNwb25zZUNvdW50LCBzZXRSZXNwb25zZUNvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gIGNvbnN0IFtsZWFkQ2FwdHVyZU9mZmVyZWQsIHNldExlYWRDYXB0dXJlT2ZmZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2xlYWRDYXB0dXJlRGVjbGluZWQsIHNldExlYWRDYXB0dXJlRGVjbGluZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtjb250YWN0Rm9ybUVycm9yLCBzZXRDb250YWN0Rm9ybUVycm9yXSA9IHVzZVN0YXRlKCcnKTtcclxuICBjb25zdCBbc2hvd1F1aWNrUmVwbGllcywgc2V0U2hvd1F1aWNrUmVwbGllc10gPSB1c2VTdGF0ZSh0cnVlKTtcclxuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XHJcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xyXG4gIGNvbnN0IFtjaGF0Ym90VXNlclNldHRpbmcsIFNldENoYXRib3RVc2VyU2V0dGluZ10gPSB1c2VTdGF0ZSh7fSk7XHJcblxyXG4gIC8vIExpdmUgY2hhdCB3aXRoIGFkbWluIChyZWFsdGltZSkg4oCTIHJlcXVpcmVzIGVtYWlsIHRvIHN0YXJ0OyB1c2VzIFdlYlNvY2tldCBBUElcclxuICBjb25zdCBbc2hvd0xpdmVDaGF0RW1haWxGb3JtLCBzZXRTaG93TGl2ZUNoYXRFbWFpbEZvcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtsaXZlQ2hhdEVtYWlsLCBzZXRMaXZlQ2hhdEVtYWlsXSA9IHVzZVN0YXRlKCcnKTtcclxuICBjb25zdCBbbGl2ZUNoYXRFbWFpbEVycm9yLCBzZXRMaXZlQ2hhdEVtYWlsRXJyb3JdID0gdXNlU3RhdGUoJycpO1xyXG4gIGNvbnN0IFtsaXZlQ2hhdFJlcXVlc3RlZCwgc2V0TGl2ZUNoYXRSZXF1ZXN0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtsaXZlQ2hhdFJlcXVlc3RJZCwgc2V0TGl2ZUNoYXRSZXF1ZXN0SWRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgY29uc3QgW2xpdmVDaGF0QWNjZXB0ZWQsIHNldExpdmVDaGF0QWNjZXB0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtsaXZlQ2hhdENvbm5lY3RpbmcsIHNldExpdmVDaGF0Q29ubmVjdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW2xpdmVBZ2VudFR5cGluZywgc2V0TGl2ZUFnZW50VHlwaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCB3c0xpdmVDaGF0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gIGNvbnN0IGxpdmVDaGF0QWNjZXB0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xyXG4gIGNvbnN0IGN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gIGNvbnN0IGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYgPSB1c2VSZWYoZmFsc2UpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgbGl2ZUNoYXRBY2NlcHRlZFJlZi5jdXJyZW50ID0gbGl2ZUNoYXRBY2NlcHRlZDtcclxuICB9LCBbbGl2ZUNoYXRBY2NlcHRlZF0pO1xyXG5cclxuICBjb25zdCBjbGVhckN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyID0gKCkgPT4ge1xyXG4gICAgaWYgKGN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KGN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmLmN1cnJlbnQpO1xyXG4gICAgICBjdXN0b21lclR5cGluZ0lkbGVUaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBzZW5kQ3VzdG9tZXJUeXBpbmcgPSB0eXBpbmcgPT4ge1xyXG4gICAgaWYgKCFsaXZlQ2hhdEFjY2VwdGVkUmVmLmN1cnJlbnQpIHJldHVybjtcclxuICAgIGNvbnN0IHdzID0gd3NMaXZlQ2hhdFJlZi5jdXJyZW50O1xyXG4gICAgaWYgKCF3cyB8fCB3cy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuO1xyXG4gICAgdHJ5IHtcclxuICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd0eXBpbmcnLCB0eXBpbmcgfSkpO1xyXG4gICAgfSBjYXRjaCAoXykge31cclxuICB9O1xyXG5cclxuICBjb25zdCBmbHVzaEN1c3RvbWVyVHlwaW5nU3RvcHBlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIGNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIoKTtcclxuICAgIGlmIChjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICAgIHNlbmRDdXN0b21lclR5cGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBoYW5kbGVDaGF0SW5wdXRDaGFuZ2UgPSB1c2VDYWxsYmFjayhlID0+IHtcclxuICAgIGNvbnN0IHYgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgIHNldElucHV0KHYpO1xyXG4gICAgaWYgKCFsaXZlQ2hhdFJlcXVlc3RlZCB8fCAhbGl2ZUNoYXRBY2NlcHRlZFJlZi5jdXJyZW50KSByZXR1cm47XHJcbiAgICBjb25zdCB3cyA9IHdzTGl2ZUNoYXRSZWYuY3VycmVudDtcclxuICAgIGlmICghd3MgfHwgd3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHJldHVybjtcclxuICAgIGlmICghY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgIGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgIHNlbmRDdXN0b21lclR5cGluZyh0cnVlKTtcclxuICAgIH1cclxuICAgIGNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIoKTtcclxuICAgIGN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY3VzdG9tZXJUeXBpbmdJZGxlVGltZXJSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgIGlmIChjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICBjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICBzZW5kQ3VzdG9tZXJUeXBpbmcoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxNzAwKTtcclxuICB9LCBbbGl2ZUNoYXRSZXF1ZXN0ZWRdKTtcclxuXHJcbiAgLy8gQXV0aCBzZXNzaW9uIGNvbWVzIGZyb20gc2VydmVyLWJhY2tlZCBzdG9yYWdlIChUb2tlbkhhbmRsZSAvIHVzZXIgbWV0YSlcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgO1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBkYXRhVG9rZW5SZXNwb25zZSA9IGF3YWl0IFRva2VuSGFuZGxlLmdldFRva2VuKCk7XHJcbiAgICAgICAgY29uc3QgZGF0YVRva2VuID0gZGF0YVRva2VuUmVzcG9uc2UudG9rZW4/LmF1dGhfdG9rZW47XHJcbiAgICAgICAgaWYgKCFkYXRhVG9rZW4pIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSBEZWNyeXB0UGF5bG9hZChkYXRhVG9rZW4pO1xyXG4gICAgICAgIGlmIChkZWNvZGVkRGF0YT8uZGF0YT8uYXV0aG9yaXphdGlvbj8udG9rZW4gJiYgZGVjb2RlZERhdGE/LmRhdGE/LnVzZXIpIHtcclxuICAgICAgICAgIFNldENoYXRib3RVc2VyU2V0dGluZyh7XHJcbiAgICAgICAgICAgIHVzZXI6IGRlY29kZWREYXRhPy5kYXRhPy51c2VyLFxyXG4gICAgICAgICAgICB0b2tlbjogZGVjb2RlZERhdGE/LmRhdGE/LmF1dGhvcml6YXRpb24/LnRva2VuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge31cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcbiAgICB9KSgpO1xyXG4gIH0sIFtdKTtcclxuICBjb25zdCB7XHJcbiAgICBDaGF0Ym90RGF0YSxcclxuICAgIGlzX2NoYXRib3RfbG9hZFxyXG4gIH0gPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5jaGF0Ym90KTtcclxuICBjb25zdCBbY2hhdGJvdFN0eWxlcywgc2V0Q2hhdGJvdFN0eWxlc10gPSB1c2VTdGF0ZSh7XHJcbiAgICBwcmltYXJ5Q29sb3I6ICcnLFxyXG4gICAgc2Vjb25kYXJ5Q29sb3I6ICcnLFxyXG4gICAgYm90SWNvbjogJ3JvYm90JyxcclxuICAgIHdlbGNvbWVNZXNzYWdlOiAnSGVsbG8hIEhvdyBjYW4gSSBoZWxwIHlvdSB0b2RheT8/PycsXHJcbiAgICBwbGFjZWhvbGRlclRleHQ6ICdUeXBlIGEgbWVzc2FnZS4uLicsXHJcbiAgICBoZWFkZXJUZXh0OiAnQUkgQXNzaXN0YW50J1xyXG4gIH0pO1xyXG4gIGNvbnN0IFtpc1Zpc2libGUsIHNldElzVmlzaWJsZV0gPSB1c2VTdGF0ZSgoKSA9PiByZXNvbHZlQ2hhdGJvdFdpZGdldFZpc2libGUoKSk7XHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGNoZWNrVmlzaWJpbGl0eSA9ICgpID0+IHtcclxuICAgICAgc2V0SXNWaXNpYmxlKHJlc29sdmVDaGF0Ym90V2lkZ2V0VmlzaWJsZSgpKTtcclxuICAgIH07XHJcbiAgICBjaGVja1Zpc2liaWxpdHkoKTtcclxuICAgIGNvbnN0IG9uQ3VzdG9tID0gKCkgPT4gY2hlY2tWaXNpYmlsaXR5KCk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGNoZWNrVmlzaWJpbGl0eSk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3cGFpX2NoYXRib3RfdmlzaWJpbGl0eV9jaGFuZ2VkJywgb25DdXN0b20pO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBjaGVja1Zpc2liaWxpdHkpO1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3cGFpX2NoYXRib3RfdmlzaWJpbGl0eV9jaGFuZ2VkJywgb25DdXN0b20pO1xyXG4gICAgfTtcclxuICB9LCBbXSk7XHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGRpc3BhdGNoKEdldENoYXRib3REYXRhKCkpO1xyXG4gIH0sIFtkaXNwYXRjaF0pO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKHJlc3BvbnNlQ291bnQgPj0gMyAmJiAhbGVhZENhcHR1cmVPZmZlcmVkICYmICFsZWFkQ2FwdHVyZURlY2xpbmVkICYmICFzaG93VXNlckZvcm0gJiYgIXVzZXJGb3JtRGF0YS5lbWFpbCkge1xyXG4gICAgICBzZXRMZWFkQ2FwdHVyZU9mZmVyZWQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfSwgW3Jlc3BvbnNlQ291bnQsIGxlYWRDYXB0dXJlT2ZmZXJlZCwgbGVhZENhcHR1cmVEZWNsaW5lZCwgc2hvd1VzZXJGb3JtLCB1c2VyRm9ybURhdGEuZW1haWxdKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChjaGF0SGlzdG9yeS5sZW5ndGggPT09IDAgJiYgY2hhdGJvdFN0eWxlcy53ZWxjb21lTWVzc2FnZSkge1xyXG4gICAgICBzZXRDaGF0SGlzdG9yeShbe1xyXG4gICAgICAgIGlkOiAnd2VsY29tZScsXHJcbiAgICAgICAgdGV4dDogY2hhdGJvdFN0eWxlcy53ZWxjb21lTWVzc2FnZSxcclxuICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH1dKTtcclxuICAgIH1cclxuICB9LCBbY2hhdGJvdFN0eWxlcywgQ2hhdGJvdERhdGEsIGlzX2NoYXRib3RfbG9hZF0pO1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoIWlzX2NoYXRib3RfbG9hZCAmJiBDaGF0Ym90RGF0YSkge1xyXG4gICAgICBjb25zdCB3ZWxjb21lTXNnID0gQ2hhdGJvdERhdGEuaW5pdF9tc2cgfHwgJ0hlbGxvISBIb3cgY2FuIEkgaGVscCB5b3UgdG9kYXk/JztcclxuICAgICAgc2V0Q2hhdGJvdFN0eWxlcyh7XHJcbiAgICAgICAgcHJpbWFyeUNvbG9yOiBDaGF0Ym90RGF0YS5ib3RfYmdfY29sb3IsXHJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I6IENoYXRib3REYXRhLmJvdF90ZXh0X2NvbG9yLFxyXG4gICAgICAgIGJvdEljb246IENoYXRib3REYXRhLmJvdF9pY29uIHx8ICdyb2JvdCcsXHJcbiAgICAgICAgd2VsY29tZU1lc3NhZ2U6IENoYXRib3REYXRhLmluaXRfbXNnIHx8ICdIZWxsbyEgSG93IGNhbiBJIGhlbHAgeW91IHRvZGF5Pz8nLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyVGV4dDogQ2hhdGJvdERhdGEucGxhY2Vob2xkZXJfdGV4dCB8fCAnVHlwZSBhIG1lc3NhZ2UuLi4nLFxyXG4gICAgICAgIGhlYWRlclRleHQ6IENoYXRib3REYXRhLmJvdF9uYW1lIHx8ICdBSSBBc3Npc3RhbnQnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIFtpc19jaGF0Ym90X2xvYWQsIENoYXRib3REYXRhXSk7XHJcbiAgY29uc3QgaGFuZGxlU3RhcnRMaXZlQ2hhdENsaWNrID0gKCkgPT4ge1xyXG4gICAgc2V0U2hvd0xpdmVDaGF0RW1haWxGb3JtKHRydWUpO1xyXG4gICAgc2V0TGl2ZUNoYXRFbWFpbEVycm9yKCcnKTtcclxuICB9O1xyXG4gIGNvbnN0IGNvbm5lY3RMaXZlQ2hhdFdzID0gKGNvbXBhbnlOYW1lLCBjdXN0b21lcklkLCBlbWFpbElkKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhcImNvbXBhbnkgYW5tZVwiICwgY29tcGFueU5hbWUpO1xyXG4gICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgIGNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIoKTtcclxuICAgIGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgY29uc3QgYmFzZSA9IGdldFJlYWx0aW1lV3NCYXNlVXJsKCkucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuICAgIGNvbnN0IHdzVXJsID0gYCR7YmFzZX0vd3MvY3VzdG9tZXI/Y29tcGFueV9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBhbnlOYW1lKX0mY3VzdG9tZXJfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQoY3VzdG9tZXJJZCl9JmVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsSWQpfWA7XHJcbiAgICBzZXRMaXZlQ2hhdENvbm5lY3RpbmcodHJ1ZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB3cyA9IG5ldyBXZWJTb2NrZXQod3NVcmwpO1xyXG4gICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQgPSB3cztcclxuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICB0eXBlOiAncmVxdWVzdF9jaGF0J1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgfTtcclxuICAgICAgd3Mub25tZXNzYWdlID0gZXZlbnQgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBtc2cgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgc3dpdGNoIChtc2cudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZXF1ZXN0X3NlbnQnOlxyXG4gICAgICAgICAgICAgIHNldExpdmVDaGF0UmVxdWVzdElkKG1zZy5yZXF1ZXN0X2lkIHx8IG51bGwpO1xyXG4gICAgICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWAsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiAnV2FpdGluZyBmb3IgYW4gYWdlbnQgdG8gam9pbuKApicsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY2hhdF9hY2NlcHRlZCc6XHJcbiAgICAgICAgICAgICAgc2V0TGl2ZUNoYXRBY2NlcHRlZCh0cnVlKTtcclxuICAgICAgICAgICAgICBzZXRMaXZlQWdlbnRUeXBpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDcpfWAsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFuIGFnZW50IGhhcyBqb2luZWQuIFlvdSBjYW4gY2hhdCBub3cuXCIsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbWVzc2FnZSc6XHJcbiAgICAgICAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgICAgICAgICAgICBpZDogYGxjLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA3KX1gLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogbXNnLmJvZHkgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndHlwaW5nJzpcclxuICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1zZywgJ2Zyb21fc3RhZmYnKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKCEhbXNnLnR5cGluZyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtZXNzYWdlX3NlbnQnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgICAgICAgaWYgKG1zZy5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGBFcnJvcjogJHttc2cuYm9keX1gLFxyXG4gICAgICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgfV0pO1xyXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxyXG4gICAgICB9O1xyXG4gICAgICB3cy5vbmNsb3NlID0gZXZlbnQgPT4ge1xyXG4gICAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgICBjbGVhckN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyKCk7XHJcbiAgICAgICAgY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZi5jdXJyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09IDQwMDAgfHwgZXZlbnQuY29kZSA9PT0gNDAwMSkge1xyXG4gICAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgICAgICBpZDogYGxjLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA3KX1gLFxyXG4gICAgICAgICAgICB0ZXh0OiBldmVudC5jb2RlID09PSA0MDAxID8gJ1RoaXMgY29tcGFueSBpcyBub3QgYXZhaWxhYmxlIGZvciBjaGF0LicgOiAnTGl2ZSBjaGF0IGlzIG5vdCBjb25maWd1cmVkLicsXHJcbiAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgICBzZXRMaXZlQ2hhdENvbm5lY3RpbmcoZmFsc2UpO1xyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHNldExpdmVDaGF0Q29ubmVjdGluZyhmYWxzZSk7XHJcbiAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgICB0ZXh0OiAnQ291bGQgbm90IGNvbm5lY3QgdG8gbGl2ZSBjaGF0LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXHJcbiAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9XSk7XHJcbiAgICAgIHNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBjb25zdCBoYW5kbGVTdGFydExpdmVDaGF0ID0gZSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBlbWFpbCA9IGxpdmVDaGF0RW1haWwudHJpbSgpO1xyXG4gICAgY29uc3QgZW1haWxSZWdleCA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xyXG4gICAgaWYgKCFlbWFpbCkge1xyXG4gICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJ1BsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZW1haWxSZWdleC50ZXN0KGVtYWlsKSkge1xyXG4gICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNldExpdmVDaGF0RW1haWxFcnJvcignJyk7XHJcbiAgICBzZXRMaXZlQ2hhdFJlcXVlc3RlZCh0cnVlKTtcclxuICAgIHNldFNob3dMaXZlQ2hhdEVtYWlsRm9ybShmYWxzZSk7XHJcbiAgICBzZXRMaXZlQ2hhdEVtYWlsKCcnKTtcclxuICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHtcclxuICAgICAgaWQ6IGBsYy0ke0RhdGUubm93KCl9LXVgLFxyXG4gICAgICB0ZXh0OiBgSSd2ZSByZXF1ZXN0ZWQgdG8gdGFsayBsaXZlIHdpdGggdGhlIHRlYW0uICgke2VtYWlsfSlgLFxyXG4gICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgIHN0YXR1czogJ2RlbGl2ZXJlZCcsXHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICB9XSk7XHJcbiAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB7XHJcbiAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS1zeXNgLFxyXG4gICAgICB0ZXh0OiBcIkNvbm5lY3RpbmcgeW91IHRvIGxpdmUgY2hhdOKAplwiLFxyXG4gICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgfV0pO1xyXG4gICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgIGNvbnN0IGNvbXBhbnlOYW1lID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LndwYWlQbHVnaW5TZXR0aW5ncz8ucmVhbHRpbWVDb21wYW55TmFtZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgfHwgJ2V4YW1wbGUuY29tJztcclxuICAgIGNvbnN0IGN1c3RvbWVySWQgPSB1c2VySWQ7XHJcbiAgICBjb25zdCBlbWFpbElkID0gJ21kLm1vYWpAa2xpem9zLmNvbSc7XHJcbiAgICBjb25uZWN0TGl2ZUNoYXRXcyhjb21wYW55TmFtZSwgY3VzdG9tZXJJZCwgZW1haWxJZCk7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRpc3BhdGNoRXZlbnQpIHtcclxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd3cGFpX2xpdmVfY2hhdF9yZXF1ZXN0ZWQnLCB7XHJcbiAgICAgICAgZGV0YWlsOiB7XHJcbiAgICAgICAgICBlbWFpbCxcclxuICAgICAgICAgIGN1c3RvbWVySWRcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9O1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBjbGVhckN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyKCk7XHJcbiAgICAgIGlmIChjdXN0b21lclR5cGluZ1NlbnRUcnVlUmVmLmN1cnJlbnQgJiYgd3NMaXZlQ2hhdFJlZi5jdXJyZW50Py5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICd0eXBpbmcnLCB0eXBpbmc6IGZhbHNlIH0pKTtcclxuICAgICAgICB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIGN1c3RvbWVyVHlwaW5nU2VudFRydWVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICBpZiAod3NMaXZlQ2hhdFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHdzTGl2ZUNoYXRSZWYuY3VycmVudC5jbG9zZSgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgd3NMaXZlQ2hhdFJlZi5jdXJyZW50ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9LCBbXSk7XHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGUsIHJldHJ5Q291bnQgPSAwLCBmb3JjZWRUZXh0ID0gbnVsbCwgcmV0cnlVc2VySWQgPSBudWxsKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gKGZvcmNlZFRleHQgIT0gbnVsbCA/IGZvcmNlZFRleHQgOiBpbnB1dCkudHJpbSgpO1xyXG4gICAgaWYgKCF0ZXh0VG9TZW5kKSByZXR1cm47XHJcblxyXG4gICAgLy8gTGl2ZSBjaGF0OiBzZW5kIHZpYSBXZWJTb2NrZXQgd2hlbiBhZ2VudCBoYXMgYWNjZXB0ZWRcclxuICAgIGlmIChsaXZlQ2hhdFJlcXVlc3RlZCAmJiBsaXZlQ2hhdEFjY2VwdGVkICYmIHdzTGl2ZUNoYXRSZWYuY3VycmVudD8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgZmx1c2hDdXN0b21lclR5cGluZ1N0b3BwZWQoKTtcclxuICAgICAgc2V0TGl2ZUFnZW50VHlwaW5nKGZhbHNlKTtcclxuICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgIGlkOiBgbGMtJHtEYXRlLm5vdygpfS11bWAsXHJcbiAgICAgICAgdGV4dDogdGV4dFRvU2VuZCxcclxuICAgICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgICAgc3RhdHVzOiAnZGVsaXZlcmVkJyxcclxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB9XSk7XHJcbiAgICAgIHNldElucHV0KCcnKTtcclxuICAgICAgc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB3c0xpdmVDaGF0UmVmLmN1cnJlbnQuc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICB0eXBlOiAnbWVzc2FnZScsXHJcbiAgICAgICAgICBib2R5OiB0ZXh0VG9TZW5kXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHt9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdXNlck1zZ0lkID0gcmV0cnlVc2VySWQ7XHJcbiAgICBpZiAoIXVzZXJNc2dJZCkge1xyXG4gICAgICB1c2VyTXNnSWQgPSBgdS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOSl9YDtcclxuICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgIGlkOiB1c2VyTXNnSWQsXHJcbiAgICAgICAgdGV4dDogdGV4dFRvU2VuZCxcclxuICAgICAgICBpc1VzZXI6IHRydWUsXHJcbiAgICAgICAgc3RhdHVzOiAnc2VuZGluZycsXHJcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgfV0pO1xyXG4gICAgICBzZXRJbnB1dCgnJyk7XHJcbiAgICAgIHNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1c2VyTWVzc2FnZSA9IHtcclxuICAgICAgdGV4dDogdGV4dFRvU2VuZCxcclxuICAgICAgaXNVc2VyOiB0cnVlLFxyXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgfTtcclxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcclxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgVElNRU9VVF9EVVJBVElPTik7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBub25jZSA9IHdpbmRvdz8ud3BBcGlTZXR0aW5ncz8ubm9uY2U7XHJcbiAgICAgIGlmICghbm9uY2UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGVycm9yLiBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBhbmQgdHJ5IGFnYWluLicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDcmVhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIHBheWxvYWRcclxuICAgICAgY29uc3QgYXV0aFBheWxvYWQgPSB7XHJcbiAgICAgICAgc2Vzc2lvbl9pZDogZ2V0U2Vzc2lvbklEKCksXHJcbiAgICAgICAgand0X3Rva2VuOiBjaGF0Ym90VXNlclNldHRpbmc/LnRva2VuIHx8IG51bGwsXHJcbiAgICAgICAgbGljZW5zZV9rZXk6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8ubGljZW5zZV9rZXkgfHwgJzc1MjgyQkJFMkQ1MjZEMEQnLFxyXG4gICAgICAgIGRvbWFpbk5hbWU6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8uZG9tYWluX25hbWUgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIHx8ICdleGFtcGxlLmNvbSdcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdCBkYXRhXHJcbiAgICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLnRleHQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uX2lkOiBudWxsLFxyXG4gICAgICAgIGNvbnRleHQ6ICcnXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBFbmNyeXB0IGJvdGggcGF5bG9hZHNcclxuICAgICAgY29uc3QgZW5jcnlwdGVkQXV0aERhdGEgPSBFbmNyeXB0UGF5bG9hZChhdXRoUGF5bG9hZCk7XHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFJlcXVlc3REYXRhID0gRW5jcnlwdFBheWxvYWQocmVxdWVzdERhdGEpO1xyXG4gICAgICAvLyBNYWtlIHRoZSBBUEkgcmVxdWVzdFxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0FQSV9VUkx9Y2hhdGJvdC9jaGF0YCwge1xyXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAnWC1XUC1Ob25jZSc6IG5vbmNlLFxyXG4gICAgICAgICAgLy8gJ1gtRW5jcnlwdGVkLVBheWxvYWQnOiBlbmNyeXB0ZWRBdXRoRGF0YSxcclxuICAgICAgICAgICdYLUVuY3J5cHRlZC1QYXlsb2FkJzogXCJleUpxZDNSZmRHOXJaVzRpT2lKbGVVb3daVmhCYVU5cFNrdFdNVkZwVEVOS2FHSkhZMmxQYVVwSlZYcEpNVTVwU2prdVpYbEtjR016VFdsUGFVcHZaRWhTZDA5cE9IWk5WRWt6VEdwQmRVMUROSGhQYW1kM1RVUkJkbGxZUW5CTU0xbDRURE5XZWxwWVNYUmlSemx1WVZjMGFVeERTbkJaV0ZGcFQycEZNMDU2VlRCUFJGRTBUWHBaYzBsdFZqUmpRMGsyVFZSak0wNXFZelJOUkdkNlRtbDNhV0p0U20xSmFtOTRUbnBqTVU1RVp6QlBSRTB5VEVOS2NXUkhhMmxQYVVwdlUyNVNUV05JYjNoVU1rNXhUVWRHZEdGclRqSkphWGRwWXpOV2FVbHFiMmxPYW1kNFQwZEZkMDVVWjNkTmJVVXhUWHBuTTA1WFVUUk5SRkV5VFZSWmVVbHBkMmxqU0VveVNXcHZhVTFxVG1sYVJGWnFUMFJyTUU5WFdUSk5SRUpvV2tkSmVrOVhWVE5OUkVacVRrUkJkMDlFWTNsYVIwa3pXVlJWTlU1NldtMU9lVW81TG5weVpVMXZNR1ZwTWtGaE5GWjNjVlZSYmkweWRrTlFVMjFJWTFoWExYZFpSVFZaZFc1TVkwNXNOM01pTENKc2FXTmxibk5sWDJ0bGVTSTZJamRGTkRNM01qRTFPVU16TkRaQ1JFVWlMQ0prYjIxaGFXNU9ZVzFsSWpvaVoyOXZaMnhsTG1OdmJTSjlcIixcclxuICAgICAgICAgICdkb21haW5fbmFtZSc6IGNoYXRib3RVc2VyU2V0dGluZz8udXNlcj8uZG9tYWluX25hbWUgfHwgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIHx8ICdleGFtcGxlLmNvbSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgIHF1ZXJ5OiB1c2VyTWVzc2FnZS50ZXh0LFxyXG4gICAgICAgICAgZW5jcnlwdGVkX2RhdGE6IGVuY3J5cHRlZFJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgc2Vzc2lvbl9pZDogZ2V0U2Vzc2lvbklEKClcclxuICAgICAgICB9KSxcclxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcclxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VydmVyIHJlc3BvbmRlZCB3aXRoIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJhd1Jlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xyXG4gICAgICBsZXQgZGF0YTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBQYXJzZSB0aGUgcmVzcG9uc2UgYXMgSlNPTiBmaXJzdFxyXG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShyYXdSZXNwb25zZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocGFyc2VkUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgdmFsaWRhdGlvbiBlcnJvcnNcclxuICAgICAgICBpZiAoIXBhcnNlZFJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZS5lcnJvcnMgJiYgcGFyc2VkUmVzcG9uc2UuZXJyb3JzLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBBcnJheS5pc0FycmF5KHBhcnNlZFJlc3BvbnNlLmVycm9ycy5tZXNzYWdlKSA/IHBhcnNlZFJlc3BvbnNlLmVycm9ycy5tZXNzYWdlWzBdIDogcGFyc2VkUmVzcG9uc2UuZXJyb3JzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VkUmVzcG9uc2UubWVzc2FnZSB8fCAnUmVxdWVzdCBmYWlsZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyeSB0byBkZWNyeXB0IHRoZSByZXNwb25zZSBpZiBuZWVkZWRcclxuICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UuZGF0YSAmJiB0eXBlb2YgcGFyc2VkUmVzcG9uc2UuZGF0YSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZERhdGEgPSBwYXJzZWRSZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICBkYXRhID0gZGVjcnlwdGVkRGF0YTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJkYXRhXCIsIGRhdGEpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZGVjcnlwdEVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIElmIGRlY3J5cHRpb24gZmFpbHMsIHRyeSB0byB1c2UgdGhlIHBhcnNlZCByZXNwb25zZSBkaXJlY3RseVxyXG4gICAgICAgICAgICBkYXRhID0gcGFyc2VkUmVzcG9uc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGEgPSBwYXJzZWRSZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHZhbGlkIHJlc3BvbnNlIGFmdGVyIGRlY3J5cHRpb25cclxuICAgICAgICBpZiAoIWRhdGEucmVzcG9uc2UgJiYgIWRhdGEubWF0Y2hlcyAmJiAhcGFyc2VkUmVzcG9uc2UucmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNwb25zZSBmb3JtYXQgZnJvbSBzZXJ2ZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGJvdFJlc3BvbnNlVGV4dCA9ICcnO1xyXG5cclxuICAgICAgICAvLyBUcnkgdG8gZ2V0IHJlc3BvbnNlIGZyb20gZGVjcnlwdGVkIGRhdGEgZmlyc3RcclxuICAgICAgICBpZiAoZGF0YS5yZXNwb25zZSkge1xyXG4gICAgICAgICAgYm90UmVzcG9uc2VUZXh0ID0gZGF0YS5yZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGhlbiB0cnkgdG8gZ2V0IGZyb20gbWF0Y2hlcyBpZiBhdmFpbGFibGVcclxuICAgICAgICBlbHNlIGlmIChkYXRhLm1hdGNoZXMgJiYgZGF0YS5tYXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGJvdFJlc3BvbnNlVGV4dCA9IFwiSGVyZSdzIHdoYXQgSSBmb3VuZDpcXG5cXG5cIjtcclxuICAgICAgICAgIGRhdGEubWF0Y2hlcy5mb3JFYWNoKG1hdGNoID0+IHtcclxuICAgICAgICAgICAgYm90UmVzcG9uc2VUZXh0ICs9IGBSZWxldmFuY2U6ICR7bWF0Y2gucmVsZXZhbmNlfVxcbiR7bWF0Y2gudGV4dH1cXG5cXG5gO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIG5vdCBpbiBkZWNyeXB0ZWQgZGF0YSwgY2hlY2sgdGhlIG9yaWdpbmFsIHBhcnNlZCByZXNwb25zZVxyXG4gICAgICAgIGVsc2UgaWYgKHBhcnNlZFJlc3BvbnNlLnJlc3BvbnNlKSB7XHJcbiAgICAgICAgICBib3RSZXNwb25zZVRleHQgPSBwYXJzZWRSZXNwb25zZS5yZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRGVmYXVsdCBmYWxsYmFjayBtZXNzYWdlXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBib3RSZXNwb25zZVRleHQgPSBcIkkgY291bGRuJ3QgZmluZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0LiBXb3VsZCB5b3UgbGlrZSB0byB0cnkgcmVwaHJhc2luZyB5b3VyIHF1ZXN0aW9uP1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBib3RJZCA9IGBiLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA5KX1gO1xyXG4gICAgICAgIGNvbnN0IGRlcml2ZWRTb3VyY2VzID0gKGRhdGEubWF0Y2hlcyB8fCBwYXJzZWRSZXNwb25zZS5tYXRjaGVzIHx8IFtdKS5tYXAobSA9PiAoe1xyXG4gICAgICAgICAgc291cmNlOiB0eXBlb2YgbS50ZXh0ID09PSAnc3RyaW5nJyA/IG0udGV4dC5zbGljZSgwLCAxMjApIDogJ1JlZmVyZW5jZScsXHJcbiAgICAgICAgICByZWxldmFuY2U6IG0ucmVsZXZhbmNlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IGJvdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICBpZDogYm90SWQsXHJcbiAgICAgICAgICB0ZXh0OiBib3RSZXNwb25zZVRleHQsXHJcbiAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTdHJlYW1pbmc6IHRydWUsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICAgIG1hdGNoZXM6IGRhdGEubWF0Y2hlcyB8fCBwYXJzZWRSZXNwb25zZS5tYXRjaGVzLFxyXG4gICAgICAgICAgY29udGVudDogZGF0YS5jb250ZW50IHx8IHBhcnNlZFJlc3BvbnNlLmNvbnRlbnQsXHJcbiAgICAgICAgICBjb252ZXJzYXRpb25faWQ6IGRhdGEuY29udmVyc2F0aW9uX2lkIHx8IHBhcnNlZFJlc3BvbnNlLmNvbnZlcnNhdGlvbl9pZCxcclxuICAgICAgICAgIHNvdXJjZXM6IGRhdGEuc291cmNlcyB8fCBwYXJzZWRSZXNwb25zZS5zb3VyY2VzIHx8IChkZXJpdmVkU291cmNlcy5sZW5ndGggPyBkZXJpdmVkU291cmNlcyA6IHVuZGVmaW5lZClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gcHJldi5tYXAobSA9PiBtLmlkID09PSB1c2VyTXNnSWQgPyB7IC4uLm0sIHN0YXR1czogJ2RlbGl2ZXJlZCcgfSA6IG0pKTtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCBib3RNZXNzYWdlXSk7XHJcbiAgICAgICAgc2V0UmVzcG9uc2VDb3VudChwcmV2ID0+IHByZXYgKyAxKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IHByZXYubWFwKG0gPT4gbS5pZCA9PT0gdXNlck1zZ0lkID8geyAuLi5tLCBzdGF0dXM6ICdlcnJvcicgfSA6IG0pKTtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICBpZDogYGItZXJyLSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCBcIkknbSBzb3JyeSwgSSBjb3VsZG4ndCBwcm9jZXNzIHlvdXIgcmVxdWVzdC5cIixcclxuICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gcHJldi5tYXAobSA9PiBtLmlkID09PSB1c2VyTXNnSWQgPyB7IC4uLm0sIHN0YXR1czogJ2Vycm9yJyB9IDogbSkpO1xyXG4gICAgICAvLyBIYW5kbGUgYWJvcnRlZCByZXF1ZXN0c1xyXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XHJcbiAgICAgICAgY29uc3QgdGltZW91dE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICBpZDogYGItZXJyLSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgdGV4dDogXCJUaGUgcmVxdWVzdCB0b29rIHRvbyBsb25nIHRvIGNvbXBsZXRlLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxyXG4gICAgICAgICAgaXNVc2VyOiBmYWxzZSxcclxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZXRDaGF0SGlzdG9yeShwcmV2ID0+IFsuLi5wcmV2LCB0aW1lb3V0TWVzc2FnZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHtcclxuICAgICAgICAgIGlkOiBgYi1lcnItJHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlIHx8IFwiSSBjb3VsZG4ndCBmaW5kIHJlbGV2YW50IGluZm9ybWF0aW9uLiBQbGVhc2UgdHJ5IHJlcGhyYXNpbmcgeW91ciBxdWVzdGlvbi5cIixcclxuICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZXhjZWVkZWQgbWF4IHJldHJpZXMgYW5kIGl0J3MgYSBuZXR3b3JrIGVycm9yLCByZXRyeVxyXG4gICAgICBpZiAocmV0cnlDb3VudCA8IE1BWF9SRVRSSUVTICYmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCduZXR3b3JrJykgfHwgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnZmFpbGVkIHRvIGZldGNoJykpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZXRyeU1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIGlkOiBgYi1zeXMtJHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgIHRleHQ6IFwiUmVjb25uZWN0aW5nLi4uIFBsZWFzZSB3YWl0LlwiLFxyXG4gICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gWy4uLnByZXYsIHJldHJ5TWVzc2FnZV0pO1xyXG4gICAgICAgICAgaGFuZGxlU3VibWl0KGUsIHJldHJ5Q291bnQgKyAxLCB0ZXh0VG9TZW5kLCB1c2VyTXNnSWQpO1xyXG4gICAgICAgIH0sIDIwMDAgKiAocmV0cnlDb3VudCArIDEpKTsgLy8gRXhwb25lbnRpYWwgYmFja29mZlxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVJldHJ5ID0gbXNnID0+IHtcclxuICAgIHNldENoYXRIaXN0b3J5KHByZXYgPT4gcHJldi5tYXAobSA9PiBtLmlkID09PSBtc2cuaWQgPyB7IC4uLm0sIHN0YXR1czogJ3NlbmRpbmcnIH0gOiBtKSk7XHJcbiAgICBoYW5kbGVTdWJtaXQoeyBwcmV2ZW50RGVmYXVsdCgpIHt9IH0sIDAsIG1zZy50ZXh0LCBtc2cuaWQpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHF1aWNrUmVwbHlPcHRpb25zID0gW1xyXG4gICAgeyBsYWJlbDogJ1ByaWNpbmcnLCB0ZXh0OiAnQ2FuIHlvdSBleHBsYWluIHlvdXIgcHJpY2luZyBhbmQgcGxhbnM/JyB9LFxyXG4gICAgeyBsYWJlbDogJ0ZlYXR1cmVzJywgdGV4dDogJ1doYXQgZmVhdHVyZXMgZG9lcyB0aGUgY2hhdGJvdCBzdXBwb3J0PycgfSxcclxuICAgIHsgbGFiZWw6ICdTdXBwb3J0JywgdGV4dDogJ0kgbmVlZCBoZWxwIGZyb20gc3VwcG9ydC4nIH0sXHJcbiAgICB7IGxhYmVsOiAnRGVtbycsIHRleHQ6ICdDYW4gSSBib29rIGEgZGVtbyBvciB0YWxrIHRvIHNhbGVzPycgfVxyXG4gIF07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVF1aWNrUmVwbHkgPSBxciA9PiB7XHJcbiAgICBzZXRTaG93UXVpY2tSZXBsaWVzKGZhbHNlKTtcclxuICAgIGhhbmRsZVN1Ym1pdCh7IHByZXZlbnREZWZhdWx0KCkge30gfSwgMCwgcXIudGV4dCwgbnVsbCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgb3BlbkNvbnRhY3RGb3JtID0gKCkgPT4ge1xyXG4gICAgc2V0U2hvd1VzZXJGb3JtKHRydWUpO1xyXG4gICAgc2V0Rm9ybVN0ZXAoMCk7XHJcbiAgICBzZXRDb250YWN0Rm9ybUVycm9yKCcnKTtcclxuICAgIHNldExlYWRDYXB0dXJlT2ZmZXJlZCh0cnVlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjbG9zZUNvbnRhY3RGb3JtID0gKCkgPT4ge1xyXG4gICAgc2V0U2hvd1VzZXJGb3JtKGZhbHNlKTtcclxuICAgIHNldEZvcm1TdGVwKDApO1xyXG4gICAgc2V0Q29udGFjdEZvcm1FcnJvcignJyk7XHJcbiAgICBzZXRMZWFkQ2FwdHVyZURlY2xpbmVkKHRydWUpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNvbXBsZXRlQ29udGFjdENhcHR1cmUgPSBzdWNjZXNzTWVzc2FnZSA9PiB7XHJcbiAgICBzZXRTaG93VXNlckZvcm0oZmFsc2UpO1xyXG4gICAgc2V0Rm9ybVN0ZXAoMCk7XHJcbiAgICBzZXRDb250YWN0Rm9ybUVycm9yKCcnKTtcclxuICAgIHNldExlYWRDYXB0dXJlRGVjbGluZWQodHJ1ZSk7XHJcbiAgICBpZiAoc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgc2V0Q2hhdEhpc3RvcnkocHJldiA9PiBbLi4ucHJldiwge1xyXG4gICAgICAgIGlkOiBgYy0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcclxuICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIH1dKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDb250YWN0RmllbGRTdWJtaXQgPSBhc3luYyBmaWVsZFR5cGUgPT4ge1xyXG4gICAgc2V0Q29udGFjdEZvcm1FcnJvcignJyk7XHJcbiAgICBjb25zdCByYXdWYWx1ZSA9ICh1c2VyRm9ybURhdGFbZmllbGRUeXBlXSB8fCAnJykudHJpbSgpO1xyXG4gICAgaWYgKCFyYXdWYWx1ZSkge1xyXG4gICAgICBzZXRDb250YWN0Rm9ybUVycm9yKCdQbGVhc2UgZW50ZXIgYSB2YWx1ZSB0byBjb250aW51ZS4nKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlID0gcmF3VmFsdWU7XHJcbiAgICBpZiAoZmllbGRUeXBlID09PSAnZW1haWwnKSB7XHJcbiAgICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcclxuICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBzZXRDb250YWN0Rm9ybUVycm9yKCdUaGF0IGVtYWlsIGxvb2tzIG9mZi4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkVHlwZSA9PT0gJ25hbWUnKSB7XHJcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAyIHx8IC9cXGQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgc2V0Q29udGFjdEZvcm1FcnJvcignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBuYW1lIHdpdGhvdXQgbnVtYmVycy4nKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaWVsZFR5cGUgPT09ICdwaG9uZScpIHtcclxuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFxzKy9nLCAnJykucmVwbGFjZSgvWygpLV0vZywgJycpO1xyXG4gICAgICBjb25zdCBwaG9uZVJlZ2V4ID0gL15cXCs/W1xcZC1dezEwLH0kLztcclxuICAgICAgaWYgKCFwaG9uZVJlZ2V4LnRlc3Qobm9ybWFsaXplZFZhbHVlKSkge1xyXG4gICAgICAgIHNldENvbnRhY3RGb3JtRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgcGhvbmUgbnVtYmVyIHdpdGggYXQgbGVhc3QgMTAgZGlnaXRzLicpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgc3RvcmVGb3JtRGF0YShmaWVsZFR5cGUsIHZhbHVlKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICBzZXRDb250YWN0Rm9ybUVycm9yKCdDb3VsZCBub3Qgc2F2ZSB5b3VyIGRldGFpbHMgcmlnaHQgbm93LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VXNlckZvcm1EYXRhKHByZXYgPT4gKHtcclxuICAgICAgLi4ucHJldixcclxuICAgICAgW2ZpZWxkVHlwZV06IHZhbHVlXHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKGZpZWxkVHlwZSA9PT0gJ2VtYWlsJykge1xyXG4gICAgICBzZXRGb3JtU3RlcCgxKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGRUeXBlID09PSAnbmFtZScpIHtcclxuICAgICAgc2V0Rm9ybVN0ZXAoMik7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBsZXRlQ29udGFjdENhcHR1cmUoJ1RoYW5rcyEgV2XigJl2ZSBzYXZlZCB5b3VyIGNvbnRhY3QgZGV0YWlscyBzbyBvdXIgdGVhbSBjYW4gZm9sbG93IHVwIGlmIG5lZWRlZC4nKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUtleVByZXNzID0gZSA9PiB7XHJcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoaW5wdXQudHJpbSgpKSB7XHJcbiAgICAgICAgaGFuZGxlU3VibWl0KGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuICBjb25zdCBzdG9yZUZvcm1EYXRhID0gYXN5bmMgKGZpZWxkVHlwZSwgZmllbGRWYWx1ZSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgbm9uY2UgPSB3aW5kb3c/LndwQXBpU2V0dGluZ3M/Lm5vbmNlO1xyXG4gICAgICBpZiAoIW5vbmNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgdXNlcl9pZDogdXNlcklkLFxyXG4gICAgICAgIG5hbWU6IGZpZWxkVHlwZSA9PT0gJ25hbWUnID8gZmllbGRWYWx1ZSA6IHVzZXJGb3JtRGF0YS5uYW1lLFxyXG4gICAgICAgIGVtYWlsOiBmaWVsZFR5cGUgPT09ICdlbWFpbCcgPyBmaWVsZFZhbHVlIDogdXNlckZvcm1EYXRhLmVtYWlsLFxyXG4gICAgICAgIHBob25lOiBmaWVsZFR5cGUgPT09ICdwaG9uZScgPyBmaWVsZFZhbHVlIDogdXNlckZvcm1EYXRhLnBob25lLFxyXG4gICAgICAgIHNlc3Npb25faWQ6IGdldFNlc3Npb25JRCgpLFxyXG4gICAgICAgIGp3dF90b2tlbjogY2hhdGJvdFVzZXJTZXR0aW5nPy50b2tlbiB8fCBudWxsLFxyXG4gICAgICAgIGxpY2Vuc2Vfa2V5OiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmxpY2Vuc2Vfa2V5IHx8ICc3NTI4MkJCRTJENTI2RDBEJyxcclxuICAgICAgICBkb21haW5OYW1lOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBFbmNyeXB0IHRoZSBwYXlsb2FkXHJcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheWxvYWQgPSBFbmNyeXB0UGF5bG9hZChwYXlsb2FkKTtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtBUElfVVJMfWxlYWQvbGVhZHMtc3RvcmVgLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICdYLVdQLU5vbmNlJzogbm9uY2UsXHJcbiAgICAgICAgICAnWC1FbmNyeXB0ZWQtUGF5bG9hZCc6IGVuY3J5cHRlZFBheWxvYWQsXHJcbiAgICAgICAgICAnZG9tYWluX25hbWUnOiBjaGF0Ym90VXNlclNldHRpbmc/LnVzZXI/LmRvbWFpbl9uYW1lIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSB8fCAnZXhhbXBsZS5jb20nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBmaWVsZF90eXBlOiBmaWVsZFR5cGUsXHJcbiAgICAgICAgICBmaWVsZF92YWx1ZTogZmllbGRWYWx1ZSxcclxuICAgICAgICAgIGVuY3J5cHRlZF9kYXRhOiBlbmNyeXB0ZWRQYXlsb2FkXHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaWYgKCFpc1Zpc2libGUpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3cGFpX2NoYXRib3RXcmFwcGVyXCI+XHJcbiAgICAgICAgICAgIHshaXNPcGVuICYmIDxDaGF0VG9nZ2xlIG9uQ2xpY2s9eygpID0+IHNldElzT3Blbih0cnVlKX0gYmdjb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9IGNsYXNzTmFtZT1cIndwYWlfY2hhdFRvZ2dsZUJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0QnViYmxlT3V0bGluZUljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvQ2hhdFRvZ2dsZT59XHJcblxyXG4gICAgICAgICAgICB7aXNPcGVuICYmIDxDaGF0V2luZG93IGVsZXZhdGlvbj17MH0gYmdjb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9IGNsYXNzTmFtZT1cIndwYWlfY2hhdFdpbmRvd09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8Q2hhdEhlYWRlciB0ZXh0Y29sb3I9e2NoYXRib3RTdHlsZXMuc2Vjb25kYXJ5Q29sb3J9IGJnY29sb3I9e2NoYXRib3RTdHlsZXMucHJpbWFyeUNvbG9yfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBzeD17e1xyXG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICBnYXA6IDEuNVxyXG4gICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlIG92ZXJsYXA9XCJjaXJjdWxhclwiIGFuY2hvck9yaWdpbj17e1xyXG4gICAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXHJcbiAgICAgICAgICAgIGhvcml6b250YWw6ICdyaWdodCdcclxuICAgICAgICAgIH19IHZhcmlhbnQ9XCJkb3RcIiBzeD17e1xyXG4gICAgICAgICAgICAnJiAuTXVpQmFkZ2UtYmFkZ2UnOiB7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiA4LFxyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc0xvYWRpbmcgPyAnI2ZiYmYyNCcgOiAnIzIyYzU1ZScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMnB4IHNvbGlkJyxcclxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogY2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3IgfHwgdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sXHJcbiAgICAgICAgICAgICAgJyY6OmFmdGVyJzoge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogJ3JpcHBsZSAxLjJzIGluZmluaXRlIGVhc2UtaW4tb3V0JyxcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogJ1wiXCInXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXZhdGFyIHN4PXt7XHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKScsXHJcbiAgICAgICAgICAgICAgYmFja2Ryb3BGaWx0ZXI6ICdibHVyKDhweCknXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Qm90SWNvbihjaGF0Ym90U3R5bGVzLmJvdEljb24sIGNoYXRib3RTdHlsZXMuY3VzdG9tQm90SWNvbil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9BdmF0YXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JhZGdlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwic3VidGl0bGUxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjaGF0Ym90U3R5bGVzLmhlYWRlclRleHR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJjYXB0aW9uXCIgY29tcG9uZW50PVwiZGl2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnT25saW5lJ31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3tcclxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInXHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4oZmFsc2UpfSBzeD17e1xyXG4gICAgICAgICAgICBjb2xvcjogY2hhdGJvdFN0eWxlcy5zZWNvbmRhcnlDb2xvciB8fCAnI2ZmZicsXHJcbiAgICAgICAgICAgICcmOmhvdmVyJzoge1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L0NoYXRIZWFkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0Ym90TWVzc2FnZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYm90dG9tUmVmPXtib3R0b21SZWZ9XHJcbiAgICAgICAgICAgICAgICAgICAgICBvblNjcm9sbD17b25TY3JvbGx9XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcz17Y2hhdEhpc3Rvcnl9XHJcbiAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMucHJpbWFyeUNvbG9yfVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMuc2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgICAgICAgICBvblN0cmVhbUNvbXBsZXRlPXtoYW5kbGVTdHJlYW1Db21wbGV0ZX1cclxuICAgICAgICAgICAgICAgICAgICAgIG9uUmV0cnk9e2hhbmRsZVJldHJ5fVxyXG4gICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgICBsaXZlQWdlbnRUeXBpbmc9e2xpdmVDaGF0QWNjZXB0ZWQgJiYgbGl2ZUFnZW50VHlwaW5nfVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2hvd05ld01lc3NhZ2VzPXtzaG93TmV3TWVzc2FnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICBvbkp1bXBUb0xhdGVzdD17c2Nyb2xsVG9Cb3R0b219XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFib3ZlRW5kPXs8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IXNob3dVc2VyRm9ybSAmJiBzaG93UXVpY2tSZXBsaWVzICYmIHJlc3BvbnNlQ291bnQgPiAwICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybVJlc3BvbnNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cInN1YnRpdGxlMlwiIHN4PXt7IGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6ICcjMWUyOTNiJyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVpY2sgYWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgc3g9e3sgY29sb3I6ICcjNDc1NTY5JyB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFwIG9uZSB0byBhc2sgZmFzdGVyIG9yIHJlZmluZSB5b3VyIHJlcXVlc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2sgZGlyZWN0aW9uPVwicm93XCIgZmxleFdyYXA9XCJ3cmFwXCIgZ2FwPXsxfSBzeD17eyBtdDogMSB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3F1aWNrUmVwbHlPcHRpb25zLm1hcChyZXBseSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cmVwbHkubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17cmVwbHkubGFiZWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja2FibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVF1aWNrUmVwbHkocmVwbHkpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzk5OXB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjY2JkNWUxJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzM0MTU1JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyY6aG92ZXInOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvcjogJyNlMmU4ZjAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybVJlc3BvbnNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvd1VzZXJGb3JtID8gPEZvcm1SZXNwb25zZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVN0ZXAgPT09IDAgJiYgPD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0Ym90TWVzc2FnZUJ1YmJsZVxyXG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sb3I9e2NoYXRib3RTdHlsZXMuc2Vjb25kYXJ5Q29sb3J9XHJcbiAgICAgICAgICAgICAgbWVzc2FnZT17e1xyXG4gICAgICAgICAgICAgIHRleHQ6IFwiV2FudCBhIHF1aWNrIGZvbGxvdy11cD8gRW50ZXIgeW91ciBlbWFpbCBhbmQgSeKAmWxsIG1ha2Ugc3VyZSBvdXIgdGVhbSBjYW4gcmVhY2ggb3V0IGlmIG5lZWRlZC5cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkIGZ1bGxXaWR0aCB0eXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cInlvdXJAZW1haWwuY29tXCIgdmFsdWU9e3VzZXJGb3JtRGF0YS5lbWFpbH0gZXJyb3I9eyEhY29udGFjdEZvcm1FcnJvcn0gaGVscGVyVGV4dD17Y29udGFjdEZvcm1FcnJvcn0gb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgIHNldENvbnRhY3RGb3JtRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgIHNldFVzZXJGb3JtRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAuLi51c2VyRm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgICBlbWFpbDogZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX0gb25LZXlEb3duPXtlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVDb250YWN0RmllbGRTdWJtaXQoJ2VtYWlsJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3tcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgZ2FwOiAxLFxyXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxyXG4gICAgICAgICAgICAgIG10OiAxXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXtjbG9zZUNvbnRhY3RGb3JtfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5YmUgbGF0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJjb250YWluZWRcIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb250YWN0RmllbGRTdWJtaXQoJ2VtYWlsJyl9IHN4PXt7XHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCdcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgZW1haWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz59XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtU3RlcCA9PT0gMSAmJiA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoYXRib3RNZXNzYWdlQnViYmxlXHJcbiAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvcn1cclxuICAgICAgICAgICAgICBzZWNvbmRhcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5zZWNvbmRhcnlDb2xvcn1cclxuICAgICAgICAgICAgICBtZXNzYWdlPXt7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJUaGFua3MhIFdoYXQgbmFtZSBzaG91bGQgd2UgdXNlIHdoZW4gd2UgZm9sbG93IHVwP1wiLFxyXG4gICAgICAgICAgICAgIGlzVXNlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtRmllbGQgZnVsbFdpZHRoIHBsYWNlaG9sZGVyPVwiWW91ciBuYW1lXCIgdmFsdWU9e3VzZXJGb3JtRGF0YS5uYW1lfSBlcnJvcj17ISFjb250YWN0Rm9ybUVycm9yfSBoZWxwZXJUZXh0PXtjb250YWN0Rm9ybUVycm9yfSBvbkNoYW5nZT17ZSA9PiB7XHJcbiAgICAgICAgICAgICAgc2V0Q29udGFjdEZvcm1FcnJvcignJyk7XHJcbiAgICAgICAgICAgICAgc2V0VXNlckZvcm1EYXRhKHtcclxuICAgICAgICAgICAgICAgIC4uLnVzZXJGb3JtRGF0YSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGUudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH19IG9uS2V5RG93bj17ZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlQ29udGFjdEZpZWxkU3VibWl0KCduYW1lJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3tcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgZ2FwOiAxLFxyXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxyXG4gICAgICAgICAgICAgIG10OiAxXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXtjbG9zZUNvbnRhY3RGb3JtfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNvbnRhY3RGaWVsZFN1Ym1pdCgnbmFtZScpfSBzeD17e1xyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEwcHgnXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz59XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb3JtU3RlcCA9PT0gMiAmJiA8PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoYXRib3RNZXNzYWdlQnViYmxlXHJcbiAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtjaGF0Ym90U3R5bGVzLnByaW1hcnlDb2xvcn1cclxuICAgICAgICAgICAgICBzZWNvbmRhcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5zZWNvbmRhcnlDb2xvcn1cclxuICAgICAgICAgICAgICBtZXNzYWdlPXt7XHJcbiAgICAgICAgICAgICAgdGV4dDogXCJPcHRpb25hbDogaWYgeW91J2QgbGlrZSBhIGNhbGxiYWNrLCBlbnRlciB5b3VyIHBob25lIG51bWJlci5cIixcclxuICAgICAgICAgICAgICBpc1VzZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkIGZ1bGxXaWR0aCBwbGFjZWhvbGRlcj1cIllvdXIgcGhvbmUgbnVtYmVyXCIgdmFsdWU9e3VzZXJGb3JtRGF0YS5waG9uZX0gZXJyb3I9eyEhY29udGFjdEZvcm1FcnJvcn0gaGVscGVyVGV4dD17Y29udGFjdEZvcm1FcnJvcn0gb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgIHNldENvbnRhY3RGb3JtRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgIHNldFVzZXJGb3JtRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAuLi51c2VyRm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgICBwaG9uZTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfX0gb25LZXlEb3duPXtlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVDb250YWN0RmllbGRTdWJtaXQoJ3Bob25lJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSBhdXRvRm9jdXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3tcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgZ2FwOiAxLFxyXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxyXG4gICAgICAgICAgICAgIG10OiAxXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXtjbG9zZUNvbnRhY3RGb3JtfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNvbnRhY3RGaWVsZFN1Ym1pdCgncGhvbmUnKX0gc3g9e3tcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMHB4J1xyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZSBwaG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybVJlc3BvbnNlPiA6IG51bGx9PC8+fSAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8Q2hhdElucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7LyogVGFsayBsaXZlIHdpdGggYWRtaW4g4oCTIHJlcXVpcmVzIGVtYWlsIHRvIHN0YXJ0IHJlYWx0aW1lIGNvbW11bmljYXRpb24gKi99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGxpdmVDaGF0UmVxdWVzdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgICAgbWI6IDEuNSxcclxuICAgICAgICAgICAgICBweDogMC41XHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImNhcHRpb25cIiBzeD17e1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IGxpdmVDaGF0QWNjZXB0ZWQgPyAnIzEwYjk4MScgOiAnIzY0NzQ4YicsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgIGdhcDogMC41XHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlY29yZFZvaWNlT3Zlckljb24gc3g9e3tcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDE0XHJcbiAgICAgICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaXZlQ2hhdENvbm5lY3RpbmcgPyAnQ29ubmVjdGluZ+KApicgOiBsaXZlQ2hhdEFjY2VwdGVkID8gJ0FnZW50IGpvaW5lZC4gWW91IGNhbiBjaGF0IG5vdy4nIDogJ1dhaXRpbmcgZm9yIGFuIGFnZW50IHRvIGpvaW7igKYnfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoc2hvd0xpdmVDaGF0RW1haWxGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA8Qm94IGNvbXBvbmVudD1cImZvcm1cIiBvblN1Ym1pdD17aGFuZGxlU3RhcnRMaXZlQ2hhdH0gc3g9e3tcclxuICAgICAgICAgICAgICBtYjogMS41LFxyXG4gICAgICAgICAgICAgIHA6IDEuNSxcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDIsXHJcbiAgICAgICAgICAgICAgYmdjb2xvcjogJyNmOGZhZmMnLFxyXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlOGYwJ1xyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJzdWJ0aXRsZTJcIiBzeD17e1xyXG4gICAgICAgICAgICAgICAgbWI6IDEsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM0NzU1NjknLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIgeW91ciBlbWFpbCB0byBzdGFydCBsaXZlIGNoYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0RmllbGQgZnVsbFdpZHRoIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwieW91ckBlbWFpbC5jb21cIiB2YWx1ZT17bGl2ZUNoYXRFbWFpbH0gb25DaGFuZ2U9e2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2V0TGl2ZUNoYXRFbWFpbChlLnRhcmdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGl2ZUNoYXRFbWFpbEVycm9yKSBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgIH19IGVycm9yPXshIWxpdmVDaGF0RW1haWxFcnJvcn0gaGVscGVyVGV4dD17bGl2ZUNoYXRFbWFpbEVycm9yfSBJbnB1dFByb3BzPXt7XHJcbiAgICAgICAgICAgICAgICBzdGFydEFkb3JubWVudDogPElucHV0QWRvcm5tZW50IHBvc2l0aW9uPVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RW1haWxJY29uIHN4PXt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNjQ3NDhiJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMjBcclxuICAgICAgICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSW5wdXRBZG9ybm1lbnQ+XHJcbiAgICAgICAgICAgICAgfX0gc3g9e3tcclxuICAgICAgICAgICAgICAgIG1iOiAxLFxyXG4gICAgICAgICAgICAgICAgJyYgLk11aU91dGxpbmVkSW5wdXQtcm9vdCc6IHtcclxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXHJcbiAgICAgICAgICAgICAgICAgIGJnY29sb3I6ICcjZmZmJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICBnYXA6IDEsXHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJ1xyXG4gICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHNldFNob3dMaXZlQ2hhdEVtYWlsRm9ybShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHNldExpdmVDaGF0RW1haWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICBzZXRMaXZlQ2hhdEVtYWlsRXJyb3IoJycpO1xyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIHR5cGU9XCJzdWJtaXRcIiBzdGFydEljb249ezxSZWNvcmRWb2ljZU92ZXJJY29uIC8+fSBzeD17e1xyXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMHB4J1xyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IGxpdmUgY2hhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgIG1iOiAxLjUsXHJcbiAgICAgICAgICAgIHB4OiAwLjVcclxuICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHN0YXJ0SWNvbj17PFJlY29yZFZvaWNlT3Zlckljb24gLz59IG9uQ2xpY2s9e2hhbmRsZVN0YXJ0TGl2ZUNoYXRDbGlja30gc3g9e3tcclxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMHB4JyxcclxuICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAnbm9uZScsXHJcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjY2JkNWUxJyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyM0NzU1NjknLFxyXG4gICAgICAgICAgICAgICcmOmhvdmVyJzoge1xyXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjM2I4MmY2JyxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzNiODJmNicsXHJcbiAgICAgICAgICAgICAgICBiZ2NvbG9yOiAncmdiYSg1OSwgMTMwLCAyNDYsIDAuMDQpJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWxrIGxpdmUgd2l0aCBhZG1pblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD47XHJcbiAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgeyFzaG93VXNlckZvcm0gJiYgbGVhZENhcHR1cmVPZmZlcmVkICYmICFsZWFkQ2FwdHVyZURlY2xpbmVkICYmICF1c2VyRm9ybURhdGEuZW1haWwgJiYgPEJveCBzeD17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1iOiAxLjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcDogMS41LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yOiAnI2Y4ZmFmYycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMmU4ZjAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cInN1YnRpdGxlMlwiIHN4PXt7XHJcbiAgICAgICAgICAgICAgICBtYjogMSxcclxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ3NTU2OScsXHJcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcclxuICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYW50IGEgZm9sbG93LXVwP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgc3g9e3tcclxuICAgICAgICAgICAgICAgIG1iOiAxLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6ICcjNjQ3NDhiJ1xyXG4gICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHlvdXIgZW1haWwgYW5kIEnigJlsbCBtYWtlIHN1cmUgb3VyIHRlYW0gY2FuIGZvbGxvdyB1cCBpZiBuZWVkZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICBnYXA6IDEsXHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJ1xyXG4gICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInRleHRcIiBvbkNsaWNrPXtjbG9zZUNvbnRhY3RGb3JtfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IG5vd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cImNvbnRhaW5lZFwiIG9uQ2xpY2s9e29wZW5Db250YWN0Rm9ybX0gc3g9e3tcclxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEwcHgnXHJcbiAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlIGNvbnRhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD59XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggY29tcG9uZW50PVwiZm9ybVwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHN4PXt7XHJcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcclxuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEZpZWxkIGNsYXNzTmFtZT1cIndwYWlfY2hhdElucHV0RmllbGRcIiBmdWxsV2lkdGggdmFyaWFudD1cIm91dGxpbmVkXCIgcGxhY2Vob2xkZXI9e2NoYXRib3RTdHlsZXMucGxhY2Vob2xkZXJUZXh0fSB2YWx1ZT17aW5wdXR9IG9uQ2hhbmdlPXtoYW5kbGVDaGF0SW5wdXRDaGFuZ2V9IG9uQmx1cj17Zmx1c2hDdXN0b21lclR5cGluZ1N0b3BwZWR9IG9uS2V5UHJlc3M9e2hhbmRsZUtleVByZXNzfSBhdXRvQ29tcGxldGU9XCJvZmZcIiBhdXRvQ29ycmVjdD1cIm9mZlwiIGF1dG9DYXBpdGFsaXplPVwib2ZmXCIgc3BlbGxDaGVjaz1cImZhbHNlXCIgaW5wdXRQcm9wcz17e1xyXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6ICdUeXBlIHlvdXIgbWVzc2FnZSB0byB0aGUgYXNzaXN0YW50JyxcclxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcclxuICAgICAgICAgICAgZm9ybToge1xyXG4gICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogJ29mZidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfX0gSW5wdXRQcm9wcz17e1xyXG4gICAgICAgICAgICBlbmRBZG9ybm1lbnQ6IDxCb3ggc3g9e3tcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgZ2FwOiAxLFxyXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPVwiRmlsZSBBdHRhY2htZW50IC0gQ29taW5nIFNvb24hXCIgcGxhY2VtZW50PVwidG9wXCIgYXJyb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b24gc2l6ZT1cInNtYWxsXCIgZGlzYWJsZWQgc3g9e3tcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTA3LCAxMTQsIDEyOCwgMC41KScsXHJcbiAgICAgICAgICAgICAgICAgICAgJyYuTXVpLWRpc2FibGVkJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDEwNywgMTE0LCAxMjgsIDAuNSknXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4J1xyXG4gICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0YWNoRmlsZUljb24gc3g9e3tcclxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMjBweCdcclxuICAgICAgICAgICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17aXNMb2FkaW5nIHx8ICFpbnB1dC50cmltKCl9IGFyaWEtbGFiZWw9XCJTZW5kIG1lc3NhZ2VcIiBzeD17e1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IGNoYXRib3RTdHlsZXMucHJpbWFyeUNvbG9yLFxyXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzhweCcsXHJcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UnLFxyXG4gICAgICAgICAgICAgICAgJyY6bm90KDpkaXNhYmxlZCk6aG92ZXInOiB7IHRyYW5zZm9ybTogJ3NjYWxlKDEuMDgpJyB9LFxyXG4gICAgICAgICAgICAgICAgJyY6bm90KDpkaXNhYmxlZCk6YWN0aXZlJzogeyB0cmFuc2Zvcm06ICdzY2FsZSgwLjk2KScgfVxyXG4gICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VuZEljb24gc3g9e3tcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcyMHB4J1xyXG4gICAgICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cclxuICAgICAgICAgIH19IHByaW1hcnlDb2xvcj17Y2hhdGJvdFN0eWxlcy5wcmltYXJ5Q29sb3J9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQ2hhdElucHV0PlxyXG4gICAgICAgICAgICAgICAgPC9DaGF0V2luZG93Pn1cclxuICAgICAgICA8L2Rpdj47XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IENoYXRib3Q7XHJcblxyXG5cclxuXHJcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlLCBjcmVhdGVBc3luY1RodW5rIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCB7IEFQSV9VUkwsIGdldFdwUmVzdE5vbmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2luZGV4LmpzXCI7XG5cbi8qKiBQbGFpbiBgZGF0YWAgZnJvbSB1c2VyLWluZm8gQVBJIChvYmplY3QsIG9yIEpTT04gc3RyaW5nIGR1cmluZyBtaWdyYXRpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVVzZXJJbmZvRGF0YShyYXcpIHtcbiAgaWYgKHJhdyA9PSBudWxsIHx8IHJhdyA9PT0gXCJcIikgcmV0dXJuIHt9O1xuICBpZiAodHlwZW9mIHJhdyA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShyYXcpKSByZXR1cm4gcmF3O1xuICBpZiAodHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBwYXJzZWQgIT09IG51bGwgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocGFyc2VkKVxuICAgICAgICA/IHBhcnNlZFxuICAgICAgICA6IHt9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge307XG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgdXNlckRhdGE6IHt9LFxuICBpc0xvZ2dlZEluOiBmYWxzZSxcbiAgR2V0VXNlckxvYWRlcjogZmFsc2UsXG4gIGVycm9yOiBudWxsLFxuICBpc1ZlcmlmeTogZmFsc2UsXG4gIGF1dGhfdG9rZW46IG51bGwsXG4gIGhhc0luaXRMb2FkOiBmYWxzZSxcbn07XG5cbi8vIEFzeW5jIHRodW5rIGZvciBmZXRjaGluZyB1c2VyIGRhdGFcbmV4cG9ydCBjb25zdCBmZXRjaFVzZXJEYXRhID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJ1c2VyL2ZldGNoVXNlckRhdGFcIixcbiAgYXN5bmMgKGVuY29kZSwgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIGlmIChlbmNvZGU/LmtleSA9PT0gdW5kZWZpbmVkIHx8IGVuY29kZT8ucGF5bG9hZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyBFeGFtcGxlIG9mIGhvdyB5b3UgbWlnaHQgZmV0Y2ggdXNlciBkYXRhIGZyb20geW91ciBBUElcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGFjdHVhbCBBUEkgZW5kcG9pbnRcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goQVBJX1VSTCArIFwidXNlci91c2VyLWluZm9cIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJYLVdQLU5vbmNlXCI6IGdldFdwUmVzdE5vbmNlKCksXG4gICAgICAgICAgXCJYLUVuY3J5cHRlZC1QYXlsb2FkXCI6IGVuY29kZT8ua2V5LFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheWxvYWQ6IGVuY29kZT8ucGF5bG9hZCxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIC8qXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggdXNlciBkYXRhJyk7XG4gICAgfVxuICAgICovXG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yKTtcbiAgICB9XG4gIH0sXG4pO1xuXG4vLyBJbml0aWFsIHN0YXRlXG5cbi8vIFVzZXIgc2xpY2VcbmNvbnN0IHVzZXJTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJ1c2VyXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHtcbiAgICBzZXRVc2VyRGF0YTogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLnVzZXJEYXRhID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgICAvKiogU2hhbGxvdy1tZXJnZSBmaWVsZHMgaW50byB1c2VyRGF0YSAoZS5nLiBjcmVkaXRfYmFsYW5jZSBhZnRlciBsYXp5IGNyZWRpdHMgQVBJKSAqL1xuICAgIG1lcmdlVXNlckZpZWxkczogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHBhdGNoID0gYWN0aW9uLnBheWxvYWQgfHwge307XG4gICAgICBzdGF0ZS51c2VyRGF0YSA9XG4gICAgICAgIHN0YXRlLnVzZXJEYXRhICYmIHR5cGVvZiBzdGF0ZS51c2VyRGF0YSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS51c2VyRGF0YSxcbiAgICAgICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLnBhdGNoLFxuICAgICAgICAgICAgfTtcbiAgICB9LFxuICAgIHNldElzTG9nZ2VkSW46IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICBzdGF0ZS5pc0xvZ2dlZEluID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgfSxcbiAgICBMb2dpblVzZXI6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICBzdGF0ZS5pc0xvZ2dlZEluID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnVzZXJEYXRhID0gYWN0aW9uLnBheWxvYWQ/LnVzZXI7XG4gICAgICBzdGF0ZS5hdXRoX3Rva2VuID0gYWN0aW9uLnBheWxvYWQ/LnRva2VuO1xuICAgICAgc3RhdGUuaXNWZXJpZnkgPSBhY3Rpb24ucGF5bG9hZD8udmVyaWZpZWQ7XG4gICAgfSxcbiAgICBsb2dvdXRVc2VyOiAoc3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICAgIHN0YXRlLnVzZXJEYXRhID0gbnVsbCB8fCBpbml0aWFsU3RhdGUudXNlckRhdGE7XG4gICAgICBzdGF0ZS5hdXRoX3Rva2VuID0gbnVsbDtcbiAgICB9LFxuICAgIHNldEF1dGhUb2tlbjogKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICAgIHN0YXRlLmF1dGhfdG9rZW4gPSBhY3Rpb24ucGF5bG9hZC50b2tlbjtcbiAgICB9LFxuICAgIHNldEluaXRMb2FkOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgc3RhdGUuaGFzSW5pdExvYWQgPSB0cnVlO1xuICAgIH0sXG4gIH0sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlclxuICAgICAgLmFkZENhc2UoZmV0Y2hVc2VyRGF0YS5wZW5kaW5nLCAoc3RhdGUpID0+IHtcbiAgICAgICAgc3RhdGUuR2V0VXNlckxvYWRlciA9IHRydWU7XG4gICAgICAgIHN0YXRlLmlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBudWxsO1xuICAgICAgfSlcbiAgICAgIC5hZGRDYXNlKGZldGNoVXNlckRhdGEuZnVsZmlsbGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgICAgICBzdGF0ZS5pc0xvZ2dlZEluID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUudXNlckRhdGEgPSBub3JtYWxpemVVc2VySW5mb0RhdGEoYWN0aW9uLnBheWxvYWQ/LmRhdGEpO1xuICAgICAgICBzdGF0ZS5pc1ZlcmlmeSA9IEJvb2xlYW4oc3RhdGUudXNlckRhdGE/LnZlcmlmaWVkKTtcbiAgICAgICAgc3RhdGUubWVzc2FnZXMgPSBhY3Rpb24ucGF5bG9hZD8ubWVzc2FnZTtcbiAgICAgICAgc3RhdGUuR2V0VXNlckxvYWRlciA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5hZGRDYXNlKGZldGNoVXNlckRhdGEucmVqZWN0ZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgIHN0YXRlLmVycm9yID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLkdldFVzZXJMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9LFxufSk7XG5cbi8vIEV4cG9ydCBhY3Rpb25zIGFuZCByZWR1Y2VyXG5leHBvcnQgY29uc3Qge1xuICBzZXRVc2VyRGF0YSxcbiAgbWVyZ2VVc2VyRmllbGRzLFxuICBzZXRJc0xvZ2dlZEluLFxuICBMb2dpblVzZXIsXG4gIHNldEF1dGhUb2tlbixcbiAgbG9nb3V0VXNlcixcbiAgc2V0SW5pdExvYWQsXG59ID0gdXNlclNsaWNlLmFjdGlvbnM7XG5leHBvcnQgZGVmYXVsdCB1c2VyU2xpY2UucmVkdWNlcjtcbiIsImltcG9ydCB7IGNyZWF0ZVNsaWNlLCBjcmVhdGVBc3luY1RodW5rIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcclxuaW1wb3J0IHsgQVBJX1VSTCwgRW5jcnlwdFBheWxvYWQsIERlY3J5cHRQYXlsb2FkLCBnZXRXcFJlc3ROb25jZSB9IGZyb20gXCIuLi8uLi91dGlscy9pbmRleC5qc1wiO1xyXG5pbXBvcnQge1xyXG4gIGZldGNoVXNlckRhdGEsXHJcbiAgbm9ybWFsaXplVXNlckluZm9EYXRhLFxyXG4gIExvZ2luVXNlcixcclxufSBmcm9tIFwiLi9Vc2VyU2xpY2UuanNcIjtcclxuXHJcbmZ1bmN0aW9uIGRlcml2ZVN1YnNjcmlwdGlvbkZyb21Vc2VyKHJhdykge1xyXG4gIGNvbnN0IHVzZXIgPSBub3JtYWxpemVVc2VySW5mb0RhdGEocmF3KTtcclxuICBjb25zdCBtcyA9IHVzZXIubWVtYmVyc2hpcF9zdGF0dXM7XHJcbiAgY29uc3Qgc3Vic2NyaWJlZCA9XHJcbiAgICB1c2VyLmlzX3N1YnNjcmliZWQgPT09IHRydWUgfHxcclxuICAgIHVzZXIuaXNfc3Vic2NyaWJlZCA9PT0gMSB8fFxyXG4gICAgdXNlci5zdWJzY3JpcHRpb25fYWN0aXZlID09PSB0cnVlIHx8XHJcbiAgICBtcyA9PT0gdHJ1ZSB8fFxyXG4gICAgbXMgPT09IDEgfHxcclxuICAgIE51bWJlcihtcykgPT09IDEgfHxcclxuICAgIFN0cmluZyhtcyB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpID09PSBcImFjdGl2ZVwiO1xyXG4gIHJldHVybiB7XHJcbiAgICBpc1N1YnNjcmliZWQ6IEJvb2xlYW4oc3Vic2NyaWJlZCksXHJcbiAgICBtZXNzYWdlOiB1c2VyLnN1YnNjcmlwdGlvbl9tZXNzYWdlIHx8IHVzZXIubWVtYmVyc2hpcF9tZXNzYWdlIHx8IFwiXCIsXHJcbiAgICBTdWJzY3JpYmVVc2VyOlxyXG4gICAgICB1c2VyLnN1YnNjcmlwdGlvbl9kZXRhaWxzICYmIHR5cGVvZiB1c2VyLnN1YnNjcmlwdGlvbl9kZXRhaWxzID09PSBcIm9iamVjdFwiXHJcbiAgICAgICAgPyB1c2VyLnN1YnNjcmlwdGlvbl9kZXRhaWxzXHJcbiAgICAgICAgOiBzdWJzY3JpYmVkXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICBtZW1iZXJzaGlwX3N0YXR1czogdXNlci5tZW1iZXJzaGlwX3N0YXR1cyB8fCBcIkFjdGl2ZVwiLFxyXG4gICAgICAgICAgICAgIHBsYW5fbmFtZTpcclxuICAgICAgICAgICAgICAgIHVzZXIucGxhbl9uYW1lIHx8IHVzZXIuY3VycmVudF9wbGFuIHx8IHVzZXIuc3Vic2NyaXB0aW9uX3RpZXIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDoge30sXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNoZWNrU3Vic2NyaXB0aW9uID0gY3JlYXRlQXN5bmNUaHVuayhcclxuICBcInN1YnNjcmlwdGlvbi9jaGVja1N1YnNjcmlwdGlvblwiLFxyXG4gIGFzeW5jICh0b2tlbiwgeyByZWplY3RXaXRoVmFsdWUsIGdldFN0YXRlIH0pID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2F1dGhfdG9rZW4nKTtcclxuICAgICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICBjb25zdCB1c2VyU3RhdGUgPSBzdGF0ZS51c2VyO1xyXG4gICAgICBjb25zdCBWYXJpZmljYXRpb24gPSB1c2VyU3RhdGU/LmlzVmVyaWZ5O1xyXG4gICAgICBpZiAoIVZhcmlmaWNhdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlbmNyeXB0ZWRQYXlsb2FkID0gRW5jcnlwdFBheWxvYWQoe1xyXG4gICAgICAgIHRva2VuOiB0b2tlbixcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7QVBJX1VSTH11c2VyLXN1YnNjcmlwdGlvbi1jaGVja2AsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgXCJYLVdQLU5vbmNlXCI6IGdldFdwUmVzdE5vbmNlKCksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bG9hZDogZW5jcnlwdGVkUGF5bG9hZCxcclxuICAgICAgICB9KSxcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2tcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jcnlwdGVkUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAvLyBjb25zdCByZXNwb25zZV9kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG5cclxuICAgICAgLy8gICAgIGlmICghcmVzcG9uc2VfZGF0YS5zdWNjZXNzKSB7XHJcbiAgICAgIC8vICAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShyZXNwb25zZV9kYXRhLmRhdGE/Lm1lc3NhZ2UgfHwgJ1N1YnNjcmlwdGlvbiBjaGVjayBmYWlsZWQnKTtcclxuICAgICAgLy8gICAgIH1cclxuXHJcbiAgICAgIC8vICAgICByZXR1cm4gRGVjcnlwdFBheWxvYWQocmVzcG9uc2VfZGF0YSk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmICghZW5jcnlwdGVkUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoXHJcbiAgICAgICAgICBlbmNyeXB0ZWRSZXNwb25zZS5tZXNzYWdlIHx8IFwiU3Vic2NyaXB0aW9uIGNoZWNrIGZhaWxlZFwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIGRhdGEgZmllbGQgZXhpc3RzIGFuZCBpcyBlbmNyeXB0ZWRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVuY3J5cHRlZFJlc3BvbnNlLmRhdGEgJiZcclxuICAgICAgICB0eXBlb2YgZW5jcnlwdGVkUmVzcG9uc2UuZGF0YSA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICApIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gRGVjcnlwdCB0aGUgZGF0YSBmaWVsZFxyXG4gICAgICAgICAgY29uc3QgZGVjcnlwdGVkVXNlckRhdGEgPSBEZWNyeXB0UGF5bG9hZChlbmNyeXB0ZWRSZXNwb25zZS5kYXRhKTtcclxuXHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcmVzcG9uc2Ugb2JqZWN0IHdpdGggdGhlIGRlY3J5cHRlZCBkYXRhXHJcbiAgICAgICAgICBjb25zdCBmdWxsUmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGVuY3J5cHRlZFJlc3BvbnNlLnN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVuY3J5cHRlZFJlc3BvbnNlLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIC8vIGRhdGE6IHtcclxuICAgICAgICAgICAgLy8gICAgIHVzZXJfZGF0YTogZGVjcnlwdGVkVXNlckRhdGFcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIC8vIElmIGRlY3J5cHRpb24gZmFpbHMsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcclxuICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWRSZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgZGF0YSBpcyBub3QgZW5jcnlwdGVkIG9yIGRvZXNuJ3QgZXhpc3QsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcclxuICAgICAgICByZXR1cm4gZW5jcnlwdGVkUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoZXJyb3IubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBjaGVjayBzdWJzY3JpcHRpb25cIik7XHJcbiAgICB9XHJcbiAgfSxcclxuKTtcclxuXHJcbmNvbnN0IHN1YnNjcmlwdGlvblNsaWNlID0gY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6IFwic3Vic2NyaXB0aW9uXCIsXHJcbiAgaW5pdGlhbFN0YXRlOiB7XHJcbiAgICBpc1N1YnNjcmliZWQ6IGZhbHNlLFxyXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcclxuICAgIGVycm9yOiBudWxsLFxyXG4gICAgU3Vic2NyaWJlVXNlcjoge30sXHJcbiAgICBtZXNzYWdlOiBcIlwiLFxyXG4gIH0sXHJcbiAgcmVkdWNlcnM6IHtcclxuICAgIGNsZWFyRXJyb3I6IChzdGF0ZSkgPT4ge1xyXG4gICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICB9LFxyXG4gICAgcmVzZXRMb2FkaW5nOiAoc3RhdGUpID0+IHtcclxuICAgICAgc3RhdGUuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgcmVzZXRTdWJzY3JpYmU6IChzdGF0ZSkgPT4ge1xyXG4gICAgICBzdGF0ZS5pc1N1YnNjcmliZWQgPSBmYWxzZTtcclxuICAgICAgc3RhdGUuU3Vic2NyaWJlVXNlciA9IHt9O1xyXG4gICAgICBzdGF0ZS5tZXNzYWdlID0gXCJcIjtcclxuICAgIH0sXHJcbiAgfSxcclxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShmZXRjaFVzZXJEYXRhLmZ1bGZpbGxlZCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gZGVyaXZlU3Vic2NyaXB0aW9uRnJvbVVzZXIoYWN0aW9uLnBheWxvYWQ/LmRhdGEpO1xyXG4gICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IG5leHQuaXNTdWJzY3JpYmVkO1xyXG4gICAgICAgIHN0YXRlLm1lc3NhZ2UgPSBuZXh0Lm1lc3NhZ2U7XHJcbiAgICAgICAgc3RhdGUuU3Vic2NyaWJlVXNlciA9IG5leHQuU3Vic2NyaWJlVXNlcjtcclxuICAgICAgICBzdGF0ZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKExvZ2luVXNlciwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gZGVyaXZlU3Vic2NyaXB0aW9uRnJvbVVzZXIoYWN0aW9uLnBheWxvYWQ/LnVzZXIpO1xyXG4gICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IG5leHQuaXNTdWJzY3JpYmVkO1xyXG4gICAgICAgIHN0YXRlLm1lc3NhZ2UgPSBuZXh0Lm1lc3NhZ2U7XHJcbiAgICAgICAgc3RhdGUuU3Vic2NyaWJlVXNlciA9IG5leHQuU3Vic2NyaWJlVXNlcjtcclxuICAgICAgICBzdGF0ZS5lcnJvciA9IG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKGNoZWNrU3Vic2NyaXB0aW9uLnBlbmRpbmcsIChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHN0YXRlLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgc3RhdGUuZXJyb3IgPSBudWxsO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyAuYWRkQ2FzZShjaGVja1N1YnNjcmlwdGlvbi5mdWxmaWxsZWQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIC8vICAgICBpZiAoYWN0aW9uLnBheWxvYWQ/LnN1Y2Nlc3MgPT09IHRydWUpIHtcclxuICAgICAgLy8gICAgICAgICBzdGF0ZS5tZXNzYWdlID0gYWN0aW9uLnBheWxvYWQ/LmRhdGE/Lm1lc3NhZ2U7XHJcbiAgICAgIC8vICAgICAgICAgY29uc3QgeyBzdHJpcGVfcGF5bWVudF91cmwsIHN0cmlwZV9jdXN0b21lcl9pZCwgaXNfc3Vic2NyaWJlZCwgLi4uZmlsdGVyZWREYXRhIH0gPSBhY3Rpb24ucGF5bG9hZD8uZGF0YT8udXNlcl9kYXRhO1xyXG4gICAgICAvLyAgICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IE51bWJlcihpc19zdWJzY3JpYmVkKSA9PT0gMTtcclxuICAgICAgLy8gICAgICAgICBzdGF0ZS5TdWJzY3JpYmVVc2VyID0gZmlsdGVyZWREYXRhO1xyXG4gICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgICAgICBzdGF0ZS5lcnJvciA9ICdJbnZhbGlkIHJlc3BvbnNlIGZvcm1hdCc7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICBzdGF0ZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgLy8gfSlcclxuICAgICAgLmFkZENhc2UoY2hlY2tTdWJzY3JpcHRpb24uZnVsZmlsbGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGlmIChhY3Rpb24ucGF5bG9hZD8uc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgc3RhdGUubWVzc2FnZSA9IGFjdGlvbi5wYXlsb2FkLm1lc3NhZ2U7XHJcbiAgICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibWVtYmVyXCIpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXRlLlN1YnNjcmliZVVzZXIgPSBhY3Rpb24ucGF5bG9hZC5kYXRhPy51c2VyX2RhdGEgfHwge1xyXG4gICAgICAgICAgICAgIG1lbWJlcnNoaXBfc3RhdHVzOiBcIkFjdGl2ZVwiLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGFjdGlvbi5wYXlsb2FkLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGF0ZS5pc1N1YnNjcmliZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc3RhdGUuU3Vic2NyaWJlVXNlciA9IHt9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdGF0ZS5lcnJvciA9IFwiSW52YWxpZCByZXNwb25zZSBmb3JtYXRcIjtcclxuICAgICAgICAgIHN0YXRlLmlzU3Vic2NyaWJlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGUuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hZGRDYXNlKGNoZWNrU3Vic2NyaXB0aW9uLnJlamVjdGVkLCAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHN0YXRlLmVycm9yID0gYWN0aW9uLnBheWxvYWQgfHwgXCJGYWlsZWQgdG8gY2hlY2sgc3Vic2NyaXB0aW9uXCI7XHJcbiAgICAgICAgc3RhdGUuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgc3RhdGUuaXNTdWJzY3JpYmVkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHsgY2xlYXJFcnJvciwgcmVzZXRMb2FkaW5nLCByZXNldFN1YnNjcmliZSB9ID1cclxuICBzdWJzY3JpcHRpb25TbGljZS5hY3Rpb25zO1xyXG5leHBvcnQgZGVmYXVsdCBzdWJzY3JpcHRpb25TbGljZS5yZWR1Y2VyO1xyXG4iLCJpbXBvcnQgeyBjcmVhdGVTbGljZSB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XHJcbiAgaXNfY2hhdF9vcGVuOiBmYWxzZSxcclxuICBzY3JlZW5QYWdlOiBcImhvbWVUYWJcIixcclxuICBjaGF0U2NyZWVuOiB7XHJcbiAgICBoZWFkZXI6IGZhbHNlLFxyXG4gICAgbmFtZTogbnVsbCxcclxuICB9LFxyXG4gIG1lc3NhZ2VzOiBbXSxcclxuICBjaGF0Qm90U2V0dGluZzogbnVsbCxcclxuICBjaGF0Qm90QWRtaW46IHtcclxuICAgIHVzZXI6IG51bGwsXHJcbiAgICBUb2tlbjogbnVsbCxcclxuICB9LFxyXG4gIGlzX1F1ZXJ5X1N1Ym1pdDogZmFsc2UsXHJcbiAgbG9hZF9jaGF0X2hpc3Rvcnk6IGZhbHNlLFxyXG4gIGlzUmVjb3JkaW5nOiBmYWxzZSxcclxufTtcclxuXHJcbmNvbnN0IFdlYkJvdCA9IGNyZWF0ZVNsaWNlKHtcclxuICBuYW1lOiBcImNoYXRib3Qtd2ViXCIsXHJcbiAgaW5pdGlhbFN0YXRlLFxyXG4gIHJlZHVjZXJzOiB7XHJcbiAgICBzZXRDaGF0T3BlbjogKHN0YXRlKSA9PiB7XHJcbiAgICAgIHN0YXRlLmlzX2NoYXRfb3BlbiA9ICFzdGF0ZS5pc19jaGF0X29wZW47XHJcbiAgICB9LFxyXG4gICAgc2V0U2NyZWVuUGFnZTogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUuc2NyZWVuUGFnZSA9IGFjdGlvbi5wYXlsb2FkPy5jdXJyZW50U2NyZWVuO1xyXG4gICAgfSxcclxuICAgIHNldENoYXRTY3JlZW46IChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlLmNoYXRTY3JlZW4uaGVhZGVyID0gdHJ1ZTtcclxuICAgICAgc3RhdGUuY2hhdFNjcmVlbi5uYW1lID0gYWN0aW9uLnBheWxvYWQ/Lm5hbWU7XHJcbiAgICB9LFxyXG4gICAgZGVsZXRlQ2hhdFNjcmVlbjogKHN0YXRlKSA9PiB7XHJcbiAgICAgIHN0YXRlLmNoYXRTY3JlZW4uaGVhZGVyID0gZmFsc2U7XHJcbiAgICAgIHN0YXRlLmNoYXRTY3JlZW4ubmFtZSA9IG51bGw7XHJcbiAgICB9LFxyXG4gICAgc2V0TWVzc2FnZXM6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlLm1lc3NhZ2VzLnB1c2goLi4uYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgfSxcclxuICAgIHNldENoYXRib3RTZXR0aW5nOiAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICBzdGF0ZS5jaGF0Qm90U2V0dGluZyA9IGFjdGlvbi5wYXlsb2FkPy5kYXRhO1xyXG4gICAgfSxcclxuICAgIHNldENoYXRib3RBZG1pbjogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUuY2hhdEJvdEFkbWluLnVzZXIgPSBhY3Rpb24ucGF5bG9hZD8udXNlcjtcclxuICAgICAgc3RhdGUuY2hhdEJvdEFkbWluLlRva2VuID0gYWN0aW9uLnBheWxvYWQ/LlRva2VuO1xyXG4gICAgfSxcclxuICAgIHNldFN1Ym1pdDogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUuaXNfUXVlcnlfU3VibWl0ID0gYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9LFxyXG4gICAgbG9hZEhpc3RveTogKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUubG9hZF9jaGF0X2hpc3RvcnkgPSBhY3Rpb24ucGF5bG9hZDtcclxuICAgIH0sXHJcbiAgICBzZXRSZWNvcmRpbmc6IChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlLmlzUmVjb3JkaW5nID0gYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHtcclxuICBzZXRDaGF0T3BlbixcclxuICBzZXRTY3JlZW5QYWdlLFxyXG4gIHNldENoYXRTY3JlZW4sXHJcbiAgZGVsZXRlQ2hhdFNjcmVlbixcclxuICBzZXRNZXNzYWdlcyxcclxuICBzZXRDaGF0Ym90U2V0dGluZyxcclxuICBzZXRDaGF0Ym90QWRtaW4sXHJcbiAgc2V0U3VibWl0LFxyXG4gIGxvYWRIaXN0b3ksXHJcbiAgc2V0UmVjb3JkaW5nLFxyXG59ID0gV2ViQm90LmFjdGlvbnM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBXZWJCb3QucmVkdWNlcjtcclxuIiwiaW1wb3J0IHsgY29uZmlndXJlU3RvcmUgfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5pbXBvcnQgc3Vic2NyaXB0aW9uUmVkdWNlciBmcm9tIFwiLi4vU2xpY2VzL1N1YnNjcmlwdGlvblNsaWNlLmpzXCI7XHJcbmltcG9ydCBDaGF0Ym90UmVkdWNlciBmcm9tIFwiLi4vU2xpY2VzL0NoYXRib3RTbGljZS5qc1wiO1xyXG5pbXBvcnQgdXNlclJlZHVjZXIgZnJvbSBcIi4uL1NsaWNlcy9Vc2VyU2xpY2UuanNcIjtcclxuaW1wb3J0IFdlYkJvdFJlZHVjZXIgZnJvbSBcIi4uL1NsaWNlcy9XZWJCb3RTbGljZS5qc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHN0b3JlID0gY29uZmlndXJlU3RvcmUoe1xyXG4gIHJlZHVjZXI6IHtcclxuICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uUmVkdWNlcixcclxuICAgIGNoYXRib3Q6IENoYXRib3RSZWR1Y2VyLFxyXG4gICAgdXNlcjogdXNlclJlZHVjZXIsXHJcbiAgICB3ZWJCb3Q6IFdlYkJvdFJlZHVjZXIsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZTtcclxuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2dsb2JhbC5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2dsb2JhbC5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiQHdvcmRwcmVzcy9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XHJcbmltcG9ydCBDaGF0Ym90IGZyb20gXCJAL2NvbXBvbmVudHMvQ2hhdGJvdC9DaGF0Ym90XCI7XHJcbi8vIGltcG9ydCBDaGF0Ym90IGZyb20gJ0AvZmVhdHVyZXMvY2hhdGJvdC9DaGF0Ym90RW50cnlQb2ludCc7XHJcbmltcG9ydCBzdG9yZSBmcm9tIFwiQC9yZWR1eC9TdG9yZS9zdG9yZS5qc1wiO1xyXG5pbXBvcnQgXCJAL2Fzc2V0cy9jc3MvZ2xvYmFsLmNzc1wiO1xyXG5cclxuLy8gQ29uc29sZSBsb2dnaW5nIGZvciBkZWJ1Z2dpbmdcclxuXHJcbi8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGNoYXRib3Qgc2hvdWxkIGJlIHJlbmRlcmVkICh2YWx1ZSBmcm9tIERCIHZpYSB3cF9sb2NhbGl6ZV9zY3JpcHQpXHJcbmNvbnN0IHNob3VsZFJlbmRlckNoYXRib3QgPSAoKSA9PiB7XHJcbiAgY29uc3QgdyA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cud3BhaVBsdWdpblNldHRpbmdzIDogbnVsbDtcclxuICBjb25zdCBzdG9yZWRWYWx1ZSA9XHJcbiAgICB3ICYmIHcuY2hhdGJvdFZpc2libGUgIT0gbnVsbCA/IFN0cmluZyh3LmNoYXRib3RWaXNpYmxlKSA6IFwiZmFsc2VcIjtcclxuICBjb25zdCBzID0gc3RvcmVkVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gcyA9PT0gXCJ0cnVlXCIgfHwgcyA9PT0gXCIxXCI7XHJcbn07XHJcblxyXG4vLyBGdW5jdGlvbiB0byBzYWZlbHkgcmVuZGVyIHdpdGggZXJyb3IgaGFuZGxpbmdcclxuY29uc3QgcmVuZGVyQ2hhdGJvdCA9IChjb250YWluZXIpID0+IHtcclxuICB0cnkge1xyXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHJlbmRlciB0aGUgY2hhdGJvdFxyXG4gICAgaWYgKCFzaG91bGRSZW5kZXJDaGF0Ym90KCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb250YWluZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmVuZGVyKFxyXG4gICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cclxuICAgICAgICA8Q2hhdGJvdCAvPlxyXG4gICAgICA8L1Byb3ZpZGVyPixcclxuICAgICAgY29udGFpbmVyLFxyXG4gICAgKTtcclxuICB9IGNhdGNoIChlcnJvcikge31cclxufTtcclxuXHJcbi8vIEhhbmRsZXIgZm9yIG1vZGUgY2hhbmdlc1xyXG5jb25zdCBoYW5kbGVBZ2VudE1vZGVDaGFuZ2UgPSAoZXZlbnQpID0+IHtcclxuICBpZiAoZXZlbnQuZGV0YWlsLm1vZGUgPT09IFwiY2hhdGJvdFwiIHx8ICFldmVudC5kZXRhaWwubW9kZSkge1xyXG4gICAgLy8gRmluZCBhbmQgcmVuZGVyIGluIGV4aXN0aW5nIGNvbnRhaW5lcnNcclxuICAgIGNvbnN0IGNoYXRib3RSb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3cGFpX2FpLWNoYXRib3Qtcm9vdFwiKTtcclxuICAgIGlmIChjaGF0Ym90Um9vdCkge1xyXG4gICAgICByZW5kZXJDaGF0Ym90KGNoYXRib3RSb290KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLndwLWFpLWNoYXRib3QtY29udGFpbmVyXCIpO1xyXG4gICAgY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIpID0+IHJlbmRlckNoYXRib3QoY29udGFpbmVyKSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIENvZGUgdG8gcmVtb3ZlIGNoYXRib3QgaWYgbmVlZGVkXHJcbiAgICBjb25zdCBjaGF0Ym90Um9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid3BhaV9haS1jaGF0Ym90LXJvb3RcIik7XHJcbiAgICBpZiAoY2hhdGJvdFJvb3QpIHtcclxuICAgICAgcmVuZGVyKG51bGwsIGNoYXRib3RSb290KTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG4vLyBMaXN0ZW4gZm9yIGFnZW50IG1vZGUgY2hhbmdlc1xyXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwid3BhaV9hZ2VudF9tb2RlX2NoYW5nZWRcIiwgaGFuZGxlQWdlbnRNb2RlQ2hhbmdlKTtcclxuXHJcbi8vIFJlbmRlciB0byB0aGUgbWFpbiBjb250YWluZXJcclxuY29uc3QgY2hhdGJvdFJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndwYWlfYWktY2hhdGJvdC1yb290XCIpO1xyXG5pZiAoY2hhdGJvdFJvb3QpIHtcclxuICByZW5kZXJDaGF0Ym90KGNoYXRib3RSb290KTtcclxufSBlbHNlIHtcclxufVxyXG5cclxuLy8gRmluZCBhbGwgY2hhdGJvdCBjb250YWluZXJzIG9uIHRoZSBwYWdlXHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtcclxuICBjb25zdCBjaGF0Ym90Q29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICBcIi53cC1haS1jaGF0Ym90LWNvbnRhaW5lclwiLFxyXG4gICk7XHJcbiAgaWYgKGNoYXRib3RDb250YWluZXJzLmxlbmd0aCA+IDAgJiYgc2hvdWxkUmVuZGVyQ2hhdGJvdCgpKSB7XHJcbiAgICBjaGF0Ym90Q29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIsIGluZGV4KSA9PiB7XHJcbiAgICAgIHJlbmRlckNoYXRib3QoY29udGFpbmVyKTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgfVxyXG59KTtcclxuIl0sIm5hbWVzIjpbImlzTG9jYWxob3N0Iiwid2luZG93IiwibG9jYXRpb24iLCJob3N0bmFtZSIsIkJBU0VfVVJMIiwib3JpZ2luIiwiY3JlYXRlU2xpY2UiLCJjcmVhdGVBc3luY1RodW5rIiwidG9hc3QiLCJHZXRDaGF0Ym90RGF0YSIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwid3BBcGlTZXR0aW5ncyIsIm5vbmNlIiwicmVzcG9uc2VfZGF0YSIsImpzb24iLCJTYXZlQXBwZWFyYW5jZVNldHRpbmciLCJkYXRhIiwiYXBpRGF0YSIsImJnX2NvbG9yIiwicHJpbWFyeUNvbG9yIiwidGV4dF9jb2xvciIsInNlY29uZGFyeUNvbG9yIiwidHlwZSIsImJvdEljb24iLCJpY29uIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsIkJhY2tncm91bmRDb2xvciIsInRleHRDb2xvciIsImJvdEljb25UeXBlIiwiY3VzdG9tQm90SWNvbiIsImxlbmd0aCIsImJvZHkiLCJTYXZlTWVzc2FnZVNldHRpbmdzIiwiY2hhdF9ib3RfbXNnIiwid2VsY29tZU1lc3NhZ2UiLCJwbGFjZWhvbGRlcl9tc2ciLCJwbGFjZWhvbGRlclRleHQiLCJjaGF0Ym90X25hbWUiLCJoZWFkZXJUZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsIkNoYXRib3RTbGljZSIsIm5hbWUiLCJpbml0aWFsU3RhdGUiLCJpc19sb2FkaW5nIiwibG9hZCIsImFwcGVhcmFuY2UiLCJtZXNzYWdlIiwibW9kZSIsImVycm9yIiwiQ2hhdGJvdERhdGEiLCJyZWR1Y2VycyIsImV4dHJhUmVkdWNlcnMiLCJidWlsZGVyIiwiYWRkQ2FzZSIsInBlbmRpbmciLCJzdGF0ZSIsImZ1bGZpbGxlZCIsImFjdGlvbiIsInBheWxvYWQiLCJzdWNjZXNzIiwicmVqZWN0ZWQiLCJyZWR1Y2VyIiwiTFNfS0VZUyIsImNhY2hlIiwiaHlkcmF0ZWQiLCJpbmZsaWdodEh5ZHJhdGUiLCJzYXZlVGltZXIiLCJwZW5kaW5nUGF0Y2giLCJPYmplY3QiLCJjcmVhdGUiLCJ3cFJlc3ROb25jZSIsIndwYWlTZXNzaW9uRGF0YSIsInJlc3RSb290Iiwicm9vdCIsIlN0cmluZyIsInJlcGxhY2UiLCJnZXRVc2VyQ2xpZW50U3RvcmFnZVN5bmMiLCJrZXkiLCJ2IiwidW5kZWZpbmVkIiwic2V0VXNlckNsaWVudFN0b3JhZ2VTeW5jIiwidmFsdWUiLCJzIiwic2NoZWR1bGVGbHVzaCIsInJlbW92ZVVzZXJDbGllbnRTdG9yYWdlU3luYyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJmbHVzaFBlbmRpbmciLCJrZXlzIiwicGF0Y2giLCJrIiwiYXNzaWduIiwicmVzIiwiY3JlZGVudGlhbHMiLCJvayIsIkFycmF5IiwiaXNBcnJheSIsInB1cmdlTGVnYWN5TG9jYWxTdG9yYWdlIiwibG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsIm1pZ3JhdGVMZWdhY3lMb2NhbFN0b3JhZ2VUb0NhY2hlIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiY2hhbmdlZCIsImh5ZHJhdGVVc2VyQ2xpZW50U3RvcmFnZSIsInNlcnZlck9rIiwibWlncmF0ZWQiLCJzZXRJdGVtIiwib3V0IiwiZmx1c2hVc2VyQ2xpZW50U3RvcmFnZU5vdyIsIldQQUlfQVVUSF9TRVNTSU9OX1NUT1JBR0VfS0VZIiwiY29uc3VtZUJvb3RzdHJhcFNlc3Npb25CbG9iIiwiYm9vdCIsImF1dGhTZXNzaW9uQmxvYiIsImNsZWFyQXV0aFNlc3Npb25JbldvcmRQcmVzc0RiIiwiYWpheHVybCIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsIlRva2VuSGFuZGxlIiwiYXBpRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJzdGF0dXMiLCJyZXF1ZXN0IiwiY3JlYXRlVG9rZW4iLCJ0b2tlbiIsImdldFRva2VuIiwiYmxvYiIsImF1dGhfdG9rZW4iLCJkZWxldGVUb2tlbiIsIkFQSV9VUkxTIiwiTE9DQUxIT1NUIiwiREVWRUxPUE1FTlQiLCJQUk9EVUNUSU9OIiwiZ2V0V3BSZXN0Tm9uY2UiLCJhaUNvbnRlbnRTZXR0aW5ncyIsImdldEF1dG93cEFwaUJhc2VVcmwiLCJ3cGFpUGx1Z2luU2V0dGluZ3MiLCJkaXJlY3RTYWFTQXBpVXJsIiwidSIsInRyaW0iLCJlbmRzV2l0aCIsIkFQSV9VUkwiLCJQTFVHSU5fSU5GTyIsInZlcnNpb24iLCJwbHVnaW5WZXJzaW9uIiwiUkVBTFRJTUVfQ0hBVF9TVE9SQUdFX0tFWSIsImdldFJlYWx0aW1lQ2hhdEVuYWJsZWQiLCJzZXRSZWFsdGltZUNoYXRFbmFibGVkIiwiZW5hYmxlZCIsIlZJU0lUT1JfSU5URUxMSUdFTkNFX1NUT1JBR0VfS0VZIiwiZ2V0VmlzaXRvckludGVsbGlnZW5jZUVuYWJsZWQiLCJzZXRWaXNpdG9ySW50ZWxsaWdlbmNlRW5hYmxlZCIsImdldFJlYWx0aW1lV3NCYXNlVXJsIiwicmVhbHRpbWVXc0hvc3QiLCJnZXRTZXNzaW9uSUQiLCJzZXNzaW9uSUQiLCJFbmNyeXB0UGF5bG9hZCIsImpzb25EYXRhIiwiZW5jb2RlZERhdGEiLCJidG9hIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJEZWNyeXB0UGF5bG9hZCIsImlzQmFzZTY0IiwiZGVjb2RlZERhdGEiLCJhdG9iIiwicGFyc2UiLCJzdHIiLCJlIiwibm9ybWFsaXplRW5jb2RlZERhdGFGb3JTZXNzaW9uIiwiZW5jb2RlZF9kYXRhIiwiZGVjb2RlZCIsInN0b3JhZ2VQYXlsb2FkIiwiR2V0RGF0YUZyb21Mb2NhbFN0b3JhZ2UiLCJkYXRhVG9rZW5SZXNwb25zZSIsImRlY3J5cHRlZERhdGEiLCJUaW1lRGlmZiIsImRhdGUiLCJzZWNvbmRzIiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsIm1pbnV0ZXMiLCJob3VycyIsImRheXMiLCJXcEFpUGx1Z2luc1ByaWNpbmciLCJ0aXRsZSIsImFydGljbGVzUGVyTW9udGgiLCJjaGF0Ym90UmVzcG9uc2VzIiwicHJpY2UiLCJwZXJpb2QiLCJkZXNjcmlwdGlvbiIsImZlYXR1cmVzIiwicG9wdWxhciIsIlJlYWN0IiwiQm94IiwiVHlwb2dyYXBoeSIsInBhcnNlSW5saW5lIiwidGV4dCIsInBhcnRzIiwiaSIsImxlbiIsInN0YXJ0c1dpdGgiLCJlbmQiLCJpbmRleE9mIiwicHVzaCIsImNyZWF0ZUVsZW1lbnQiLCJzbGljZSIsImNvbXBvbmVudCIsInN4IiwicHgiLCJweSIsImJvcmRlclJhZGl1cyIsImJnY29sb3IiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJuZXh0IiwiYm9sZEF0IiwidGlja0F0IiwibWluIiwiQ2hhdGJvdE1hcmtkb3duQ29udGVudCIsImlzVXNlciIsImlzU3RyZWFtaW5nIiwidmFyaWFudCIsIndoaXRlU3BhY2UiLCJ3b3JkQnJlYWsiLCJsaW5lSGVpZ2h0IiwiZm9udFdlaWdodCIsImxldHRlclNwYWNpbmciLCJibG9ja3MiLCJyZXN0IiwiYmkiLCJmZW5jZSIsImNvbnRlbnQiLCJlbmRGZW5jZSIsIm1iIiwibWFwIiwiYmxvY2siLCJpZHgiLCJtIiwicCIsIm92ZXJmbG93IiwibWF4V2lkdGgiLCJib3JkZXIiLCJib3JkZXJDb2xvciIsImxpbmVzIiwic3BsaXQiLCJub2RlcyIsImxpIiwibGlzdEJ1ZiIsImZsdXNoTGlzdCIsInBsIiwiY29sb3IiLCJpdGVtIiwiaiIsImRpc3BsYXkiLCJsaW5lIiwibGlzdE1hdGNoIiwibWF0Y2giLCJGcmFnbWVudCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiUGFwZXIiLCJBdmF0YXIiLCJJY29uQnV0dG9uIiwiVG9vbHRpcCIsIlRleHRGaWVsZCIsIkNoZWNrSWNvbiIsIkVycm9yT3V0bGluZUljb24iLCJSZWZyZXNoSWNvbiIsIkhvdXJnbGFzc0VtcHR5SWNvbiIsImtleWZyYW1lcyIsImVudGVyVXAiLCJzdHJlYW1HbG93IiwiSW5saW5lRm9ybUZpZWxkIiwicHJvcHMiLCJfZXh0ZW5kcyIsImJhY2tncm91bmRDb2xvciIsImJveFNoYWRvdyIsInBhZGRpbmciLCJDaGF0Ym90TWVzc2FnZUJ1YmJsZSIsIm9uU3RyZWFtQ29tcGxldGUiLCJvblJldHJ5IiwidmlzaWJsZUxlbiIsInNldFZpc2libGVMZW4iLCJ0aW1lclJlZiIsInN0cmVhbU5vdGlmaWVkUmVmIiwiY3VycmVudCIsImZ1bGwiLCJpZCIsInRpY2siLCJjaCIsImRlbGF5IiwidGVzdCIsInJvdW5kIiwicmFuZG9tIiwiZm9ybUZpZWxkIiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJtbCIsImZ1bGxXaWR0aCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJoZWxwZXJUZXh0IiwiYXV0b0ZvY3VzIiwib25LZXlQcmVzcyIsInByZXZlbnREZWZhdWx0Iiwib25TdWJtaXQiLCJmdWxsTGVuIiwiZGlzcGxheVRleHQiLCJzdHJlYW1Eb25lIiwic2hvd01kIiwidXNlckJ1YmJsZUJnIiwidXNlclRleHQiLCJhbmltYXRpb24iLCJvcGFjaXR5IiwiZ2FwIiwid2lkdGgiLCJqdXN0aWZ5Q29udGVudCIsImhlaWdodCIsInBvc2l0aW9uIiwiZWxldmF0aW9uIiwidHJhbnNpdGlvbiIsImJhY2tncm91bmQiLCJpbnNldCIsInBvaW50ZXJFdmVudHMiLCJzb3VyY2VzIiwibXQiLCJwdCIsImJvcmRlclRvcCIsInNvdXJjZSIsImluZGV4IiwicmVsZXZhbmNlIiwiY2xhc3NOYW1lIiwiZmxleFdyYXAiLCJ0aW1lc3RhbXAiLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJob3VyIiwibWludXRlIiwic2l6ZSIsIm9uQ2xpY2siLCJtZW1vIiwiYm91bmNlIiwic2hpbW1lciIsIkNoYXRib3RUeXBpbmdJbmRpY2F0b3IiLCJhcmlhTGFiZWwiLCJhdmF0YXJMYWJlbCIsImZyb20iLCJ0cmFuc2Zvcm0iLCJ0byIsInJvbGUiLCJiYWNrZ3JvdW5kU2l6ZSIsInpJbmRleCIsImFuaW1hdGlvbkRlbGF5IiwiQnV0dG9uIiwiRmFkZSIsIktleWJvYXJkQXJyb3dEb3duSWNvbiIsInN0eWxlZCIsIk1lc3NhZ2VDb250YWluZXIiLCJ0aGVtZSIsImZsZXgiLCJzcGFjaW5nIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwic2Nyb2xsQmVoYXZpb3IiLCJDaGF0Ym90TWVzc2FnZUxpc3QiLCJjb250YWluZXJSZWYiLCJib3R0b21SZWYiLCJvblNjcm9sbCIsIm1lc3NhZ2VzIiwiY2hpbGRyZW5BYm92ZUVuZCIsImlzTG9hZGluZyIsImxpdmVBZ2VudFR5cGluZyIsInNob3dOZXdNZXNzYWdlcyIsIm9uSnVtcFRvTGF0ZXN0IiwicmVmIiwiaW4iLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJzdGFydEljb24iLCJ0ZXh0VHJhbnNmb3JtIiwidXNlQ2FsbGJhY2siLCJCT1RUT01fVEhSRVNIT0xEX1BYIiwidXNlU21hcnRDaGF0U2Nyb2xsIiwiY2hhdEhpc3RvcnkiLCJzdGlja1RvQm90dG9tUmVmIiwicHJldkNvdW50UmVmIiwic2V0U2hvd05ld01lc3NhZ2VzIiwiZWwiLCJkaXN0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0IiwiZ3JldyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJzY3JvbGxUb0JvdHRvbSIsIkJhZGdlIiwiQ2lyY3VsYXJQcm9ncmVzcyIsIklucHV0QWRvcm5tZW50IiwiQ2hpcCIsIlN0YWNrIiwidXNlVGhlbWUiLCJTZW5kSWNvbiIsIkNsb3NlSWNvbiIsIlNtYXJ0VG95SWNvbiIsIkNoYXRCdWJibGVPdXRsaW5lSWNvbiIsIkF0dGFjaEZpbGVJY29uIiwiUGVyc29uSWNvbiIsIlJlY29yZFZvaWNlT3Zlckljb24iLCJFbWFpbEljb24iLCJ1c2VEaXNwYXRjaCIsInVzZVNlbGVjdG9yIiwicmVzb2x2ZUNoYXRib3RXaWRnZXRWaXNpYmxlIiwiZnJvbUNhY2hlIiwiY2hhdGJvdFZpc2libGUiLCJ0b0xvd2VyQ2FzZSIsImZhZGVJbiIsInNsaWRlVXAiLCJwdWxzZUFuaW1hdGlvbiIsInJpcHBsZSIsIkNoYXRXaW5kb3ciLCJtYXhIZWlnaHQiLCJicmVha3BvaW50cyIsImRvd24iLCJDaGF0SGVhZGVyIiwidGV4dGNvbG9yIiwicGFsZXR0ZSIsInByaW1hcnkiLCJtYWluIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwibWluSGVpZ2h0IiwibWFyZ2luTGVmdCIsIkNoYXRJbnB1dCIsIklucHV0RmllbGQiLCJtYXJnaW5SaWdodCIsIkNoYXRUb2dnbGUiLCJkYXJrIiwiRm9ybVJlc3BvbnNlIiwibWFyZ2luQm90dG9tIiwiRm9ybUZpZWxkIiwiTUFYX1JFVFJJRVMiLCJUSU1FT1VUX0RVUkFUSU9OIiwiZ2V0Qm90SWNvbiIsInNyYyIsImFsdCIsInN0eWxlIiwiQ2hhdGJvdCIsImlzT3BlbiIsInNldElzT3BlbiIsImlucHV0Iiwic2V0SW5wdXQiLCJzZXRDaGF0SGlzdG9yeSIsInNldElzTG9hZGluZyIsImhhbmRsZVN0cmVhbUNvbXBsZXRlIiwibXNnSWQiLCJwcmV2IiwidXNlcklkIiwidG9TdHJpbmciLCJzdWJzdHIiLCJzaG93VXNlckZvcm0iLCJzZXRTaG93VXNlckZvcm0iLCJ1c2VyRm9ybURhdGEiLCJzZXRVc2VyRm9ybURhdGEiLCJlbWFpbCIsInBob25lIiwiZm9ybVN0ZXAiLCJzZXRGb3JtU3RlcCIsInJlc3BvbnNlQ291bnQiLCJzZXRSZXNwb25zZUNvdW50IiwibGVhZENhcHR1cmVPZmZlcmVkIiwic2V0TGVhZENhcHR1cmVPZmZlcmVkIiwibGVhZENhcHR1cmVEZWNsaW5lZCIsInNldExlYWRDYXB0dXJlRGVjbGluZWQiLCJjb250YWN0Rm9ybUVycm9yIiwic2V0Q29udGFjdEZvcm1FcnJvciIsInNob3dRdWlja1JlcGxpZXMiLCJzZXRTaG93UXVpY2tSZXBsaWVzIiwiZGlzcGF0Y2giLCJjaGF0Ym90VXNlclNldHRpbmciLCJTZXRDaGF0Ym90VXNlclNldHRpbmciLCJzaG93TGl2ZUNoYXRFbWFpbEZvcm0iLCJzZXRTaG93TGl2ZUNoYXRFbWFpbEZvcm0iLCJsaXZlQ2hhdEVtYWlsIiwic2V0TGl2ZUNoYXRFbWFpbCIsImxpdmVDaGF0RW1haWxFcnJvciIsInNldExpdmVDaGF0RW1haWxFcnJvciIsImxpdmVDaGF0UmVxdWVzdGVkIiwic2V0TGl2ZUNoYXRSZXF1ZXN0ZWQiLCJsaXZlQ2hhdFJlcXVlc3RJZCIsInNldExpdmVDaGF0UmVxdWVzdElkIiwibGl2ZUNoYXRBY2NlcHRlZCIsInNldExpdmVDaGF0QWNjZXB0ZWQiLCJsaXZlQ2hhdENvbm5lY3RpbmciLCJzZXRMaXZlQ2hhdENvbm5lY3RpbmciLCJzZXRMaXZlQWdlbnRUeXBpbmciLCJ3c0xpdmVDaGF0UmVmIiwibGl2ZUNoYXRBY2NlcHRlZFJlZiIsImN1c3RvbWVyVHlwaW5nSWRsZVRpbWVyUmVmIiwiY3VzdG9tZXJUeXBpbmdTZW50VHJ1ZVJlZiIsImNsZWFyQ3VzdG9tZXJUeXBpbmdJZGxlVGltZXIiLCJzZW5kQ3VzdG9tZXJUeXBpbmciLCJ0eXBpbmciLCJ3cyIsInJlYWR5U3RhdGUiLCJXZWJTb2NrZXQiLCJPUEVOIiwic2VuZCIsIl8iLCJmbHVzaEN1c3RvbWVyVHlwaW5nU3RvcHBlZCIsImhhbmRsZUNoYXRJbnB1dENoYW5nZSIsInRhcmdldCIsImRhdGFUb2tlbiIsImF1dGhvcml6YXRpb24iLCJ1c2VyIiwiaXNfY2hhdGJvdF9sb2FkIiwiY2hhdGJvdCIsImNoYXRib3RTdHlsZXMiLCJzZXRDaGF0Ym90U3R5bGVzIiwiaXNWaXNpYmxlIiwic2V0SXNWaXNpYmxlIiwiY2hlY2tWaXNpYmlsaXR5Iiwib25DdXN0b20iLCJhZGRFdmVudExpc3RlbmVyIiwiZG9jdW1lbnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidG9JU09TdHJpbmciLCJ3ZWxjb21lTXNnIiwiaW5pdF9tc2ciLCJib3RfYmdfY29sb3IiLCJib3RfdGV4dF9jb2xvciIsImJvdF9pY29uIiwicGxhY2Vob2xkZXJfdGV4dCIsImJvdF9uYW1lIiwiaGFuZGxlU3RhcnRMaXZlQ2hhdENsaWNrIiwiY29ubmVjdExpdmVDaGF0V3MiLCJjb21wYW55TmFtZSIsImN1c3RvbWVySWQiLCJlbWFpbElkIiwiY29uc29sZSIsImxvZyIsImJhc2UiLCJ3c1VybCIsIm9ub3BlbiIsIm9ubWVzc2FnZSIsImV2ZW50IiwibXNnIiwicmVxdWVzdF9pZCIsIm5vdyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImVyciIsIm9uY2xvc2UiLCJjb2RlIiwib25lcnJvciIsImhhbmRsZVN0YXJ0TGl2ZUNoYXQiLCJlbWFpbFJlZ2V4IiwicmVhbHRpbWVDb21wYW55TmFtZSIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImNsb3NlIiwiaGFuZGxlU3VibWl0IiwicmV0cnlDb3VudCIsImZvcmNlZFRleHQiLCJyZXRyeVVzZXJJZCIsInRleHRUb1NlbmQiLCJ1c2VyTXNnSWQiLCJ1c2VyTWVzc2FnZSIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJ0aW1lb3V0SWQiLCJhYm9ydCIsIkVycm9yIiwiYXV0aFBheWxvYWQiLCJzZXNzaW9uX2lkIiwiand0X3Rva2VuIiwibGljZW5zZV9rZXkiLCJkb21haW5OYW1lIiwiZG9tYWluX25hbWUiLCJyZXF1ZXN0RGF0YSIsImNvbnZlcnNhdGlvbl9pZCIsImNvbnRleHQiLCJlbmNyeXB0ZWRBdXRoRGF0YSIsImVuY3J5cHRlZFJlcXVlc3REYXRhIiwicXVlcnkiLCJlbmNyeXB0ZWRfZGF0YSIsInNpZ25hbCIsInJhd1Jlc3BvbnNlIiwicGFyc2VkUmVzcG9uc2UiLCJlcnJvcnMiLCJlcnJvck1zZyIsImRlY3J5cHRFcnJvciIsIm1hdGNoZXMiLCJib3RSZXNwb25zZVRleHQiLCJmb3JFYWNoIiwiYm90SWQiLCJkZXJpdmVkU291cmNlcyIsImJvdE1lc3NhZ2UiLCJ0aW1lb3V0TWVzc2FnZSIsImluY2x1ZGVzIiwicmV0cnlNZXNzYWdlIiwiaGFuZGxlUmV0cnkiLCJxdWlja1JlcGx5T3B0aW9ucyIsImxhYmVsIiwiaGFuZGxlUXVpY2tSZXBseSIsInFyIiwib3BlbkNvbnRhY3RGb3JtIiwiY2xvc2VDb250YWN0Rm9ybSIsImNvbXBsZXRlQ29udGFjdENhcHR1cmUiLCJzdWNjZXNzTWVzc2FnZSIsImhhbmRsZUNvbnRhY3RGaWVsZFN1Ym1pdCIsImZpZWxkVHlwZSIsInJhd1ZhbHVlIiwibm9ybWFsaXplZFZhbHVlIiwicGhvbmVSZWdleCIsInN0b3JlRm9ybURhdGEiLCJoYW5kbGVLZXlQcmVzcyIsInNoaWZ0S2V5IiwiZmllbGRWYWx1ZSIsInVzZXJfaWQiLCJlbmNyeXB0ZWRQYXlsb2FkIiwiZmllbGRfdHlwZSIsImZpZWxkX3ZhbHVlIiwib3ZlcmxhcCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRvcCIsImJhY2tkcm9wRmlsdGVyIiwiZGlyZWN0aW9uIiwicmVwbHkiLCJjbGlja2FibGUiLCJvbktleURvd24iLCJzdG9wUHJvcGFnYXRpb24iLCJJbnB1dFByb3BzIiwic3RhcnRBZG9ybm1lbnQiLCJvbkJsdXIiLCJhdXRvQ29tcGxldGUiLCJhdXRvQ29ycmVjdCIsImF1dG9DYXBpdGFsaXplIiwic3BlbGxDaGVjayIsImlucHV0UHJvcHMiLCJmb3JtIiwiZW5kQWRvcm5tZW50IiwicGxhY2VtZW50IiwiYXJyb3ciLCJkaXNhYmxlZCIsIm5vcm1hbGl6ZVVzZXJJbmZvRGF0YSIsInJhdyIsInBhcnNlZCIsInVzZXJEYXRhIiwiaXNMb2dnZWRJbiIsIkdldFVzZXJMb2FkZXIiLCJpc1ZlcmlmeSIsImhhc0luaXRMb2FkIiwiZmV0Y2hVc2VyRGF0YSIsImVuY29kZSIsInJlamVjdFdpdGhWYWx1ZSIsImVuY3J5cHRlZF9wYXlsb2FkIiwidXNlclNsaWNlIiwic2V0VXNlckRhdGEiLCJtZXJnZVVzZXJGaWVsZHMiLCJzZXRJc0xvZ2dlZEluIiwiTG9naW5Vc2VyIiwidmVyaWZpZWQiLCJsb2dvdXRVc2VyIiwic2V0QXV0aFRva2VuIiwic2V0SW5pdExvYWQiLCJCb29sZWFuIiwiYWN0aW9ucyIsImRlcml2ZVN1YnNjcmlwdGlvbkZyb21Vc2VyIiwibXMiLCJtZW1iZXJzaGlwX3N0YXR1cyIsInN1YnNjcmliZWQiLCJpc19zdWJzY3JpYmVkIiwic3Vic2NyaXB0aW9uX2FjdGl2ZSIsIk51bWJlciIsImlzU3Vic2NyaWJlZCIsInN1YnNjcmlwdGlvbl9tZXNzYWdlIiwibWVtYmVyc2hpcF9tZXNzYWdlIiwiU3Vic2NyaWJlVXNlciIsInN1YnNjcmlwdGlvbl9kZXRhaWxzIiwicGxhbl9uYW1lIiwiY3VycmVudF9wbGFuIiwic3Vic2NyaXB0aW9uX3RpZXIiLCJjaGVja1N1YnNjcmlwdGlvbiIsImdldFN0YXRlIiwidXNlclN0YXRlIiwiVmFyaWZpY2F0aW9uIiwiZW5jcnlwdGVkUmVzcG9uc2UiLCJkZWNyeXB0ZWRVc2VyRGF0YSIsImZ1bGxSZXNwb25zZSIsInN1YnNjcmlwdGlvblNsaWNlIiwiY2xlYXJFcnJvciIsInJlc2V0TG9hZGluZyIsInJlc2V0U3Vic2NyaWJlIiwidXNlcl9kYXRhIiwiaXNfY2hhdF9vcGVuIiwic2NyZWVuUGFnZSIsImNoYXRTY3JlZW4iLCJoZWFkZXIiLCJjaGF0Qm90U2V0dGluZyIsImNoYXRCb3RBZG1pbiIsIlRva2VuIiwiaXNfUXVlcnlfU3VibWl0IiwibG9hZF9jaGF0X2hpc3RvcnkiLCJpc1JlY29yZGluZyIsIldlYkJvdCIsInNldENoYXRPcGVuIiwic2V0U2NyZWVuUGFnZSIsImN1cnJlbnRTY3JlZW4iLCJzZXRDaGF0U2NyZWVuIiwiZGVsZXRlQ2hhdFNjcmVlbiIsInNldE1lc3NhZ2VzIiwic2V0Q2hhdGJvdFNldHRpbmciLCJzZXRDaGF0Ym90QWRtaW4iLCJzZXRTdWJtaXQiLCJsb2FkSGlzdG95Iiwic2V0UmVjb3JkaW5nIiwiY29uZmlndXJlU3RvcmUiLCJzdWJzY3JpcHRpb25SZWR1Y2VyIiwiQ2hhdGJvdFJlZHVjZXIiLCJ1c2VyUmVkdWNlciIsIldlYkJvdFJlZHVjZXIiLCJzdG9yZSIsInN1YnNjcmlwdGlvbiIsIndlYkJvdCIsInJlbmRlciIsIlByb3ZpZGVyIiwic2hvdWxkUmVuZGVyQ2hhdGJvdCIsInciLCJzdG9yZWRWYWx1ZSIsInJlbmRlckNoYXRib3QiLCJjb250YWluZXIiLCJoYW5kbGVBZ2VudE1vZGVDaGFuZ2UiLCJjaGF0Ym90Um9vdCIsImdldEVsZW1lbnRCeUlkIiwiY29udGFpbmVycyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGF0Ym90Q29udGFpbmVycyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2320\n")},2325:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(ownerDocument)\n});\nfunction ownerDocument(node){\n return node && node.ownerDocument || document;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMyNS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBZTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9vd25lckRvY3VtZW50L293bmVyRG9jdW1lbnQuanM/YTc4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvd25lckRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2325\n")},2501:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(useControlled)\n});\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\n\nfunction useControlled({\n controlled,\n default:defaultProp,\n name,\n state='value'\n}){\n // isControlled is ignored in the hook dependency lists as it should never change.\n const{\n current:isControlled\n}=react__WEBPACK_IMPORTED_MODULE_0__.useRef(controlled !==undefined);\n const [valueState,setValue]=react__WEBPACK_IMPORTED_MODULE_0__.useState(defaultProp);\n const value=isControlled ? controlled :valueState;\n const setValueIfUncontrolled=react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newValue=>{\n if (!isControlled){\n setValue(newValue);\n}\n},[]);\n return [value,setValueIfUncontrolled];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUwMS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVBO0FBQytCO0FBQ2hCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLHlDQUFZO0FBQ2xCLGlDQUFpQywyQ0FBYztBQUMvQztBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBYzFDO0FBQ0gsaUNBQWlDLDhDQUFpQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUNvbnRyb2xsZWQvdXNlQ29udHJvbGxlZC5qcz85NWUwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MsIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZCh7XG4gIGNvbnRyb2xsZWQsXG4gIGRlZmF1bHQ6IGRlZmF1bHRQcm9wLFxuICBuYW1lLFxuICBzdGF0ZSA9ICd2YWx1ZSdcbn0pIHtcbiAgLy8gaXNDb250cm9sbGVkIGlzIGlnbm9yZWQgaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0cyBhcyBpdCBzaG91bGQgbmV2ZXIgY2hhbmdlLlxuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYoY29udHJvbGxlZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgW3ZhbHVlU3RhdGUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKGRlZmF1bHRQcm9wKTtcbiAgY29uc3QgdmFsdWUgPSBpc0NvbnRyb2xsZWQgPyBjb250cm9sbGVkIDogdmFsdWVTdGF0ZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlICR7aXNDb250cm9sbGVkID8gJycgOiAndW4nfWNvbnRyb2xsZWQgJHtzdGF0ZX0gc3RhdGUgb2YgJHtuYW1lfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLmAsICdFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4nLCBgRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAke25hbWV9IGAgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuJywgXCJUaGUgbmF0dXJlIG9mIHRoZSBzdGF0ZSBpcyBkZXRlcm1pbmVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBJdCdzIGNvbnNpZGVyZWQgY29udHJvbGxlZCBpZiB0aGUgdmFsdWUgaXMgbm90IGB1bmRlZmluZWRgLlwiLCAnTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cyddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbc3RhdGUsIG5hbWUsIGNvbnRyb2xsZWRdKTtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgICB9ID0gUmVhY3QudXNlUmVmKGRlZmF1bHRQcm9wKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc0NvbnRyb2xsZWQgJiYgIU9iamVjdC5pcyhkZWZhdWx0VmFsdWUsIGRlZmF1bHRQcm9wKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCAke3N0YXRlfSBzdGF0ZSBvZiBhbiB1bmNvbnRyb2xsZWQgJHtuYW1lfSBhZnRlciBiZWluZyBpbml0aWFsaXplZC4gYCArIGBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgb3B0IHRvIHVzZSBhIGNvbnRyb2xsZWQgJHtuYW1lfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW0pTT04uc3RyaW5naWZ5KGRlZmF1bHRQcm9wKV0pO1xuICB9XG4gIGNvbnN0IHNldFZhbHVlSWZVbmNvbnRyb2xsZWQgPSBSZWFjdC51c2VDYWxsYmFjayhuZXdWYWx1ZSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgcmV0dXJuIFt2YWx1ZSwgc2V0VmFsdWVJZlVuY29udHJvbGxlZF07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2501\n")},2532:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n GlobalStyles:()=>(GlobalStyles.A),\n StyledEngineProvider:()=>(StyledEngineProvider),\n ThemeContext:()=>(emotion_element_f0de968e_browser_esm.T),\n css:()=>(emotion_react_browser_esm.AH),\n \"default\":()=>(styled_engine_styled),\n internal_processStyles:()=>(internal_processStyles),\n keyframes:()=>(emotion_react_browser_esm.i7)\n});\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js\nvar emotion_element_f0de968e_browser_esm=__webpack_require__(4684);\n// EXTERNAL MODULE:./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js+2 modules\nvar emotion_serialize_esm=__webpack_require__(3174);\n// EXTERNAL MODULE:./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js\nvar emotion_use_insertion_effect_with_fallbacks_browser_esm=__webpack_require__(1287);\n// EXTERNAL MODULE:./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js\nvar emotion_utils_browser_esm=__webpack_require__(41);\n// EXTERNAL MODULE:external \"React\"\nvar external_React_=__webpack_require__(1594);\n// EXTERNAL MODULE:./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js\nvar emotion_memoize_esm=__webpack_require__(6289);\n;// ./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js\n\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;// https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid=(0,emotion_memoize_esm.A)(function (prop){\n return reactPropsRegex.test(prop) || prop.charCodeAt(0)===111\n \n && prop.charCodeAt(1)===110\n \n && prop.charCodeAt(2) < 91;\n}\n\n);\n\n\n\n;// ./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js\n\n\n\n\n\n\n\n\nvar isDevelopment=false;\n\nvar testOmitPropsOnStringTag=isPropValid;\n\nvar testOmitPropsOnComponent=function testOmitPropsOnComponent(key){\n return key !=='theme';\n};\n\nvar getDefaultShouldForwardProp=function getDefaultShouldForwardProp(tag){\n return typeof tag==='string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0)>96 ? testOmitPropsOnStringTag:testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps=function composeShouldForwardProps(tag,options,isReal){\n var shouldForwardProp;\n\n if (options){\n var optionsShouldForwardProp=options.shouldForwardProp;\n shouldForwardProp=tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName){\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n}:optionsShouldForwardProp;\n}\n\n if (typeof shouldForwardProp !=='function' && isReal){\n shouldForwardProp=tag.__emotion_forwardProp;\n}\n\n return shouldForwardProp;\n};\n\nvar Insertion=function Insertion(_ref){\n var cache=_ref.cache,\n serialized=_ref.serialized,\n isStringTag=_ref.isStringTag;\n (0,emotion_utils_browser_esm.SF)(cache,serialized,isStringTag);\n (0,emotion_use_insertion_effect_with_fallbacks_browser_esm.s)(function (){\n return (0,emotion_utils_browser_esm.sk)(cache,serialized,isStringTag);\n});\n\n return null;\n};\n\nvar createStyled=function createStyled(tag,options){\n\n var isReal=tag.__emotion_real===tag;\n var baseTag=isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !==undefined){\n identifierName=options.label;\n targetClassName=options.target;\n}\n\n var shouldForwardProp=composeShouldForwardProps(tag,options,isReal);\n var defaultShouldForwardProp=shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs=!defaultShouldForwardProp('as');\n return function (){\n // eslint-disable-next-line prefer-rest-params\n var args=arguments;\n var styles=isReal && tag.__emotion_styles !==undefined ? tag.__emotion_styles.slice(0) :[];\n\n if (identifierName !==undefined){\n styles.push(\"label:\"+identifierName+\";\");\n}\n\n if (args[0]==null || args[0].raw===undefined){\n // eslint-disable-next-line prefer-spread\n styles.push.apply(styles,args);\n}else{\n var templateStringsArr=args[0];\n\n styles.push(templateStringsArr[0]);\n var len=args.length;\n var i=1;\n\n for (;i < len;i++){\n\n styles.push(args[i],templateStringsArr[i]);\n}\n}\n\n var Styled=(0,emotion_element_f0de968e_browser_esm.w)(function (props,cache,ref){\n var FinalTag=shouldUseAs && props.as || baseTag;\n var className='';\n var classInterpolations=[];\n var mergedProps=props;\n\n if (props.theme==null){\n mergedProps={};\n\n for (var key in props){\n mergedProps[key]=props[key];\n}\n\n mergedProps.theme=external_React_.useContext(emotion_element_f0de968e_browser_esm.T);\n}\n\n if (typeof props.className==='string'){\n className=(0,emotion_utils_browser_esm.Rk)(cache.registered,classInterpolations,props.className);\n}else if (props.className !=null){\n className=props.className+\" \";\n}\n\n var serialized=(0,emotion_serialize_esm.J)(styles.concat(classInterpolations),cache.registered,mergedProps);\n className+=cache.key+\"-\"+serialized.name;\n\n if (targetClassName !==undefined){\n className+=\" \"+targetClassName;\n}\n\n var finalShouldForwardProp=shouldUseAs && shouldForwardProp===undefined ? getDefaultShouldForwardProp(FinalTag) :defaultShouldForwardProp;;\n\n for (var _key in props){\n if (shouldUseAs && _key==='as') continue;\n\n if (finalShouldForwardProp(_key)){\n newProps[_key]=props[_key];\n}\n}\n\n newProps.className=className;\n\n if (ref){\n newProps.ref=ref;\n}\n\n return external_React_.createElement(external_React_.Fragment,null,external_React_.createElement(Insertion,{\n cache:cache,\n serialized:serialized,\n isStringTag:typeof FinalTag==='string'\n}),external_React_.createElement(FinalTag,newProps));\n});\n Styled.displayName=identifierName !==undefined ? identifierName :\"Styled(\"+(typeof baseTag==='string' ? baseTag :baseTag.displayName || baseTag.name || 'Component')+\")\";\n Styled.defaultProps=tag.defaultProps;\n Styled.__emotion_real=Styled;\n Styled.__emotion_base=baseTag;\n Styled.__emotion_styles=styles;\n Styled.__emotion_forwardProp=shouldForwardProp;\n Object.defineProperty(Styled,'toString',{\n value:function value(){\n if (targetClassName===undefined && isDevelopment){\n return 'NO_COMPONENT_SELECTOR';\n}\n\n return \".\"+targetClassName;\n}\n});\n\n Styled.withComponent=function (nextTag,nextOptions){\n var newStyled=createStyled(nextTag,(0,esm_extends.A)({},options,nextOptions,{\n shouldForwardProp:composeShouldForwardProps(Styled,nextOptions,true)\n}));\n return newStyled.apply(void 0,styles);\n};\n\n return Styled;\n};\n};\n\n\n\n;// ./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js\n\n\n\n\n\n\n\n\n\nvar tags=['a','abbr','address','area','article','aside','audio','b','base','bdi','bdo','big','blockquote','body','br','button','canvas','caption','cite','code','col','colgroup','data','datalist','dd','del','details','dfn','dialog','div','dl','dt','em','embed','fieldset','figcaption','figure','footer','form','h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','i','iframe','img','input','ins','kbd','keygen','label','legend','li','link','main','map','mark','marquee','menu','menuitem','meta','meter','nav','noscript','object','ol','optgroup','option','output','p','param','picture','pre','progress','q','rp','rt','ruby','s','samp','script','section','select','small','source','span','strong','style','sub','summary','sup','table','tbody','td','textarea','tfoot','th','thead','time','title','tr','track','u','ul','var','video','wbr',// SVG\n'circle','clipPath','defs','ellipse','foreignObject','g','image','line','linearGradient','mask','path','pattern','polygon','polyline','radialGradient','rect','stop','svg','text','tspan'];\n\n// bind it to avoid mutating the original function\nvar styled=createStyled.bind(null);\ntags.forEach(function (tagName){\n styled[tagName]=styled(tagName);\n});\n\n\n\n// EXTERNAL MODULE:./node_modules/@emotion/react/dist/emotion-react.browser.esm.js\nvar emotion_react_browser_esm=__webpack_require__(7437);\n// EXTERNAL MODULE:./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js+7 modules\nvar emotion_cache_browser_esm=__webpack_require__(5655);\n// EXTERNAL MODULE:./node_modules/react/jsx-runtime.js\nvar jsx_runtime=__webpack_require__(4848);\n;// ./node_modules/@mui/styled-engine/StyledEngineProvider/StyledEngineProvider.js\n'use client';\n\n\n\n\n\n\n// prepend:true moves MUI styles to the top of the <head>so they're loaded first.\n// It allows developers to easily override MUI styles with other styling solutions,like CSS modules.\n\nlet cache;\nif (typeof document==='object'){\n cache=(0,emotion_cache_browser_esm.A)({\n key:'css',\n prepend:true\n});\n}\nfunction StyledEngineProvider(props){\n const{\n injectFirst,\n children\n}=props;\n return injectFirst && cache ? (0,jsx_runtime.jsx)(emotion_element_f0de968e_browser_esm.C,{\n value:cache,\n children:children\n}):children;\n}\n false ? 0 :void 0;\n// EXTERNAL MODULE:./node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js\nvar GlobalStyles=__webpack_require__(9940);\n;// ./node_modules/@mui/styled-engine/index.js\n\n'use client';\n\n\n\nfunction styled_engine_styled(tag,options){\n const stylesFactory=styled(tag,options);\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst internal_processStyles=(tag,processor)=>{\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref:https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)){\n tag.__emotion_styles=processor(tag.__emotion_styles);\n}\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUzMi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF1Qzs7QUFFdkM7QUFDQSw2aElBQTZoSTs7QUFFN2hJLGlDQUFpQyxzQ0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVrQzs7O0FDZndCO0FBQ007QUFDWDtBQUNtRDtBQUNyQjtBQUNwRDtBQUNrQjs7QUFFakQ7O0FBRUEsK0JBQStCLFdBQVc7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvREFBYztBQUNoQixFQUFFLDJHQUF3QztBQUMxQyxXQUFXLGtEQUFZO0FBQ3ZCLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWEsU0FBUzs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiwwQ0FBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCLDBCQUFnQixDQUFDLHNDQUFZO0FBQ3pEOztBQUVBO0FBQ0Esb0JBQW9CLHlEQUFtQjtBQUN2QyxRQUFRO0FBQ1I7QUFDQTs7QUFFQSx1QkFBdUIsZ0RBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLDZCQUFtQixDQUFDLHdCQUFjLHFCQUFxQiw2QkFBbUI7QUFDcEc7QUFDQTtBQUNBO0FBQ0EsT0FBTyxnQkFBZ0IsNkJBQW1CO0FBQzFDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsNENBQTRDLDhCQUFRLEdBQUc7QUFDdkQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRW1DOzs7QUMxS3dDO0FBQ25DO0FBQ2hCO0FBQ0k7QUFDMEI7QUFDOUI7QUFDVDtBQUNpQjs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNBO0FBQ0EsQ0FBQzs7QUFFNEI7Ozs7Ozs7OztBQ2xCN0I7O0FBRStCO0FBQ0k7QUFDWTtBQUNOOztBQUV6QztBQUNBO0FBQ2dEO0FBQ2hEO0FBQ0E7QUFDQSxVQUFVLDRDQUFXO0FBQ3JCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSiw2Q0FBNkMsbUJBQUksQ0FBQyxzQ0FBYTtBQUMvRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsTUFBcUMsR0FBRyxDQVd2QyxDQUFDLFM7Ozs7QUN0Q0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUN1QztBQUN4QixTQUFTLG9CQUFNO0FBQzlCLHdCQUF3QixNQUFRO0FBQ2hDLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBVTFDO0FBQ0g7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQzhEO0FBQ1ciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvZW1vdGlvbi1pcy1wcm9wLXZhbGlkLmVzbS5qcz85MjkzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcz8wZDk3Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9kaXN0L2Vtb3Rpb24tc3R5bGVkLmJyb3dzZXIuZXNtLmpzP2U1MjEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL1N0eWxlZEVuZ2luZVByb3ZpZGVyL1N0eWxlZEVuZ2luZVByb3ZpZGVyLmpzPzU5ZjUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL2luZGV4LmpzPzAzMzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFiYnJ8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZGlzYWJsZVJlbW90ZVBsYXliYWNrfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGVudGVyS2V5SGludHxmZXRjaHByaW9yaXR5fGZldGNoUHJpb3JpdHl8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgeyB3aXRoRW1vdGlvbkNhY2hlLCBUaGVtZUNvbnRleHQgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaXNQcm9wVmFsaWQgZnJvbSAnQGVtb3Rpb24vaXMtcHJvcC12YWxpZCc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgPSBpc1Byb3BWYWxpZDtcblxudmFyIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCA9IGZ1bmN0aW9uIHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudChrZXkpIHtcbiAgcmV0dXJuIGtleSAhPT0gJ3RoZW1lJztcbn07XG5cbnZhciBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBmdW5jdGlvbiBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJiAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2ID8gdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIDogdGVzdE9taXRQcm9wc09uQ29tcG9uZW50O1xufTtcbnZhciBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzID0gZnVuY3Rpb24gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCkge1xuICB2YXIgc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID0gb3B0aW9ucy5zaG91bGRGb3J3YXJkUHJvcDtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wID8gZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICByZXR1cm4gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcChwcm9wTmFtZSkgJiYgb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wKHByb3BOYW1lKTtcbiAgICB9IDogb3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzaG91bGRGb3J3YXJkUHJvcCAhPT0gJ2Z1bmN0aW9uJyAmJiBpc1JlYWwpIHtcbiAgICBzaG91bGRGb3J3YXJkUHJvcCA9IHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3A7XG4gIH1cblxuICByZXR1cm4gc2hvdWxkRm9yd2FyZFByb3A7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgY3JlYXRlU3R5bGVkID0gZnVuY3Rpb24gY3JlYXRlU3R5bGVkKHRhZywgb3B0aW9ucykge1xuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkID8gdGFnLl9fZW1vdGlvbl9zdHlsZXMuc2xpY2UoMCkgOiBbXTtcblxuICAgIGlmIChpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzBdLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuICAgICAgc3R5bGVzLnB1c2guYXBwbHkoc3R5bGVzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IGFyZ3NbMF07XG5cbiAgICAgIHN0eWxlcy5wdXNoKHRlbXBsYXRlU3RyaW5nc0FyclswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiLlwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgU3R5bGVkLndpdGhDb21wb25lbnQgPSBmdW5jdGlvbiAobmV4dFRhZywgbmV4dE9wdGlvbnMpIHtcbiAgICAgIHZhciBuZXdTdHlsZWQgPSBjcmVhdGVTdHlsZWQobmV4dFRhZywgX2V4dGVuZHMoe30sIG9wdGlvbnMsIG5leHRPcHRpb25zLCB7XG4gICAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKFN0eWxlZCwgbmV4dE9wdGlvbnMsIHRydWUpXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gbmV3U3R5bGVkLmFwcGx5KHZvaWQgMCwgc3R5bGVzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFN0eWxlZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZVN0eWxlZCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4uL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAncmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcblxudmFyIHRhZ3MgPSBbJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2Jhc2UnLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVsJywgJ2RldGFpbHMnLCAnZGZuJywgJ2RpYWxvZycsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW0nLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAna2V5Z2VuJywgJ2xhYmVsJywgJ2xlZ2VuZCcsICdsaScsICdsaW5rJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbWV0ZXInLCAnbmF2JywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdvcHRncm91cCcsICdvcHRpb24nLCAnb3V0cHV0JywgJ3AnLCAncGFyYW0nLCAncGljdHVyZScsICdwcmUnLCAncHJvZ3Jlc3MnLCAncScsICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc21hbGwnLCAnc291cmNlJywgJ3NwYW4nLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3dicicsIC8vIFNWR1xuJ2NpcmNsZScsICdjbGlwUGF0aCcsICdkZWZzJywgJ2VsbGlwc2UnLCAnZm9yZWlnbk9iamVjdCcsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxHcmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3ZnJywgJ3RleHQnLCAndHNwYW4nXTtcblxuLy8gYmluZCBpdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbnZhciBzdHlsZWQgPSBjcmVhdGVTdHlsZWQuYmluZChudWxsKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICBzdHlsZWRbdGFnTmFtZV0gPSBzdHlsZWQodGFnTmFtZSk7XG59KTtcblxuZXhwb3J0IHsgc3R5bGVkIGFzIGRlZmF1bHQgfTtcbiIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuXG4vLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5sZXQgY2FjaGU7XG5pZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICBjYWNoZSA9IGNyZWF0ZUNhY2hlKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovX2pzeChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDsiLCIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNi4xNFxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBlbVN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBjb25zdCBzdHlsZXNGYWN0b3J5ID0gZW1TdHlsZWQodGFnLCBvcHRpb25zKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKC4uLnN0eWxlcykgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBgXCIke3RhZ31cImAgOiAnY29tcG9uZW50JztcbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzRmFjdG9yeSguLi5zdHlsZXMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0eWxlc0ZhY3Rvcnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBjb25zdCBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gKHRhZywgcHJvY2Vzc29yKSA9PiB7XG4gIC8vIEVtb3Rpb24gYXR0YWNoZXMgYWxsIHRoZSBzdHlsZXMgYXMgYF9fZW1vdGlvbl9zdHlsZXNgLlxuICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8xNmQ5NzFkMGRhMjI5NTk2ZDZiY2MzOWQyODJiYTk3NTNjOWVlN2NmL3BhY2thZ2VzL3N0eWxlZC9zcmMvYmFzZS5qcyNMMTg2XG4gIGlmIChBcnJheS5pc0FycmF5KHRhZy5fX2Vtb3Rpb25fc3R5bGVzKSkge1xuICAgIHRhZy5fX2Vtb3Rpb25fc3R5bGVzID0gcHJvY2Vzc29yKHRhZy5fX2Vtb3Rpb25fc3R5bGVzKTtcbiAgfVxufTtcbmV4cG9ydCB7IFRoZW1lQ29udGV4dCwga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0eWxlZEVuZ2luZVByb3ZpZGVyIH0gZnJvbSAnLi9TdHlsZWRFbmdpbmVQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2532\n")},2702:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"\n}),\'Refresh\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcwMi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvUmVmcmVzaC5qcz84YWVlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXCJ1c2UgY2xpZW50XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICBkOiBcIk0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjR6XCJcbn0pLCAnUmVmcmVzaCcpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2702\n')},2765:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _createTheme__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(6544);\n'use client';\n\n\nconst defaultTheme=(0,_createTheme__WEBPACK_IMPORTED_MODULE_0__ .A)();\n const __WEBPACK_DEFAULT_EXPORT__=(defaultTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc2NS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRXdDO0FBQ3hDLHFCQUFxQixpRUFBVztBQUNoQyxpRUFBZSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzPzhmOTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2765\n")},2778:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1529);\n'use client';\n\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_useEnhancedEffect__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc3OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTZEO0FBQzdELGlFQUFlLDZFQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QuanM/ZWFhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICdAbXVpL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2778\n")},2923:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n\'use client\';\n\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar React=_interopRequireWildcard(__webpack_require__(1594));\nvar _styledEngine=__webpack_require__(2532);\nfunction _getRequireWildcardCache(e){if ("function" !=typeof WeakMap) return null;var r=new WeakMap(),t=new WeakMap();return (_getRequireWildcardCache=function (e){return e ? t:r})(e)}\nfunction _interopRequireWildcard(e,r){if (!r && e && e.__esModule) return e;if (null===e || "object" !=typeof e && "function" !=typeof e) return{default:e};var t=_getRequireWildcardCache(r);if (t && t.has(e)) return t.get(e);var n={__proto__:null},a=Object.defineProperty && Object.getOwnPropertyDescriptor;for (var u in e) if ("default" !==u && Object.prototype.hasOwnProperty.call(e,u)){var i=a ? Object.getOwnPropertyDescriptor(e,u):null;i && (i.get || i.set) ? Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t && t.set(e,n),n}\nfunction isObjectEmpty(obj){\n return Object.keys(obj).length===0;\n}\nfunction useTheme(defaultTheme=null){\n const contextTheme=React.useContext(_styledEngine.ThemeContext);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme:contextTheme;\n}\nvar _default=exports.A=useTheme;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkyMy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2Ysb0NBQW9DLG1CQUFPLENBQUMsSUFBTztBQUNuRCxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFvQjtBQUNoRCx1Q0FBdUMsK0NBQStDLDBDQUEwQyxrREFBa0QsbUJBQW1CO0FBQ3JNLHlDQUF5Qyx1Q0FBdUMsMkVBQTJFLGNBQWMscUNBQXFDLG9DQUFvQyxVQUFVLGlCQUFpQixnRUFBZ0Usc0ZBQXNGLDBEQUEwRCx3RUFBd0U7QUFDcmlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vdXNlVGhlbWVXaXRob3V0RGVmYXVsdC5qcz9mMzhlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gcmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gbnVsbCkge1xuICBjb25zdCBjb250ZXh0VGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KF9zdHlsZWRFbmdpbmUuVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdXNlVGhlbWU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2923\n')},3034:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1547);\n'use client';\n\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAzNC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTJEO0FBQzNELGlFQUFlLDRFQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay5qcz8yOTdiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQG11aS91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3034\n")},3068:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n E:()=>(Timeout),\n A:()=>(useTimeout)\n});\n\n// EXTERNAL MODULE:external \"React\"\nvar external_React_=__webpack_require__(1594);\n;// ./node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js\n'use client';;\n\n\nfunction useLazyRef(init,initArg){\n const ref=external_React_.useRef(UNINITIALIZED);\n if (ref.current===UNINITIALIZED){\n ref.current=init(initArg);\n}\n return ref;\n}\n;// ./node_modules/@mui/utils/esm/useOnMount/useOnMount.js\n'use client';\n\n\nconst EMPTY=[];\n\n\nfunction useOnMount(fn){\n \n external_React_.useEffect(fn,EMPTY);\n \n}\n;// ./node_modules/@mui/utils/esm/useTimeout/useTimeout.js\n'use client';\n\n\n\nclass Timeout{\n constructor(){\n this.currentId=null;\n this.clear=()=>{\n if (this.currentId !==null){\n clearTimeout(this.currentId);\n this.currentId=null;\n}\n};\n this.disposeEffect=()=>{\n return this.clear;\n};\n}\n static create(){\n return new Timeout();\n}\n \n start(delay,fn){\n this.clear();\n this.currentId=setTimeout(()=>{\n this.currentId=null;\n fn();\n},delay);\n}\n}\nfunction useTimeout(){\n const timeout=useLazyRef(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA2OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBRStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZixjQUFjLHNCQUFZO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQzs7QUNsQkE7O0FBRStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQSxFQUFFLHlCQUFlO0FBQ2pCO0FBQ0EsQzs7QUNaQTs7QUFFa0Q7QUFDQTtBQUMzQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNlO0FBQ2Ysa0JBQWtCLFVBQVU7QUFDNUIsRUFBRSxVQUFVO0FBQ1o7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUxhenlSZWYvdXNlTGF6eVJlZi5qcz82MDgzIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZU9uTW91bnQvdXNlT25Nb3VudC5qcz83MjRkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcz85OTJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgRU1QVFkgPSBbXTtcblxuLyoqXG4gKiBBIFJlYWN0LnVzZUVmZmVjdCBlcXVpdmFsZW50IHRoYXQgcnVucyBvbmNlLCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT25Nb3VudChmbikge1xuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbiAgUmVhY3QudXNlRWZmZWN0KGZuLCBFTVBUWSk7XG4gIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlTGF6eVJlZiBmcm9tICcuLi91c2VMYXp5UmVmL3VzZUxhenlSZWYnO1xuaW1wb3J0IHVzZU9uTW91bnQgZnJvbSAnLi4vdXNlT25Nb3VudC91c2VPbk1vdW50JztcbmV4cG9ydCBjbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgIHRoaXMuY2xlYXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudElkKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5kaXNwb3NlRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXI7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMgY3JlYXRlKCkge1xuICAgIHJldHVybiBuZXcgVGltZW91dCgpO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZm5gIGFmdGVyIGBkZWxheWAsIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBjYWxsLlxuICAgKi9cbiAgc3RhcnQoZGVsYXksIGZuKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuY3VycmVudElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICBmbigpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IHVzZUxhenlSZWYoVGltZW91dC5jcmVhdGUpLmN1cnJlbnQ7XG4gIHVzZU9uTW91bnQodGltZW91dC5kaXNwb3NlRWZmZWN0KTtcbiAgcmV0dXJuIHRpbWVvdXQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3068\n")},3072:(__unused_webpack_module,exports)=>{"use strict";eval('\n\nvar b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?\nSymbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;\nfunction z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQSxjQUFjLGtDQUFrQyxpQkFBaUIsVUFBVSwwQkFBMEIsbURBQW1ELGtDQUFrQyw0Q0FBNEMsa0JBQWtCLGtCQUFrQixjQUFjLGdCQUFnQixpQkFBaUIsR0FBRyxzQkFBc0IsR0FBRyx1QkFBdUIsR0FBRyx1QkFBdUIsR0FBRyxlQUFlLEdBQUcsa0JBQWtCLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLFlBQVksR0FBRyxjQUFjO0FBQy9lLGdCQUFnQixHQUFHLGtCQUFrQixHQUFHLGdCQUFnQixHQUFHLG1CQUFtQixhQUFhLHVCQUF1Qix3QkFBd0IsR0FBRyx5QkFBeUIsYUFBYSxpQkFBaUIseUJBQXlCLGFBQWEsaUJBQWlCLGlCQUFpQixhQUFhLHFEQUFxRCxvQkFBb0IsYUFBYSxpQkFBaUIsa0JBQWtCLGFBQWEsaUJBQWlCLGNBQWMsYUFBYTtBQUMzYyxjQUFjLGFBQWEsaUJBQWlCLGdCQUFnQixhQUFhLGlCQUFpQixrQkFBa0IsYUFBYSxpQkFBaUIsb0JBQW9CLGFBQWEsaUJBQWlCLGtCQUFrQixhQUFhO0FBQzNOLDBCQUEwQixhQUFhLDZRQUE2USxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcz8wYThhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3072\n')},3142:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n __webpack_require__.d(__webpack_exports__,{\n "default":()=>(_createTheme__WEBPACK_IMPORTED_MODULE_0__.A),\n private_createBreakpoints:()=>(_createBreakpoints__WEBPACK_IMPORTED_MODULE_1__.A),\n unstable_applyStyles:()=>(_applyStyles__WEBPACK_IMPORTED_MODULE_2__.A)\n});\n var _createTheme__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8749);\n var _createBreakpoints__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8094);\n var _applyStyles__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(8336);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE0Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0M7QUFDbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvaW5kZXguanM/YTdhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByaXZhdGVfY3JlYXRlQnJlYWtwb2ludHMgfSBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfYXBwbHlTdHlsZXMgfSBmcm9tICcuL2FwcGx5U3R5bGVzJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3142\n')},3174:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n J:()=>(serializeStyles)\n});\n\n;// ./node_modules/@emotion/hash/dist/emotion-hash.esm.js\n\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str){\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic',they just happen to work well.\n // const m=0x5bd1e995;\n // const r=24;\n // Initialize the hash\n var h=0;// Mix 4 bytes at a time into the hash\n\n var k,\n i=0,\n len=str.length;\n\n for (;len>=4;++i,len -=4){\n k=str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k=\n \n (k & 0xffff) * 0x5bd1e995+((k>>>16) * 0xe995 << 16);\n k^=\n \n k>>>24;\n h=\n \n (k & 0xffff) * 0x5bd1e995+((k>>>16) * 0xe995 << 16) ^\n \n (h & 0xffff) * 0x5bd1e995+((h>>>16) * 0xe995 << 16);\n}// Handle the last few bytes of the input array\n\n\n switch (len){\n case 3:\n h^=(str.charCodeAt(i+2) & 0xff) << 16;\n\n case 2:\n h^=(str.charCodeAt(i+1) & 0xff) << 8;\n\n case 1:\n h^=str.charCodeAt(i) & 0xff;\n h=\n \n (h & 0xffff) * 0x5bd1e995+((h>>>16) * 0xe995 << 16);\n}// Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h^=h>>>13;\n h=\n \n (h & 0xffff) * 0x5bd1e995+((h>>>16) * 0xe995 << 16);\n return ((h ^ h>>>15)>>>0).toString(36);\n}\n\n\n\n;// ./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js\nvar unitlessKeys={\n animationIterationCount:1,\n aspectRatio:1,\n borderImageOutset:1,\n borderImageSlice:1,\n borderImageWidth:1,\n boxFlex:1,\n boxFlexGroup:1,\n boxOrdinalGroup:1,\n columnCount:1,\n columns:1,\n flex:1,\n flexGrow:1,\n flexPositive:1,\n flexShrink:1,\n flexNegative:1,\n flexOrder:1,\n gridRow:1,\n gridRowEnd:1,\n gridRowSpan:1,\n gridRowStart:1,\n gridColumn:1,\n gridColumnEnd:1,\n gridColumnSpan:1,\n gridColumnStart:1,\n msGridRow:1,\n msGridRowSpan:1,\n msGridColumn:1,\n msGridColumnSpan:1,\n fontWeight:1,\n lineHeight:1,\n opacity:1,\n order:1,\n orphans:1,\n scale:1,\n tabSize:1,\n widows:1,\n zIndex:1,\n zoom:1,\n WebkitLineClamp:1,\n // SVG-related properties\n fillOpacity:1,\n floodOpacity:1,\n stopOpacity:1,\n strokeDasharray:1,\n strokeDashoffset:1,\n strokeMiterlimit:1,\n strokeOpacity:1,\n strokeWidth:1\n};\n\n\n\n// EXTERNAL MODULE:./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js\nvar emotion_memoize_esm=__webpack_require__(6289);\n;// ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js\n\n\n\n\nvar isDevelopment=false;\n\nvar hyphenateRegex=/[A-Z]|^ms/g;\nvar animationRegex=/_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty=function isCustomProperty(property){\n return property.charCodeAt(1)===45;\n};\n\nvar isProcessableValue=function isProcessableValue(value){\n return value !=null && typeof value !=='boolean';\n};\n\nvar processStyleName=(0,emotion_memoize_esm.A)(function (styleName){\n return isCustomProperty(styleName) ? styleName:styleName.replace(hyphenateRegex,'-$&').toLowerCase();\n});\n\nvar processStyleValue=function processStyleValue(key,value){\n switch (key){\n case 'animation':\n case 'animationName':\n{\n if (typeof value==='string'){\n return value.replace(animationRegex,function (match,p1,p2){\n cursor={\n name:p1,\n styles:p2,\n next:cursor\n};\n return p1;\n});\n}\n}\n}\n\n if (unitlessKeys[key] !==1 && !isCustomProperty(key) && typeof value==='number' && value !==0){\n return value+'px';\n}\n\n return value;\n};\n\nvar noComponentSelectorMessage='Component selectors can only be used in conjunction with '+'@emotion/babel-plugin,the swc Emotion plugin,or another Emotion-aware '+'compiler transform.';\n\nfunction handleInterpolation(mergedProps,registered,interpolation){\n if (interpolation==null){\n return '';\n}\n\n var componentSelector=interpolation;\n\n if (componentSelector.__emotion_styles !==undefined){\n\n return componentSelector;\n}\n\n switch (typeof interpolation){\n case 'boolean':\n{\n return '';\n}\n\n case 'object':\n{\n var keyframes=interpolation;\n\n if (keyframes.anim===1){\n cursor={\n name:keyframes.name,\n styles:keyframes.styles,\n next:cursor\n};\n return keyframes.name;\n}\n\n var serializedStyles=interpolation;\n\n if (serializedStyles.styles !==undefined){\n var next=serializedStyles.next;\n\n if (next !==undefined){\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !==undefined){\n cursor={\n name:next.name,\n styles:next.styles,\n next:cursor\n};\n next=next.next;\n}\n}\n\n var styles=serializedStyles.styles+\";\";\n return styles;\n}\n\n return createStringFromObject(mergedProps,registered,interpolation);\n}\n\n case 'function':\n{\n if (mergedProps !==undefined){\n var previousCursor=cursor;\n var result=interpolation(mergedProps);\n cursor=previousCursor;\n return handleInterpolation(mergedProps,registered,result);\n}\n\n break;\n}\n}// finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString=interpolation;\n\n if (registered==null){\n return asString;\n}\n\n var cached=registered[asString];\n return cached !==undefined ? cached:asString;\n}\n\nfunction createStringFromObject(mergedProps,registered,obj){\n var string='';\n\n if (Array.isArray(obj)){\n for (var i=0;i < obj.length;i++){\n string+=handleInterpolation(mergedProps,registered,obj[i])+\";\";\n}\n}else{\n for (var key in obj){\n var value=obj[key];\n\n if (typeof value !=='object'){\n var asString=value;\n\n if (registered !=null && registered[asString] !==undefined){\n string+=key+\"{\"+registered[asString]+\"}\";\n}else if (isProcessableValue(asString)){\n string+=processStyleName(key)+\":\"+processStyleValue(key,asString)+\";\";\n}\n}else{\n if (key==='NO_COMPONENT_SELECTOR' && isDevelopment){\n throw new Error(noComponentSelectorMessage);\n}\n\n if (Array.isArray(value) && typeof value[0]==='string' && (registered==null || registered[value[0]]===undefined)){\n for (var _i=0;_i < value.length;_i++){\n if (isProcessableValue(value[_i])){\n string+=processStyleName(key)+\":\"+processStyleValue(key,value[_i])+\";\";\n}\n}\n}else{\n var interpolated=handleInterpolation(mergedProps,registered,value);\n\n switch (key){\n case 'animation':\n case 'animationName':\n{\n string+=processStyleName(key)+\":\"+interpolated+\";\";\n break;\n}\n\n default:\n{\n\n string+=key+\"{\"+interpolated+\"}\";\n}\n}\n}\n}\n}\n}\n\n return string;\n}\n\nvar labelPattern=/label:\\s*([^\\s;{]+)\\s*(;|$)/g;// this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args,registered,mergedProps){\n if (args.length===1 && typeof args[0]==='object' && args[0] !==null && args[0].styles !==undefined){\n return args[0];\n}\n\n var stringMode=true;\n var styles='';\n cursor=undefined;\n var strings=args[0];\n\n if (strings==null || strings.raw===undefined){\n stringMode=false;\n styles+=handleInterpolation(mergedProps,registered,strings);\n}else{\n var asTemplateStringsArr=strings;\n\n styles+=asTemplateStringsArr[0];\n}// we start at 1 since we've already handled the first arg\n\n\n for (var i=1;i < args.length;i++){\n styles+=handleInterpolation(mergedProps,registered,args[i]);\n\n if (stringMode){\n var templateStringsArr=strings;\n\n styles+=templateStringsArr[i];\n}\n}// using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex=0;\n var identifierName='';\n var match;// https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match=labelPattern.exec(styles)) !==null){\n identifierName+='-'+match[1];\n}\n\n var name=murmur2(styles)+identifierName;\n\n return{\n name:name,\n styles:styles,\n next:cursor\n};\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcz9lZjAwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanM/YWQ1MSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zZXJpYWxpemUvZGlzdC9lbW90aW9uLXNlcmlhbGl6ZS5lc20uanM/ODQyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgY29tcG9uZW50U2VsZWN0b3IgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChjb21wb25lbnRTZWxlY3Rvci5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHJldHVybiBjb21wb25lbnRTZWxlY3RvcjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGtleWZyYW1lcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKGtleWZyYW1lcy5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZToga2V5ZnJhbWVzLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGtleWZyYW1lcy5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBrZXlmcmFtZXMubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXJpYWxpemVkU3R5bGVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZFN0eWxlcy5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICsgXCI7XCI7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgdmFyIGFzU3RyaW5nID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbYXNTdHJpbmddO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBhc1N0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgYXNTdHJpbmcgPSB2YWx1ZTtcblxuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbYXNTdHJpbmddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW2FzU3RyaW5nXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZShhc1N0cmluZykpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIGFzU3RyaW5nKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7e10rKVxccyooO3wkKS9nOyAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3174\n")},3256:(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1354);\n var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(6314);\n var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___=_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n___CSS_LOADER_EXPORT___.push([module.id,""]);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id,`\r\n\r\n.wpai_plugin-container{\r\n all:initial;\r\n font-family:"Outfit",sans-serif;\r\n line-height:1.5;\r\n color:#333;\r\n}\r\n\r\n\r\n.wpai_plugin-container *,\r\n.wpai_plugin-container *::before,\r\n.wpai_plugin-container *::after{\r\n font-family:inherit;\r\n}\r\n\r\n\r\n.wpai_plugin-container .wpai_material-icons{\r\n font-family:"Material Icons"!important;\r\n font-weight:400;\r\n font-style:normal;\r\n font-size:24px;\r\n line-height:1;\r\n letter-spacing:normal;\r\n text-transform:none;\r\n display:inline-block;\r\n white-space:nowrap;\r\n word-wrap:normal;\r\n direction:ltr;\r\n -webkit-font-smoothing:antialiased;\r\n}\r\n\r\n\r\nbody:not(.wpai_plugin-container) .MuiPopover-root,\r\nbody:not(.wpai_plugin-container) .MuiDrawer-root,\r\nbody:not(.wpai_plugin-container) .MuiModal-root{\r\n z-index:99999!important;\r\n}\r\n\r\n\r\n.wpai_admin-container{\r\n padding:0;\r\n width:calc(100% + 40px);\r\n min-height:calc(100vh - 32px);\r\n box-sizing:border-box;\r\n}\r\n\r\n.wpai_chatbot-container{\r\n position:fixed;\r\n bottom:20px;\r\n right:20px;\r\n z-index:9999;\r\n}\r\n\r\n\r\n.wpai_plugin-container input,\r\n.wpai_plugin-container button,\r\n.wpai_plugin-container select,\r\n.wpai_plugin-container textarea{\r\n font-family:"Outfit",sans-serif;\r\n font-size:14px;\r\n line-height:inherit;\r\n}\r\n`,"",{"version":3,"sources":["webpack://./src/assets/css/global.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAIF;EACE,YAAY,EAAE,iBAAiB;EAC/B,iCAAiC;EACjC,gBAAgB;EAChB,WAAW;AACb;;AAEA,4DAA4D;AAC5D;;;EAGE,oBAAoB,EAAE,kDAAkD;AAC1E;;AAEA,2DAA2D;AAC3D;EACE,wCAAwC;EACxC,mBAAmB;EACnB,kBAAkB;EAClB,eAAe;EACf,cAAc;EACd,sBAAsB;EACtB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;EACnB,iBAAiB;EACjB,cAAc;EACd,mCAAmC;AACrC;;AAEA,sFAAsF;AACtF;;;EAGE,yBAAyB,EAAE,wDAAwD;AACrF;;AAEA,mCAAmC;AACnC;EACE,UAAU;EACV,wBAAwB;EACxB,8BAA8B;EAC9B,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,aAAa;AACf;;AAEA,yCAAyC;AACzC;;;;EAIE,iCAAiC;EACjC,eAAe;EACf,oBAAoB;AACtB","sourcesContent":["\\r\\n\\r\\n\\r\\n\\r\\n.wpai_plugin-container{\\r\\n all:initial;\\r\\n font-family:\\"Outfit\\",sans-serif;\\r\\n line-height:1.5;\\r\\n color:#333;\\r\\n}\\r\\n\\r\\n\\r\\n.wpai_plugin-container *,\\r\\n.wpai_plugin-container *::before,\\r\\n.wpai_plugin-container *::after{\\r\\n font-family:inherit;\\r\\n}\\r\\n\\r\\n\\r\\n.wpai_plugin-container .wpai_material-icons{\\r\\n font-family:\\"Material Icons\\"!important;\\r\\n font-weight:400;\\r\\n font-style:normal;\\r\\n font-size:24px;\\r\\n line-height:1;\\r\\n letter-spacing:normal;\\r\\n text-transform:none;\\r\\n display:inline-block;\\r\\n white-space:nowrap;\\r\\n word-wrap:normal;\\r\\n direction:ltr;\\r\\n -webkit-font-smoothing:antialiased;\\r\\n}\\r\\n\\r\\n\\r\\nbody:not(.wpai_plugin-container) .MuiPopover-root,\\r\\nbody:not(.wpai_plugin-container) .MuiDrawer-root,\\r\\nbody:not(.wpai_plugin-container) .MuiModal-root{\\r\\n z-index:99999!important;\\r\\n}\\r\\n\\r\\n\\r\\n.wpai_admin-container{\\r\\n padding:0;\\r\\n width:calc(100% + 40px);\\r\\n min-height:calc(100vh - 32px);\\r\\n box-sizing:border-box;\\r\\n}\\r\\n\\r\\n.wpai_chatbot-container{\\r\\n position:fixed;\\r\\n bottom:20px;\\r\\n right:20px;\\r\\n z-index:9999;\\r\\n}\\r\\n\\r\\n\\r\\n.wpai_plugin-container input,\\r\\n.wpai_plugin-container button,\\r\\n.wpai_plugin-container select,\\r\\n.wpai_plugin-container textarea{\\r\\n font-family:\\"Outfit\\",sans-serif;\\r\\n font-size:14px;\\r\\n line-height:inherit;\\r\\n}\\r\\n"],"sourceRoot":""}]);\n// Exports\n const __WEBPACK_DEFAULT_EXPORT__=(___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzI1Ni5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDZ0g7QUFDakI7QUFDL0YsOEJBQThCLG1GQUEyQixDQUFDLDRGQUFxQztBQUMvRixrSUFBa0k7QUFDbEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDhGQUE4RixNQUFNLEtBQUssc0JBQXNCLGFBQWEsYUFBYSxXQUFXLE1BQU0sWUFBWSxRQUFRLHdCQUF3QixPQUFPLFlBQVksTUFBTSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLFlBQVksUUFBUSx3QkFBd0IsT0FBTyxZQUFZLE1BQU0sVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLFlBQVksU0FBUyxZQUFZLFdBQVcsWUFBWSxzUEFBc1AsZ0NBQWdDLG9CQUFvQiw0REFBNEQsdUJBQXVCLGtCQUFrQixLQUFLLDRLQUE0Syw0QkFBNEIsd0RBQXdELHFIQUFxSCxpREFBaUQsMEJBQTBCLHlCQUF5QixzQkFBc0IscUJBQXFCLDZCQUE2QiwyQkFBMkIsNEJBQTRCLDBCQUEwQix3QkFBd0IscUJBQXFCLDBDQUEwQyxLQUFLLCtQQUErUCxpQ0FBaUMsOERBQThELHVFQUF1RSxpQkFBaUIsK0JBQStCLHFDQUFxQyw2QkFBNkIsS0FBSyxpQ0FBaUMsc0JBQXNCLG1CQUFtQixrQkFBa0Isb0JBQW9CLEtBQUssNExBQTRMLDBDQUEwQyxzQkFBc0IsMkJBQTJCLEtBQUssdUJBQXVCO0FBQzVwRjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9zcmMvYXNzZXRzL2Nzcy9nbG9iYWwuY3NzPzMxMjciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1PdXRmaXQ6d2dodEAxMDAuLjkwMCZkaXNwbGF5PXN3YXApO1wiXSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qKlxyXG4gKiBXUEFJIFBsdWdpbiBHbG9iYWwgU3R5bGVzXHJcbiAqIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHBsdWdpbi13aWRlIHJlc2V0cywgdHlwb2dyYXBoeSwgYW5kIHNjb3BpbmcuXHJcbiAqL1xyXG5cclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciB7XHJcbiAgYWxsOiBpbml0aWFsOyAvKiBMZWdhY3kgcmVzZXQgKi9cclxuICBmb250LWZhbWlseTogXCJPdXRmaXRcIiwgc2Fucy1zZXJpZjtcclxuICBsaW5lLWhlaWdodDogMS41O1xyXG4gIGNvbG9yOiAjMzMzO1xyXG59XHJcblxyXG4vKiBFbnN1cmUgYWxsIG5lc3RlZCBlbGVtZW50cyByZXNwZWN0IHRoZSBib3JkZXItYm94IG1vZGVsICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgKixcclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjpiZWZvcmUsXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgKjo6YWZ0ZXIge1xyXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0OyAvKiBFc3NlbnRpYWw6IGluaGVyaXQgZm9udCBmcm9tIHBhcmVudCBjb250YWluZXIgKi9cclxufVxyXG5cclxuLyogTWF0ZXJpYWwgSWNvbnMgSXNvbGF0aW9uIChvbmx5IGFmZmVjdHMgb3VyIGNvbXBvbmVudHMpICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgLndwYWlfbWF0ZXJpYWwtaWNvbnMge1xyXG4gIGZvbnQtZmFtaWx5OiBcIk1hdGVyaWFsIEljb25zXCIgIWltcG9ydGFudDtcclxuICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICBmb250LXNpemU6IDI0cHg7XHJcbiAgbGluZS1oZWlnaHQ6IDE7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcclxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICB3b3JkLXdyYXA6IG5vcm1hbDtcclxuICBkaXJlY3Rpb246IGx0cjtcclxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcclxufVxyXG5cclxuLyogTVVJIENvbXBvbmVudCBQb2xpc2hpbmc6IFByZXZlbnRzIE1VSSBtb2RhbHMvZHJhd2VycyBmcm9tIGdldHRpbmcgaGlkZGVuIGJ5IFdQIFVJICovXHJcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlQb3BvdmVyLXJvb3QsXHJcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlEcmF3ZXItcm9vdCxcclxuYm9keTpub3QoLndwYWlfcGx1Z2luLWNvbnRhaW5lcikgLk11aU1vZGFsLXJvb3Qge1xyXG4gIHotaW5kZXg6IDk5OTk5ICFpbXBvcnRhbnQ7IC8qIFN0YW5kYXJkaXplZCBoaWdoIHotaW5kZXggZm9yIFVJIG92ZXJsYXkgY29tcG9uZW50cyAqL1xyXG59XHJcblxyXG4vKiBHZW5lcmljIFBsdWdpbiBVdGlsaXR5IENsYXNzZXMgKi9cclxuLndwYWlfYWRtaW4tY29udGFpbmVyIHtcclxuICBwYWRkaW5nOiAwO1xyXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA0MHB4KTtcclxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMzJweCk7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxufVxyXG5cclxuLndwYWlfY2hhdGJvdC1jb250YWluZXIge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBib3R0b206IDIwcHg7XHJcbiAgcmlnaHQ6IDIwcHg7XHJcbiAgei1pbmRleDogOTk5OTtcclxufVxyXG5cclxuLyogQ29tbW9uIGZvcm0gcmVzZXQgZm9yIFdQIGludGVncmF0aW9uICovXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgaW5wdXQsXHJcbi53cGFpX3BsdWdpbi1jb250YWluZXIgYnV0dG9uLFxyXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHNlbGVjdCxcclxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciB0ZXh0YXJlYSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiT3V0Zml0XCIsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxNHB4O1xyXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xyXG59XHJcbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2Fzc2V0cy9jc3MvZ2xvYmFsLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7O0VBR0U7O0FBSUY7RUFDRSxZQUFZLEVBQUUsaUJBQWlCO0VBQy9CLGlDQUFpQztFQUNqQyxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBLDREQUE0RDtBQUM1RDs7O0VBR0Usb0JBQW9CLEVBQUUsa0RBQWtEO0FBQzFFOztBQUVBLDJEQUEyRDtBQUMzRDtFQUNFLHdDQUF3QztFQUN4QyxtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLGVBQWU7RUFDZixjQUFjO0VBQ2Qsc0JBQXNCO0VBQ3RCLG9CQUFvQjtFQUNwQixxQkFBcUI7RUFDckIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixjQUFjO0VBQ2QsbUNBQW1DO0FBQ3JDOztBQUVBLHNGQUFzRjtBQUN0Rjs7O0VBR0UseUJBQXlCLEVBQUUsd0RBQXdEO0FBQ3JGOztBQUVBLG1DQUFtQztBQUNuQztFQUNFLFVBQVU7RUFDVix3QkFBd0I7RUFDeEIsOEJBQThCO0VBQzlCLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLGVBQWU7RUFDZixZQUFZO0VBQ1osV0FBVztFQUNYLGFBQWE7QUFDZjs7QUFFQSx5Q0FBeUM7QUFDekM7Ozs7RUFJRSxpQ0FBaUM7RUFDakMsZUFBZTtFQUNmLG9CQUFvQjtBQUN0QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKipcXHJcXG4gKiBXUEFJIFBsdWdpbiBHbG9iYWwgU3R5bGVzXFxyXFxuICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgcGx1Z2luLXdpZGUgcmVzZXRzLCB0eXBvZ3JhcGh5LCBhbmQgc2NvcGluZy5cXHJcXG4gKi9cXHJcXG5cXHJcXG5AaW1wb3J0IHVybChcXFwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1PdXRmaXQ6d2dodEAxMDAuLjkwMCZkaXNwbGF5PXN3YXBcXFwiKTtcXHJcXG5cXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHtcXHJcXG4gIGFsbDogaW5pdGlhbDsgLyogTGVnYWN5IHJlc2V0ICovXFxyXFxuICBmb250LWZhbWlseTogXFxcIk91dGZpdFxcXCIsIHNhbnMtc2VyaWY7XFxyXFxuICBsaW5lLWhlaWdodDogMS41O1xcclxcbiAgY29sb3I6ICMzMzM7XFxyXFxufVxcclxcblxcclxcbi8qIEVuc3VyZSBhbGwgbmVzdGVkIGVsZW1lbnRzIHJlc3BlY3QgdGhlIGJvcmRlci1ib3ggbW9kZWwgKi9cXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyICosXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjpiZWZvcmUsXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciAqOjphZnRlciB7XFxyXFxuICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogRXNzZW50aWFsOiBpbmhlcml0IGZvbnQgZnJvbSBwYXJlbnQgY29udGFpbmVyICovXFxyXFxufVxcclxcblxcclxcbi8qIE1hdGVyaWFsIEljb25zIElzb2xhdGlvbiAob25seSBhZmZlY3RzIG91ciBjb21wb25lbnRzKSAqL1xcclxcbi53cGFpX3BsdWdpbi1jb250YWluZXIgLndwYWlfbWF0ZXJpYWwtaWNvbnMge1xcclxcbiAgZm9udC1mYW1pbHk6IFxcXCJNYXRlcmlhbCBJY29uc1xcXCIgIWltcG9ydGFudDtcXHJcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxyXFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxyXFxuICBmb250LXNpemU6IDI0cHg7XFxyXFxuICBsaW5lLWhlaWdodDogMTtcXHJcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxyXFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXHJcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcXHJcXG4gIGRpcmVjdGlvbjogbHRyO1xcclxcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxyXFxufVxcclxcblxcclxcbi8qIE1VSSBDb21wb25lbnQgUG9saXNoaW5nOiBQcmV2ZW50cyBNVUkgbW9kYWxzL2RyYXdlcnMgZnJvbSBnZXR0aW5nIGhpZGRlbiBieSBXUCBVSSAqL1xcclxcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlQb3BvdmVyLXJvb3QsXFxyXFxuYm9keTpub3QoLndwYWlfcGx1Z2luLWNvbnRhaW5lcikgLk11aURyYXdlci1yb290LFxcclxcbmJvZHk6bm90KC53cGFpX3BsdWdpbi1jb250YWluZXIpIC5NdWlNb2RhbC1yb290IHtcXHJcXG4gIHotaW5kZXg6IDk5OTk5ICFpbXBvcnRhbnQ7IC8qIFN0YW5kYXJkaXplZCBoaWdoIHotaW5kZXggZm9yIFVJIG92ZXJsYXkgY29tcG9uZW50cyAqL1xcclxcbn1cXHJcXG5cXHJcXG4vKiBHZW5lcmljIFBsdWdpbiBVdGlsaXR5IENsYXNzZXMgKi9cXHJcXG4ud3BhaV9hZG1pbi1jb250YWluZXIge1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA0MHB4KTtcXHJcXG4gIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMnB4KTtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxufVxcclxcblxcclxcbi53cGFpX2NoYXRib3QtY29udGFpbmVyIHtcXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIGJvdHRvbTogMjBweDtcXHJcXG4gIHJpZ2h0OiAyMHB4O1xcclxcbiAgei1pbmRleDogOTk5OTtcXHJcXG59XFxyXFxuXFxyXFxuLyogQ29tbW9uIGZvcm0gcmVzZXQgZm9yIFdQIGludGVncmF0aW9uICovXFxyXFxuLndwYWlfcGx1Z2luLWNvbnRhaW5lciBpbnB1dCxcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIGJ1dHRvbixcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHNlbGVjdCxcXHJcXG4ud3BhaV9wbHVnaW4tY29udGFpbmVyIHRleHRhcmVhIHtcXHJcXG4gIGZvbnQtZmFtaWx5OiBcXFwiT3V0Zml0XFxcIiwgc2Fucy1zZXJpZjtcXHJcXG4gIGZvbnQtc2l6ZTogMTRweDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3256\n')},3313:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(useIsFocusVisible)\n});\n\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _useTimeout_useTimeout__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3068);\n'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\n\n\nlet hadKeyboardEvent=true;\nlet hadFocusVisibleRecently=false;\nconst hadFocusVisibleRecentlyTimeout=new _useTimeout_useTimeout__WEBPACK_IMPORTED_MODULE_1__ .E();\nconst inputTypesWhitelist={\n text:true,\n search:true,\n url:true,\n tel:true,\n email:true,\n password:true,\n number:true,\n date:true,\n month:true,\n week:true,\n time:true,\n datetime:true,\n 'datetime-local':true\n};\n\n\nfunction focusTriggersKeyboardModality(node){\n const{\n type,\n tagName\n}=node;\n if (tagName==='INPUT' && inputTypesWhitelist[type] && !node.readOnly){\n return true;\n}\n if (tagName==='TEXTAREA' && !node.readOnly){\n return true;\n}\n if (node.isContentEditable){\n return true;\n}\n return false;\n}\n\n\nfunction handleKeyDown(event){\n if (event.metaKey || event.altKey || event.ctrlKey){\n return;\n}\n hadKeyboardEvent=true;\n}\n\n\nfunction handlePointerDown(){\n hadKeyboardEvent=false;\n}\nfunction handleVisibilityChange(){\n if (this.visibilityState==='hidden'){\n // If the tab becomes active again,the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently){\n hadKeyboardEvent=true;\n}\n}\n}\nfunction prepare(doc){\n doc.addEventListener('keydown',handleKeyDown,true);\n doc.addEventListener('mousedown',handlePointerDown,true);\n doc.addEventListener('pointerdown',handlePointerDown,true);\n doc.addEventListener('touchstart',handlePointerDown,true);\n doc.addEventListener('visibilitychange',handleVisibilityChange,true);\n}\nfunction teardown(doc){\n doc.removeEventListener('keydown',handleKeyDown,true);\n doc.removeEventListener('mousedown',handlePointerDown,true);\n doc.removeEventListener('pointerdown',handlePointerDown,true);\n doc.removeEventListener('touchstart',handlePointerDown,true);\n doc.removeEventListener('visibilitychange',handleVisibilityChange,true);\n}\nfunction isFocusVisible(event){\n const{\n target\n}=event;\n try{\n return target.matches(':focus-visible');\n}catch (error){\n // Browsers not implementing:focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n}\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nfunction useIsFocusVisible(){\n const ref=react__WEBPACK_IMPORTED_MODULE_0__.useCallback(node=>{\n if (node !=null){\n prepare(node.ownerDocument);\n}\n},[]);\n const isFocusVisibleRef=react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n\n \n function handleBlurVisible(){\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO:check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current){\n // To detect a tab/window switch,we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms,it's probably a\n // regular focus change.\n hadFocusVisibleRecently=true;\n hadFocusVisibleRecentlyTimeout.start(100,()=>{\n hadFocusVisibleRecently=false;\n});\n isFocusVisibleRef.current=false;\n return true;\n}\n return false;\n}\n\n \n function handleFocusVisible(event){\n if (isFocusVisible(event)){\n isFocusVisibleRef.current=true;\n return true;\n}\n return false;\n}\n return{\n isFocusVisibleRef,\n onFocus:handleFocusVisible,\n onBlur:handleBlurVisible,\n ref\n};\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMxMy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7QUFDK0I7QUFDb0I7QUFDbkQ7QUFDQTtBQUNBLDJDQUEyQyxvRUFBTztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZixjQUFjLDhDQUFpQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsNEJBQTRCLHlDQUFZOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3VzZUlzRm9jdXNWaXNpYmxlL3VzZUlzRm9jdXNWaXNpYmxlLmpzPzA3OTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3313\n")},3404:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n module.exports=__webpack_require__(3072);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQwNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTREO0FBQzlELEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/YWY3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3404\n")},3571:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__),\n k:()=>(unstable_createStyleFunctionSx)\n});\n var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3967);\n var _merge__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(4620);\n var _style__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(6481);\n var _breakpoints__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(9452);\n var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(4188);\n\n\n\n\n\nfunction objectsHaveSameKeys(...objects){\n const allKeys=objects.reduce((keys,object)=>keys.concat(Object.keys(object)),[]);\n const union=new Set(allKeys);\n return objects.every(object=>union.size===Object.keys(object).length);\n}\nfunction callIfFn(maybeFn,arg){\n return typeof maybeFn==='function' ? maybeFn(arg):maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction unstable_createStyleFunctionSx(){\n function getThemeValue(prop,val,theme,config){\n const props={\n [prop]:val,\n theme\n};\n const options=config[prop];\n if (!options){\n return{\n [prop]:val\n};\n}\n const{\n cssProperty=prop,\n themeKey,\n transform,\n style\n}=options;\n if (val==null){\n return null;\n}\n\n // TODO v6:remove,see https://github.com/mui/material-ui/pull/38123\n if (themeKey==='typography' && val==='inherit'){\n return{\n [prop]:val\n};\n};\n if (style){\n return style(props);\n}\n const styleFromPropValue=propValueFinal=>{\n let value=(0,_style__WEBPACK_IMPORTED_MODULE_0__ .BO)(themeMapping,transform,propValueFinal);\n if (propValueFinal===value && typeof propValueFinal==='string'){\n // Haven't found value\n value=(0,_style__WEBPACK_IMPORTED_MODULE_0__ .BO)(themeMapping,transform,`${prop}${propValueFinal==='default' ? '':(0,_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_1__ .A)(propValueFinal)}`,propValueFinal);\n}\n if (cssProperty===false){\n return value;\n}\n return{\n [cssProperty]:value\n};\n};\n return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__ .NI)(props,val,styleFromPropValue);\n}\n function styleFunctionSx(props){\n var _theme$unstable_sxCon;\n const{\n sx,\n theme={}\n};\n if (!sx){\n return null;// Emotion & styled-components will neglect null\n}\n const config=(_theme$unstable_sxCon=theme.unstable_sxConfig) !=null ? _theme$unstable_sxCon :_defaultSxConfig__WEBPACK_IMPORTED_MODULE_3__ .A;\n\n \n function traverse(sxInput){\n let sxObject=sxInput;\n if (typeof sxInput==='function'){\n sxObject=sxInput(theme);\n}else if (typeof sxInput !=='object'){\n // value\n return sxInput;\n}\n if (!sxObject){\n return null;\n}\n const emptyBreakpoints=(0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__ .EU)(theme.breakpoints);\n const breakpointsKeys=Object.keys(emptyBreakpoints);\n let css=emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey=>{\n const value=callIfFn(sxObject[styleKey],theme);\n if (value !==null && value !==undefined){\n if (typeof value==='object'){\n if (config[styleKey]){\n css=(0,_merge__WEBPACK_IMPORTED_MODULE_4__ .A)(css,getThemeValue(styleKey,value,theme,config));\n}else{\n const breakpointsValues=(0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__ .NI)({\n theme\n},value,x=>({\n [styleKey]:x\n}));\n if (objectsHaveSameKeys(breakpointsValues,value)){\n css[styleKey]=styleFunctionSx({\n sx:value,\n theme\n});\n}else{\n css=(0,_merge__WEBPACK_IMPORTED_MODULE_4__ .A)(css,breakpointsValues);\n}\n}\n}else{\n css=(0,_merge__WEBPACK_IMPORTED_MODULE_4__ .A)(css,getThemeValue(styleKey,value,theme,config));\n}\n}\n});\n return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_2__ .vf)(breakpointsKeys,css);\n}\n return Array.isArray(sx) ? sx.map(traverse):traverse(sx);\n}\n return styleFunctionSx;\n}\nconst styleFunctionSx=unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps=['sx'];\n const __WEBPACK_DEFAULT_EXPORT__=(styleFunctionSx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzU3MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0M7QUFDbEI7QUFDaUM7QUFDMkM7QUFDekQ7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix5REFBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwrREFBUTtBQUMxQjtBQUNBO0FBQ0EsZ0JBQWdCLCtEQUFRLDZCQUE2QixLQUFLLEVBQUUsb0NBQW9DLDBFQUFVLGlCQUFpQjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx5RUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EsdUdBQXVHLGlFQUFlOztBQUV0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLG1GQUEyQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwyREFBSztBQUN6QixjQUFjO0FBQ2Qsd0NBQXdDLHlFQUFpQjtBQUN6RDtBQUNBLGVBQWU7QUFDZjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEIsc0JBQXNCLDJEQUFLO0FBQzNCO0FBQ0E7QUFDQSxZQUFZO0FBQ1osa0JBQWtCLDJEQUFLO0FBQ3ZCO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsYUFBYSwrRUFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3guanM/YzUzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3571\n")},3749:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4877);\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_ownerWindow__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWlEO0FBQ2pELGlFQUFlLHVFQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lcldpbmRvdy5qcz81ODU2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvd25lcldpbmRvdyBmcm9tICdAbXVpL3V0aWxzL293bmVyV2luZG93JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3749\n')},3857:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n __webpack_require__.d(__webpack_exports__,{\n "default":()=>(_styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__.A),\n extendSxProp:()=>(_extendSxProp__WEBPACK_IMPORTED_MODULE_1__.A),\n unstable_createStyleFunctionSx:()=>(_styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__.k),\n unstable_defaultSxConfig:()=>(_defaultSxConfig__WEBPACK_IMPORTED_MODULE_2__.A)\n});\n var _styleFunctionSx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3571);\n var _extendSxProp__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(9599);\n var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(4188);\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg1Ny5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTRDO0FBQ3VCO0FBQ1YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2luZGV4LmpzPzBlYzUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmV4cG9ydCB7IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCB9IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi9leHRlbmRTeFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3857\n')},3967:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(capitalize)\n});\n var _mui_utils_formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(9453);\n\n// It should to be noted that this function isn't equivalent to `text-transform:capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nfunction capitalize(string){\n if (typeof string !=='string'){\n throw new Error(false ? 0:(0,_mui_utils_formatMuiErrorMessage__WEBPACK_IMPORTED_MODULE_0__ .A)(7));\n}\n return string.charAt(0).toUpperCase()+string.slice(1);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk2Ny5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXNFO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBLG9CQUFvQixNQUFxQyxHQUFHLENBQXdELEdBQUcscUZBQXNCO0FBQzdJO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NhcGl0YWxpemUvY2FwaXRhbGl6ZS5qcz9iYTczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuLy8gSXQgc2hvdWxkIHRvIGJlIG5vdGVkIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24ndCBlcXVpdmFsZW50IHRvIGB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZWAuXG4vL1xuLy8gQSBzdHJpY3QgY2FwaXRhbGl6YXRpb24gc2hvdWxkIHVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiB0aGUgc2VudGVuY2UuXG4vLyBXZSBvbmx5IGhhbmRsZSB0aGUgZmlyc3Qgd29yZC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGBjYXBpdGFsaXplKHN0cmluZylcXGAgZXhwZWN0cyBhIHN0cmluZyBhcmd1bWVudC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3967\n")},4017:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"\n}),\'Check\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAxNy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2suanM/OTU3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNOSAxNi4xNyA0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6XCJcbn0pLCAnQ2hlY2snKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4017\n')},4146:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nvar reactIs=__webpack_require__(3404);\n\n\nvar REACT_STATICS={\n childContextTypes:true,\n contextType:true,\n contextTypes:true,\n defaultProps:true,\n displayName:true,\n getDefaultProps:true,\n getDerivedStateFromError:true,\n getDerivedStateFromProps:true,\n mixins:true,\n propTypes:true,\n type:true\n};\nvar KNOWN_STATICS={\n name:true,\n length:true,\n prototype:true,\n caller:true,\n callee:true,\n arguments:true,\n arity:true\n};\nvar FORWARD_REF_STATICS={\n '$$typeof':true,\n render:true,\n defaultProps:true,\n displayName:true,\n propTypes:true\n};\nvar MEMO_STATICS={\n '$$typeof':true,\n compare:true,\n defaultProps:true,\n displayName:true,\n propTypes:true,\n type:true\n};;\nTYPE_STATICS[reactIs.ForwardRef]=FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo]=MEMO_STATICS;\n\nfunction getStatics(component){\n // React v16.11 and below\n if (reactIs.isMemo(component)){\n return MEMO_STATICS;\n}// React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty=Object.defineProperty;\nvar getOwnPropertyNames=Object.getOwnPropertyNames;\nvar getOwnPropertySymbols=Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;\nvar getPrototypeOf=Object.getPrototypeOf;\nvar objectPrototype=Object.prototype;\nfunction hoistNonReactStatics(targetComponent,sourceComponent,blacklist){\n if (typeof sourceComponent !=='string'){\n // don't hoist over string (html) components\n if (objectPrototype){\n var inheritedComponent=getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !==objectPrototype){\n hoistNonReactStatics(targetComponent,inheritedComponent,blacklist);\n}\n}\n\n var keys=getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols){\n keys=keys.concat(getOwnPropertySymbols(sourceComponent));\n}\n\n var targetStatics=getStatics(targetComponent);\n var sourceStatics=getStatics(sourceComponent);\n\n for (var i=0;i < keys.length;++i){\n var key=keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])){\n var descriptor=getOwnPropertyDescriptor(sourceComponent,key);\n\n try{\n // Avoid failures from read-only properties\n defineProperty(targetComponent,key,descriptor);\n}\n}\n}\n}\n\n return targetComponent;\n}\n\nmodule.exports=hoistNonReactStatics;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanM/ZGE2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4146\n")},4164:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n\nfunction r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}const __WEBPACK_DEFAULT_EXPORT__=(clsx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE2NC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsY0FBYyxhQUFhLCtDQUErQyxnREFBZ0QsZUFBZSxRQUFRLElBQUksMENBQTBDLHlDQUF5QyxTQUFnQixnQkFBZ0Isd0NBQXdDLElBQUksbURBQW1ELFNBQVMsaUVBQWUsSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcz8wZWQxIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHIoZSl7dmFyIHQsZixuPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKW4rPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1lLmxlbmd0aDtmb3IodD0wO3Q8bzt0KyspZVt0XSYmKGY9cihlW3RdKSkmJihuJiYobis9XCIgXCIpLG4rPWYpfWVsc2UgZm9yKGYgaW4gZSllW2ZdJiYobiYmKG4rPVwiIFwiKSxuKz1mKTtyZXR1cm4gbn1leHBvcnQgZnVuY3Rpb24gY2xzeCgpe2Zvcih2YXIgZSx0LGY9MCxuPVwiXCIsbz1hcmd1bWVudHMubGVuZ3RoO2Y8bztmKyspKGU9YXJndW1lbnRzW2ZdKSYmKHQ9cihlKSkmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBkZWZhdWx0IGNsc3g7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4164\n')},4188:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(styleFunctionSx_defaultSxConfig)\n});\n\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/spacing.js+1 modules\nvar spacing=__webpack_require__(8248);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/style.js\nvar style=__webpack_require__(6481);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/merge.js\nvar merge=__webpack_require__(4620);\n;// ./node_modules/@mui/system/esm/compose.js\n\nfunction compose(...styles){\n const handlers=styles.reduce((acc,style)=>{\n style.filterProps.forEach(prop=>{\n acc[prop]=style;\n});\n return acc;\n});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn=props=>{\n return Object.keys(props).reduce((acc,prop)=>{\n if (handlers[prop]){\n return (0,merge.A)(acc,handlers[prop](props));\n}\n return acc;\n});\n};;\n fn.filterProps=styles.reduce((acc,style)=>acc.concat(style.filterProps),[]);\n return fn;\n}\n const esm_compose=(compose);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/breakpoints.js\nvar breakpoints=__webpack_require__(9452);\n;// ./node_modules/@mui/system/esm/borders.js\n\n\n\n\n\nfunction borderTransform(value){\n if (typeof value !=='number'){\n return value;\n}\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop,transform){\n return (0,style.Ay)({\n prop,\n themeKey:'borders',\n transform\n});\n}\nconst border=createBorderStyle('border',borderTransform);\nconst borderTop=createBorderStyle('borderTop',borderTransform);\nconst borderRight=createBorderStyle('borderRight',borderTransform);\nconst borderBottom=createBorderStyle('borderBottom',borderTransform);\nconst borderLeft=createBorderStyle('borderLeft',borderTransform);\nconst borderColor=createBorderStyle('borderColor');\nconst borderTopColor=createBorderStyle('borderTopColor');\nconst borderRightColor=createBorderStyle('borderRightColor');\nconst borderBottomColor=createBorderStyle('borderBottomColor');\nconst borderLeftColor=createBorderStyle('borderLeftColor');\nconst outline=createBorderStyle('outline',borderTransform);\nconst outlineColor=createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst borderRadius=props=>{\n if (props.borderRadius !==undefined && props.borderRadius !==null){\n const transformer=(0,spacing.MA)(props.theme,'shape.borderRadius',4,'borderRadius');\n const styleFromPropValue=propValue=>({\n borderRadius:(0,spacing._W)(transformer,propValue)\n});\n return (0,breakpoints.NI)(props,props.borderRadius,styleFromPropValue);\n}\n return null;\n};;\nborderRadius.filterProps=['borderRadius'];\nconst borders=esm_compose(border,borderTop,borderRight,borderBottom,borderLeft,borderColor,borderTopColor,borderRightColor,borderBottomColor,borderLeftColor,borderRadius,outline,outlineColor);\n const esm_borders=((null && (borders)));\n;// ./node_modules/@mui/system/esm/cssGrid.js\n\n\n\n\n\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst gap=props=>{\n if (props.gap !==undefined && props.gap !==null){\n const transformer=(0,spacing.MA)(props.theme,'spacing',8,'gap');\n const styleFromPropValue=propValue=>({\n gap:(0,spacing._W)(transformer,propValue)\n});\n return (0,breakpoints.NI)(props,props.gap,styleFromPropValue);\n}\n return null;\n};;\ngap.filterProps=['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst columnGap=props=>{\n if (props.columnGap !==undefined && props.columnGap !==null){\n const transformer=(0,spacing.MA)(props.theme,'spacing',8,'columnGap');\n const styleFromPropValue=propValue=>({\n columnGap:(0,spacing._W)(transformer,propValue)\n});\n return (0,breakpoints.NI)(props,props.columnGap,styleFromPropValue);\n}\n return null;\n};;\ncolumnGap.filterProps=['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nconst rowGap=props=>{\n if (props.rowGap !==undefined && props.rowGap !==null){\n const transformer=(0,spacing.MA)(props.theme,'spacing',8,'rowGap');\n const styleFromPropValue=propValue=>({\n rowGap:(0,spacing._W)(transformer,propValue)\n});\n return (0,breakpoints.NI)(props,props.rowGap,styleFromPropValue);\n}\n return null;\n};;\nrowGap.filterProps=['rowGap'];\nconst gridColumn=(0,style.Ay)({\n prop:'gridColumn'\n});\nconst gridRow=(0,style.Ay)({\n prop:'gridRow'\n});\nconst gridAutoFlow=(0,style.Ay)({\n prop:'gridAutoFlow'\n});\nconst gridAutoColumns=(0,style.Ay)({\n prop:'gridAutoColumns'\n});\nconst gridAutoRows=(0,style.Ay)({\n prop:'gridAutoRows'\n});\nconst gridTemplateColumns=(0,style.Ay)({\n prop:'gridTemplateColumns'\n});\nconst gridTemplateRows=(0,style.Ay)({\n prop:'gridTemplateRows'\n});\nconst gridTemplateAreas=(0,style.Ay)({\n prop:'gridTemplateAreas'\n});\nconst gridArea=(0,style.Ay)({\n prop:'gridArea'\n});\nconst grid=esm_compose(gap,columnGap,rowGap,gridColumn,gridRow,gridAutoFlow,gridAutoColumns,gridAutoRows,gridTemplateColumns,gridTemplateRows,gridTemplateAreas,gridArea);\n const cssGrid=((null && (grid)));\n;// ./node_modules/@mui/system/esm/palette.js\n\n\nfunction paletteTransform(value,userValue){\n if (userValue==='grey'){\n return userValue;\n}\n return value;\n}\nconst color=(0,style.Ay)({\n prop:'color',\n themeKey:'palette',\n transform:paletteTransform\n});\nconst bgcolor=(0,style.Ay)({\n prop:'bgcolor',\n cssProperty:'backgroundColor',\n themeKey:'palette',\n transform:paletteTransform\n});\nconst backgroundColor=(0,style.Ay)({\n prop:'backgroundColor',\n themeKey:'palette',\n transform:paletteTransform\n});\nconst palette=esm_compose(color,bgcolor,backgroundColor);\n const esm_palette=((null && (palette)));\n;// ./node_modules/@mui/system/esm/sizing.js\n\n\n\nfunction sizingTransform(value){\n return value <=1 && value !==0 ? `${value * 100}%`:value;\n}\nconst width=(0,style.Ay)({\n prop:'width',\n transform:sizingTransform\n});\nconst maxWidth=props=>{\n if (props.maxWidth !==undefined && props.maxWidth !==null){\n const styleFromPropValue=propValue=>{\n var _props$theme,_props$theme2;\n const breakpoint=((_props$theme=props.theme)==null || (_props$theme=_props$theme.breakpoints)==null || (_props$theme=_props$theme.values)==null ? void 0 :_props$theme[propValue]) || breakpoints.zu[propValue];\n if (!breakpoint){\n return{\n maxWidth:sizingTransform(propValue)\n};\n}\n if (((_props$theme2=props.theme)==null || (_props$theme2=_props$theme2.breakpoints)==null ? void 0 :_props$theme2.unit) !=='px'){\n return{\n maxWidth:`${breakpoint}${props.theme.breakpoints.unit}`\n};\n}\n return{\n maxWidth:breakpoint\n};\n};\n return (0,breakpoints.NI)(props,props.maxWidth,styleFromPropValue);\n}\n return null;\n};\nmaxWidth.filterProps=['maxWidth'];\nconst minWidth=(0,style.Ay)({\n prop:'minWidth',\n transform:sizingTransform\n});\nconst height=(0,style.Ay)({\n prop:'height',\n transform:sizingTransform\n});\nconst maxHeight=(0,style.Ay)({\n prop:'maxHeight',\n transform:sizingTransform\n});\nconst minHeight=(0,style.Ay)({\n prop:'minHeight',\n transform:sizingTransform\n});\nconst sizeWidth=(0,style.Ay)({\n prop:'size',\n cssProperty:'width',\n transform:sizingTransform\n});\nconst sizeHeight=(0,style.Ay)({\n prop:'size',\n cssProperty:'height',\n transform:sizingTransform\n});\nconst boxSizing=(0,style.Ay)({\n prop:'boxSizing'\n});\nconst sizing=esm_compose(width,maxWidth,minWidth,height,maxHeight,minHeight,boxSizing);\n const esm_sizing=((null && (sizing)));\n;// ./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js\n\n\n\n\n\nconst defaultSxConfig={\n // borders\n border:{\n themeKey:'borders',\n transform:borderTransform\n},\n borderTop:{\n themeKey:'borders',\n transform:borderTransform\n},\n borderRight:{\n themeKey:'borders',\n transform:borderTransform\n},\n borderBottom:{\n themeKey:'borders',\n transform:borderTransform\n},\n borderLeft:{\n themeKey:'borders',\n transform:borderTransform\n},\n borderColor:{\n themeKey:'palette'\n},\n borderTopColor:{\n themeKey:'palette'\n},\n borderRightColor:{\n themeKey:'palette'\n},\n borderBottomColor:{\n themeKey:'palette'\n},\n borderLeftColor:{\n themeKey:'palette'\n},\n outline:{\n themeKey:'borders',\n transform:borderTransform\n},\n outlineColor:{\n themeKey:'palette'\n},\n borderRadius:{\n themeKey:'shape.borderRadius',\n style:borderRadius\n},\n // palette\n color:{\n themeKey:'palette',\n transform:paletteTransform\n},\n bgcolor:{\n themeKey:'palette',\n cssProperty:'backgroundColor',\n transform:paletteTransform\n},\n backgroundColor:{\n themeKey:'palette',\n transform:paletteTransform\n},\n // spacing\n p:{\n style:spacing.Ms\n},\n pt:{\n style:spacing.Ms\n},\n pr:{\n style:spacing.Ms\n},\n pb:{\n style:spacing.Ms\n},\n pl:{\n style:spacing.Ms\n},\n px:{\n style:spacing.Ms\n},\n py:{\n style:spacing.Ms\n},\n padding:{\n style:spacing.Ms\n},\n paddingTop:{\n style:spacing.Ms\n},\n paddingRight:{\n style:spacing.Ms\n},\n paddingBottom:{\n style:spacing.Ms\n},\n paddingLeft:{\n style:spacing.Ms\n},\n paddingX:{\n style:spacing.Ms\n},\n paddingY:{\n style:spacing.Ms\n},\n paddingInline:{\n style:spacing.Ms\n},\n paddingInlineStart:{\n style:spacing.Ms\n},\n paddingInlineEnd:{\n style:spacing.Ms\n},\n paddingBlock:{\n style:spacing.Ms\n},\n paddingBlockStart:{\n style:spacing.Ms\n},\n paddingBlockEnd:{\n style:spacing.Ms\n},\n m:{\n style:spacing.Lc\n},\n mt:{\n style:spacing.Lc\n},\n mr:{\n style:spacing.Lc\n},\n mb:{\n style:spacing.Lc\n},\n ml:{\n style:spacing.Lc\n},\n mx:{\n style:spacing.Lc\n},\n my:{\n style:spacing.Lc\n},\n margin:{\n style:spacing.Lc\n},\n marginTop:{\n style:spacing.Lc\n},\n marginRight:{\n style:spacing.Lc\n},\n marginBottom:{\n style:spacing.Lc\n},\n marginLeft:{\n style:spacing.Lc\n},\n marginX:{\n style:spacing.Lc\n},\n marginY:{\n style:spacing.Lc\n},\n marginInline:{\n style:spacing.Lc\n},\n marginInlineStart:{\n style:spacing.Lc\n},\n marginInlineEnd:{\n style:spacing.Lc\n},\n marginBlock:{\n style:spacing.Lc\n},\n marginBlockStart:{\n style:spacing.Lc\n},\n marginBlockEnd:{\n style:spacing.Lc\n},\n // display\n displayPrint:{\n cssProperty:false,\n transform:value=>({\n '@media print':{\n display:value\n}\n})\n},\n // grid\n gap:{\n style:gap\n},\n rowGap:{\n style:rowGap\n},\n columnGap:{\n style:columnGap\n},\n zIndex:{\n themeKey:'zIndex'\n},\n // shadows\n boxShadow:{\n themeKey:'shadows'\n},\n // sizing\n width:{\n transform:sizingTransform\n},\n maxWidth:{\n style:maxWidth\n},\n minWidth:{\n transform:sizingTransform\n},\n height:{\n transform:sizingTransform\n},\n maxHeight:{\n transform:sizingTransform\n},\n minHeight:{\n transform:sizingTransform\n},\n // typography\n fontFamily:{\n themeKey:'typography'\n},\n fontSize:{\n themeKey:'typography'\n},\n fontStyle:{\n themeKey:'typography'\n},\n fontWeight:{\n themeKey:'typography'\n},\n typography:{\n cssProperty:false,\n themeKey:'typography'\n}\n};\n const styleFunctionSx_defaultSxConfig=(defaultSxConfig);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLEdBQUc7QUFDSCxTQUFTO0FBQ1QsV0FBVztBQUNYLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUIsR0FBRztBQUNIO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLEdBQUc7QUFDSDtBQUNBLGVBQWUsZUFBZTtBQUM5QixHQUFHO0FBQ0g7QUFDQSxlQUFlLGVBQWU7QUFDOUIsR0FBRztBQUNIO0FBQ0EsZUFBZSxlQUFlO0FBQzlCLEdBQUc7QUFDSDtBQUNBLGVBQWUsZUFBZTtBQUM5QixHQUFHO0FBQ0gsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCxtQkFBbUI7QUFDbkIsbUJBQW1CO0FBQ25CLGdCQUFnQjtBQUNoQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFlLGVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY29tcG9zZS5qcz9hN2JlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzP2ZjMGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanM/NzQxYiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vcGFsZXR0ZS5qcz8xZjI5Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanM/MDg4YyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcz84NjYwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gYm9yZGVyVHJhbnNmb3JtKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5mdW5jdGlvbiBjcmVhdGVCb3JkZXJTdHlsZShwcm9wLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIHN0eWxlKHtcbiAgICBwcm9wLFxuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtXG4gIH0pO1xufVxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXInLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b20gPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21Db2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b21Db2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmUnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IG91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc2hhcGUuYm9yZGVyUmFkaXVzJywgNCwgJ2JvcmRlclJhZGl1cycpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSBjb21wb3NlKGJvcmRlciwgYm9yZGVyVG9wLCBib3JkZXJSaWdodCwgYm9yZGVyQm90dG9tLCBib3JkZXJMZWZ0LCBib3JkZXJDb2xvciwgYm9yZGVyVG9wQ29sb3IsIGJvcmRlclJpZ2h0Q29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIGJvcmRlclJhZGl1cywgb3V0bGluZSwgb3V0bGluZUNvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IGJvcmRlcnM7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuZXhwb3J0IGNvbnN0IGdyaWRDb2x1bW4gPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFJvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0Zsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0NvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b1Jvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBcmVhID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSBjb21wb3NlKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG5leHBvcnQgZGVmYXVsdCBncmlkOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCB2YWx1ZXMgYXMgYnJlYWtwb2ludHNWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBzaXppbmdUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIDw9IDEgJiYgdmFsdWUgIT09IDAgPyBgJHt2YWx1ZSAqIDEwMH0lYCA6IHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IHdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZTI7XG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lW3Byb3BWYWx1ZV0pIHx8IGJyZWFrcG9pbnRzVmFsdWVzW3Byb3BWYWx1ZV07XG4gICAgICBpZiAoIWJyZWFrcG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogc2l6aW5nVHJhbnNmb3JtKHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICgoKF9wcm9wcyR0aGVtZTIgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lMiA9IF9wcm9wcyR0aGVtZTIuYnJlYWtwb2ludHMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUyLnVuaXQpICE9PSAncHgnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IGAke2JyZWFrcG9pbnR9JHtwcm9wcy50aGVtZS5icmVha3BvaW50cy51bml0fWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1heFdpZHRoOiBicmVha3BvaW50XG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5tYXhXaWR0aCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5tYXhXaWR0aC5maWx0ZXJQcm9wcyA9IFsnbWF4V2lkdGgnXTtcbmV4cG9ydCBjb25zdCBtaW5XaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWluSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVXaWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IHNpemVIZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgYm94U2l6aW5nID0gc3R5bGUoe1xuICBwcm9wOiAnYm94U2l6aW5nJ1xufSk7XG5jb25zdCBzaXppbmcgPSBjb21wb3NlKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG5leHBvcnQgZGVmYXVsdCBzaXppbmc7IiwiaW1wb3J0IHsgcGFkZGluZywgbWFyZ2luIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBib3JkZXJSYWRpdXMsIGJvcmRlclRyYW5zZm9ybSB9IGZyb20gJy4uL2JvcmRlcnMnO1xuaW1wb3J0IHsgZ2FwLCByb3dHYXAsIGNvbHVtbkdhcCB9IGZyb20gJy4uL2Nzc0dyaWQnO1xuaW1wb3J0IHsgcGFsZXR0ZVRyYW5zZm9ybSB9IGZyb20gJy4uL3BhbGV0dGUnO1xuaW1wb3J0IHsgbWF4V2lkdGgsIHNpemluZ1RyYW5zZm9ybSB9IGZyb20gJy4uL3NpemluZyc7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IGJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IGdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogcm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBjb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heFdpZHRoOiB7XG4gICAgc3R5bGU6IG1heFdpZHRoXG4gIH0sXG4gIG1pbldpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4SGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWluSGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeENvbmZpZzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4188\n")},4239:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n __webpack_require__.d(__webpack_exports__,{\n "default":()=>(_deepmerge__WEBPACK_IMPORTED_MODULE_0__.A),\n isPlainObject:()=>(_deepmerge__WEBPACK_IMPORTED_MODULE_0__.Q)\n});\n var _deepmerge__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1317);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIzOS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZWVwbWVyZ2UvaW5kZXguanM/MmJlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9kZWVwbWVyZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWVwbWVyZ2UnOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4239\n')},4405:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n\n\n\nvar REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element"),\n REACT_PORTAL_TYPE=Symbol.for("react.portal"),\n REACT_FRAGMENT_TYPE=Symbol.for("react.fragment"),\n REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode"),\n REACT_PROFILER_TYPE=Symbol.for("react.profiler");\nSymbol.for("react.provider");\nvar REACT_CONSUMER_TYPE=Symbol.for("react.consumer"),\n REACT_CONTEXT_TYPE=Symbol.for("react.context"),\n REACT_FORWARD_REF_TYPE=Symbol.for("react.forward_ref"),\n REACT_SUSPENSE_TYPE=Symbol.for("react.suspense"),\n REACT_SUSPENSE_LIST_TYPE=Symbol.for("react.suspense_list"),\n REACT_MEMO_TYPE=Symbol.for("react.memo"),\n REACT_LAZY_TYPE=Symbol.for("react.lazy"),\n REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition"),\n REACT_CLIENT_REFERENCE=Symbol.for("react.client.reference");\nfunction typeOf(object){\n if ("object"===typeof object && null !==object){\n var $$typeof=object.$$typeof;\n switch ($$typeof){\n case REACT_ELEMENT_TYPE:\n switch (((object=object.type),object)){\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object=object && object.$$typeof),object)){\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n}\n}\n case REACT_PORTAL_TYPE:\n return $$typeof;\n}\n}\n}\n__webpack_unused_export__=REACT_CONSUMER_TYPE;\n__webpack_unused_export__=REACT_CONTEXT_TYPE;\n__webpack_unused_export__=REACT_ELEMENT_TYPE;\nexports.vM=REACT_FORWARD_REF_TYPE;\n__webpack_unused_export__=REACT_FRAGMENT_TYPE;\n__webpack_unused_export__=REACT_LAZY_TYPE;\nexports.lD=REACT_MEMO_TYPE;\n__webpack_unused_export__=REACT_PORTAL_TYPE;\n__webpack_unused_export__=REACT_PROFILER_TYPE;\n__webpack_unused_export__=REACT_STRICT_MODE_TYPE;\n__webpack_unused_export__=REACT_SUSPENSE_TYPE;\n__webpack_unused_export__=REACT_SUSPENSE_LIST_TYPE;\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_CONSUMER_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_CONTEXT_TYPE;\n};\n__webpack_unused_export__=function (object){\n return (\n "object"===typeof object &&\n null !==object &&\n object.$$typeof===REACT_ELEMENT_TYPE\n);\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_FORWARD_REF_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_FRAGMENT_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_LAZY_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_MEMO_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_PORTAL_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_PROFILER_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_STRICT_MODE_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_SUSPENSE_TYPE;\n};\n__webpack_unused_export__=function (object){\n return typeOf(object)===REACT_SUSPENSE_LIST_TYPE;\n};\n__webpack_unused_export__=function (type){\n return "string"===typeof type ||\n "function"===typeof type ||\n type===REACT_FRAGMENT_TYPE ||\n type===REACT_PROFILER_TYPE ||\n type===REACT_STRICT_MODE_TYPE ||\n type===REACT_SUSPENSE_TYPE ||\n type===REACT_SUSPENSE_LIST_TYPE ||\n ("object"===typeof type &&\n null !==type &&\n (type.$$typeof===REACT_LAZY_TYPE ||\n type.$$typeof===REACT_MEMO_TYPE ||\n type.$$typeof===REACT_CONTEXT_TYPE ||\n type.$$typeof===REACT_CONSUMER_TYPE ||\n type.$$typeof===REACT_FORWARD_REF_TYPE ||\n type.$$typeof===REACT_CLIENT_REFERENCE ||\n void 0 !==type.getModuleId))\n ? !0\n:!1;\n};\n__webpack_unused_export__=typeOf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQwNS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBdUI7QUFDdkIseUJBQXVCO0FBQ3ZCLHlCQUFlO0FBQ2YsVUFBa0I7QUFDbEIseUJBQWdCO0FBQ2hCLHlCQUFZO0FBQ1osVUFBWTtBQUNaLHlCQUFjO0FBQ2QseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBZ0I7QUFDaEIseUJBQW9CO0FBQ3BCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx5QkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQSx5QkFBa0I7QUFDbEI7QUFDQTtBQUNBLHlCQUFjO0FBQ2Q7QUFDQTtBQUNBLHlCQUFjO0FBQ2Q7QUFDQTtBQUNBLHlCQUFnQjtBQUNoQjtBQUNBO0FBQ0EseUJBQWtCO0FBQ2xCO0FBQ0E7QUFDQSx5QkFBb0I7QUFDcEI7QUFDQTtBQUNBLHlCQUFrQjtBQUNsQjtBQUNBO0FBQ0EseUJBQXNCO0FBQ3RCO0FBQ0E7QUFDQSx5QkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBYyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLmpzPzk2NGEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG5TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG52YXIgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gIFJFQUNUX1ZJRVdfVFJBTlNJVElPTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKSxcbiAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJiBudWxsICE9PSBvYmplY3QpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QudHlwZSksIG9iamVjdCkpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9WSUVXX1RSQU5TSVRJT05fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QgJiYgb2JqZWN0LiQkdHlwZW9mKSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbmV4cG9ydHMuRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbmV4cG9ydHMuTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbmV4cG9ydHMuUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG5leHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG5leHBvcnRzLlN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05TVU1FUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufTtcbmV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICApO1xufTtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59O1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59O1xuZXhwb3J0cy5pc0xhenkgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufTtcbmV4cG9ydHMuaXNNZW1vID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn07XG5leHBvcnRzLmlzUG9ydGFsID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufTtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufTtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59O1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fFxuICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8XG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEUgfHxcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFIHx8XG4gICAgICAgIHZvaWQgMCAhPT0gdHlwZS5nZXRNb2R1bGVJZCkpXG4gICAgPyAhMFxuICAgIDogITE7XG59O1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4405\n')},4438:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop){\n return prop !=='ownerState' && prop !=='theme' && prop !=='sx' && prop !=='as';\n}\n const __WEBPACK_DEFAULT_EXPORT__=(slotShouldForwardProp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQzOC5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3Nsb3RTaG91bGRGb3J3YXJkUHJvcC5qcz8xNGVkIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNvcGllZCBmcm9tIEBtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZFxuZnVuY3Rpb24gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmV4cG9ydCBkZWZhdWx0IHNsb3RTaG91bGRGb3J3YXJkUHJvcDsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4438\n")},4620:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1317);\n\nfunction merge(acc,item){\n if (!item){\n return acc;\n}\n return (0,_mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_0__ .A)(acc,item,{\n clone:false // No need to clone deep,it\'s way faster.\n});\n}\n const __WEBPACK_DEFAULT_EXPORT__=(merge);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYyMC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx5RUFBUztBQUNsQjtBQUNBLEdBQUc7QUFDSDtBQUNBLGlFQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVyZ2UuanM/NzA0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmZ1bmN0aW9uIG1lcmdlKGFjYywgaXRlbSkge1xuICBpZiAoIWl0ZW0pIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIHJldHVybiBkZWVwbWVyZ2UoYWNjLCBpdGVtLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcCwgaXQncyB3YXkgZmFzdGVyLlxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IG1lcmdlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4620\n')},4634:module=>{eval('function _extends(){\n return module.exports=_extends=Object.assign ? Object.assign.bind() :function (n){\n for (var e=1;e < arguments.length;e++){\n var t=arguments[e];).hasOwnProperty.call(t,r) && (n[r]=t[r]);\n}\n return n;\n},module.exports.__esModule=true,module.exports["default"]=module.exports,_extends.apply(null,arguments);\n}\nmodule.exports=_extends,module.exports.__esModule=true,module.exports["default"]=module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYzNC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHlCQUF5QjtBQUNoRTtBQUNBLDJCQUEyQix5QkFBeUIsU0FBUyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/OGY5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9leHRlbmRzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4634\n')},4661:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(useId)\n});\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n'use client';\n\n\nlet globalId=0;\nfunction useGlobalId(idOverride){\n const [defaultId,setDefaultId]=react__WEBPACK_IMPORTED_MODULE_0__.useState(idOverride);\n const id=idOverride || defaultId;\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(()=>{\n if (defaultId==null){\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem:https://en.wikipedia.org/wiki/Birthday_problem\n globalId+=1;\n setDefaultId(`mui-${globalId}`);\n}\n},[defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation,but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId=react__WEBPACK_IMPORTED_MODULE_0__['useId'.toString()];\n\nfunction useId(idOverride){\n if (maybeReactUseId !==undefined){\n const reactId=maybeReactUseId();\n return idOverride !=null ? idOverride:reactId;\n}\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY2MS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUUrQjtBQUMvQjtBQUNBO0FBQ0Esb0NBQW9DLDJDQUFjO0FBQ2xEO0FBQ0EsRUFBRSw0Q0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsU0FBUztBQUNuQztBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLGtDQUFLO0FBQzdCO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBLGFBQWE7QUFDYjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS91c2VJZC91c2VJZC5qcz8wMzc3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4661\n")},4684:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n C:()=>(CacheProvider),\n E:()=>(Emotion$1),\n T:()=>(ThemeContext),\n c:()=>(createEmotionProps),\n h:()=>(hasOwn),\n w:()=>(withEmotionCache)\n});\n\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _emotion_cache__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(5655);\n var _emotion_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(41);\n var _emotion_serialize__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(3174);\n var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(1287);\n\n\n\n\n\n\n\n\n\n\nvar isDevelopment=false;\n\nvar EmotionCacheContext=react__WEBPACK_IMPORTED_MODULE_0__.createContext(// we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !=='undefined' ? (0,_emotion_cache__WEBPACK_IMPORTED_MODULE_1__ .A)({\n key:'css'\n}) :null);\n\nvar CacheProvider=EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache=function useEmotionCache(){\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache=function withEmotionCache(func){\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props,ref){\n // the cache will never be null in the browser\n var cache=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(EmotionCacheContext);\n return func(props,cache,ref);\n});\n};);\n\nvar useTheme=function useTheme(){\n return React.useContext(ThemeContext);\n};\n\nvar getTheme=function getTheme(outerTheme,theme){\n if (typeof theme==='function'){\n var mergedTheme=theme(outerTheme);\n\n return mergedTheme;\n},outerTheme,theme);\n};\n\nvar createCacheWithTheme=(null && (weakMemoize(function (outerTheme){\n return weakMemoize(function (theme){\n return getTheme(outerTheme,theme);\n});\n})));\nvar ThemeProvider=function ThemeProvider(props){\n var theme=React.useContext(ThemeContext);\n\n if (props.theme !==theme){\n theme=createCacheWithTheme(theme)(props.theme);\n}\n\n return React.createElement(ThemeContext.Provider,{\n value:theme\n},props.children);\n};\nfunction withTheme(Component){\n var componentName=Component.displayName || Component.name || 'Component';\n var WithTheme=React.forwardRef(function render(props,ref){\n var theme=React.useContext(ThemeContext);\n return React.createElement(Component,_extends({\n theme:theme,\n ref:ref\n},props));\n});\n WithTheme.displayName=\"WithTheme(\"+componentName+\")\";\n return hoistNonReactStatics(WithTheme,Component);\n}.hasOwnProperty;\n\nvar typePropName='__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps=function createEmotionProps(type,props){\n\n var newProps={};\n\n for (var _key in props){\n if (hasOwn.call(props,_key)){\n newProps[_key]=props[_key];\n}\n}\n\n newProps[typePropName]=type;// Runtime labeling is an opt-in feature because:\n\n return newProps;\n};\n\nvar Insertion=function Insertion(_ref){\n var cache=_ref.cache,\n serialized=_ref.serialized,\n isStringTag=_ref.isStringTag;\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__ .SF)(cache,serialized,isStringTag);\n (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__ .s)(function (){\n return (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__ .sk)(cache,serialized,isStringTag);\n});\n\n return null;\n};\n\nvar Emotion=withEmotionCache(function (props,cache,ref){\n var cssProp=props.css;// so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp==='string' && cache.registered[cssProp] !==undefined){\n cssProp=cache.registered[cssProp];\n}\n\n var WrappedComponent=props[typePropName];\n var registeredStyles=[cssProp];\n var className='';\n\n if (typeof props.className==='string'){\n className=(0,_emotion_utils__WEBPACK_IMPORTED_MODULE_4__ .Rk)(cache.registered,registeredStyles,props.className);\n}else if (props.className !=null){\n className=props.className+\" \";\n}\n\n var serialized=(0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__ .J)(registeredStyles,undefined,react__WEBPACK_IMPORTED_MODULE_0__.useContext(ThemeContext));\n\n className+=cache.key+\"-\"+serialized.name;;\n\n for (var _key2 in props){\n if (hasOwn.call(props,_key2) && _key2 !=='css' && _key2 !==typePropName && (!isDevelopment)){\n newProps[_key2]=props[_key2];\n}\n}\n\n newProps.className=className;\n\n if (ref){\n newProps.ref=ref;\n}\n\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,react__WEBPACK_IMPORTED_MODULE_0__.createElement(Insertion,{\n cache:cache,\n serialized:serialized,\n isStringTag:typeof WrappedComponent==='string'\n}),react__WEBPACK_IMPORTED_MODULE_0__.createElement(WrappedComponent,newProps));\n});\n\nvar Emotion$1=Emotion;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY4NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBK0I7QUFDZ0I7QUFDTjtBQUNpQjtBQUNWO0FBQ3NEO0FBQ25CO0FBQzlCO0FBQ21EOztBQUV4Rzs7QUFFQSx5Q0FBeUMsZ0RBQW1CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsbUVBQVc7QUFDL0Q7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLGlEQUFVO0FBQ2hDO0FBQ0EsZ0JBQWdCLGlEQUFVO0FBQzFCO0FBQ0EsR0FBRztBQUNIOztBQUVBLGtDQUFrQyxnREFBbUIsR0FBRzs7QUFFeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQjs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSxlQUFlOztBQUVmO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdFQUFjO0FBQ2hCLEVBQUUsK0hBQXdDO0FBQzFDLFdBQVcsc0VBQVk7QUFDdkIsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQiw2RUFBbUI7QUFDbkMsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsbUJBQW1CLDRFQUFlLDhCQUE4Qiw2Q0FBZ0I7O0FBRWhGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGdEQUFtQixDQUFDLDJDQUFjLHFCQUFxQixnREFBbUI7QUFDaEc7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0IsZ0RBQW1CO0FBQ3RDLENBQUM7O0FBRUQ7O0FBRW9PIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanM/OWI4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBFbW90aW9uQ2FjaGVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCggLy8gd2UncmUgZG9pbmcgdGhpcyB0byBhdm9pZCBwcmVjb25zdHJ1Y3QncyBkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gdGhpcyBvbmUgY2FzZVxuLy8gYmVjYXVzZSB0aGlzIG1vZHVsZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlXG4vLyBidXQgaXQncyBhbHNvIHJlcXVpcmVkIGluIHJlYWN0IG5hdGl2ZSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMgc29tZXRpbWVzXG4vLyBhbmQgd2UgY291bGQgaGF2ZSBhIHNwZWNpYWwgYnVpbGQganVzdCBmb3IgdGhhdFxuLy8gYnV0IHRoaXMgaXMgbXVjaCBlYXNpZXIgYW5kIHRoZSBuYXRpdmUgcGFja2FnZXNcbi8vIG1pZ2h0IHVzZSBhIGRpZmZlcmVudCB0aGVtZSBjb250ZXh0IGluIHRoZSBmdXR1cmUgYW55d2F5XG50eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gLyogI19fUFVSRV9fICovY3JlYXRlQ2FjaGUoe1xuICBrZXk6ICdjc3MnXG59KSA6IG51bGwpO1xuXG52YXIgQ2FjaGVQcm92aWRlciA9IEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXI7XG52YXIgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gdXNlRW1vdGlvbkNhY2hlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbn07XG5cbnZhciB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCB0aGVtZSk7XG59O1xuXG52YXIgY3JlYXRlQ2FjaGVXaXRoVGhlbWUgPSAvKiAjX19QVVJFX18gKi93ZWFrTWVtb2l6ZShmdW5jdGlvbiAob3V0ZXJUaGVtZSkge1xuICByZXR1cm4gd2Vha01lbW9pemUoZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgcmV0dXJuIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKTtcbiAgfSk7XG59KTtcbnZhciBUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH0pO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkpKSB7XG4gICAgICBuZXdQcm9wc1tfa2V5XSA9IHByb3BzW19rZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBSdW50aW1lIGxhYmVsaW5nIGlzIGFuIG9wdC1pbiBmZWF0dXJlIGJlY2F1c2U6XG5cbiAgcmV0dXJuIG5ld1Byb3BzO1xufTtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIEVtb3Rpb24gPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIgX2tleTIgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIF9rZXkyKSAmJiBfa2V5MiAhPT0gJ2NzcycgJiYgX2tleTIgIT09IHR5cGVQcm9wTmFtZSAmJiAoIWlzRGV2ZWxvcG1lbnQgKSkge1xuICAgICAgbmV3UHJvcHNbX2tleTJdID0gcHJvcHNbX2tleTJdO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4684\n")},4705:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(debounce)\n});\n// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is~3 kB and debounce~300 B.\nfunction debounce(func,wait=166){\n let timeout;\n function debounced(...args){\n const later=()=>{\n // @ts-ignore\n func.apply(this,args);\n};\n clearTimeout(timeout);\n timeout=setTimeout(later,wait);\n}\n debounced.clear=()=>{\n clearTimeout(timeout);\n};\n return debounced;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDcwNS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vZGVib3VuY2UvZGVib3VuY2UuanM/NDI4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3JyZXNwb25kcyB0byAxMCBmcmFtZXMgYXQgNjAgSHouXG4vLyBBIGZldyBieXRlcyBwYXlsb2FkIG92ZXJoZWFkIHdoZW4gbG9kYXNoL2RlYm91bmNlIGlzIH4zIGtCIGFuZCBkZWJvdW5jZSB+MzAwIEIuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0ID0gMTY2KSB7XG4gIGxldCB0aW1lb3V0O1xuICBmdW5jdGlvbiBkZWJvdW5jZWQoLi4uYXJncykge1xuICAgIGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gIH1cbiAgZGVib3VuY2VkLmNsZWFyID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfTtcbiAgcmV0dXJuIGRlYm91bmNlZDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4705\n")},4737:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n __webpack_require__(8989);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDczNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsK0NBQTREO0FBQzlELEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/ZDJmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4737\n")},4848:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n module.exports=__webpack_require__(1020);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQXFFO0FBQ3ZFLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcz85Y2E1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4848\n")},4877:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(ownerWindow)\n});\n var _ownerDocument__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2325);\n\nfunction ownerWindow(node){\n const doc=(0,_ownerDocument__WEBPACK_IMPORTED_MODULE_0__ .A)(node);\n return doc.defaultView || window;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg3Ny5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTZDO0FBQzlCO0FBQ2YsY0FBYyxtRUFBYTtBQUMzQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vb3duZXJXaW5kb3cvb3duZXJXaW5kb3cuanM/ZTFiNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG93bmVyV2luZG93KG5vZGUpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChub2RlKTtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4877\n')},4893:module=>{eval('function _objectWithoutPropertiesLoose(r,e){\n if (null==r) return{};;.hasOwnProperty.call(r,n)){\n if (-1 !==e.indexOf(n)) continue;\n t[n]=r[n];\n}\n return t;\n}\nmodule.exports=_objectWithoutPropertiesLoose,module.exports.__esModule=true,module.exports["default"]=module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg5My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx5QkFBeUIsU0FBUyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/Yzk3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4893\n')},4994:module=>{eval('function _interopRequireDefault(e){\n return e && e.__esModule ? e :{\n "default":e\n};\n}\nmodule.exports=_interopRequireDefault,module.exports.__esModule=true,module.exports["default"]=module.exports;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk5NC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QixTQUFTLHlCQUF5QiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzP2I3YTYiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7XG4gIHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgXCJkZWZhdWx0XCI6IGVcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4994\n')},5056:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\n\nfunction setAttributesWithoutAttributes(styleElement){\n var nonce=true ? __webpack_require__.nc :0;\n if (nonce){\n styleElement.setAttribute("nonce",nonce);\n}\n}\nmodule.exports=setAttributesWithoutAttributes;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsY0FBYyxLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzP2RkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5056\n')},5072:module=>{"use strict";eval('\n\nvar stylesInDOM=[];\nfunction getIndexByIdentifier(identifier){\n var result=-1;\n for (var i=0;i < stylesInDOM.length;i++){\n if (stylesInDOM[i].identifier===identifier){\n result=i;\n break;\n}\n}\n return result;\n}\nfunction modulesToDom(list,options){\n var idCountMap={};\n var identifiers=[];\n for (var i=0;i < list.length;i++){\n var item=list[i];\n var id=options.base ? item[0]+options.base :item[0];\n var count=idCountMap[id] || 0;\n var identifier="".concat(id," ").concat(count);\n idCountMap[id]=count+1;\n var indexByIdentifier=getIndexByIdentifier(identifier);\n var obj={\n css:item[1],\n media:item[2],\n sourceMap:item[3],\n supports:item[4],\n layer:item[5]\n};\n if (indexByIdentifier !==-1){\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n}else{\n var updater=addElementStyle(obj,options);\n options.byIndex=i;\n stylesInDOM.splice(i,0,{\n identifier:identifier,\n updater:updater,\n references:1\n});\n}\n identifiers.push(identifier);\n}\n return identifiers;\n}\nfunction addElementStyle(obj,options){\n var api=options.domAPI(options);\n api.update(obj);\n var updater=function updater(newObj){\n if (newObj){\n if (newObj.css===obj.css && newObj.media===obj.media && newObj.sourceMap===obj.sourceMap && newObj.supports===obj.supports && newObj.layer===obj.layer){\n return;\n}\n api.update(obj=newObj);\n}else{\n api.remove();\n}\n};\n return updater;\n}\nmodule.exports=function (list,options){\n options=options ||{};\n list=list || [];\n var lastIdentifiers=modulesToDom(list,options);\n return function update(newList){\n newList=newList || [];\n for (var i=0;i < lastIdentifiers.length;i++){\n var identifier=lastIdentifiers[i];\n var index=getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n}\n var newLastIdentifiers=modulesToDom(newList,options);\n for (var _i=0;_i < lastIdentifiers.length;_i++){\n var _identifier=lastIdentifiers[_i];\n var _index=getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references===0){\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index,1);\n}\n}\n lastIdentifiers=newLastIdentifiers;\n};\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTA3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isd0JBQXdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDZCQUE2QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzPzJkYmEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5072\n')},5655:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(createCache)\n});\n\n;// ./node_modules/@emotion/sheet/dist/emotion-sheet.esm.js\nvar isDevelopment=false;\n\n\n\nfunction sheetForTag(tag){\n if (tag.sheet){\n return tag.sheet;\n}// this weirdness brought to you by firefox\n\n \n\n\n for (var i=0;i < document.styleSheets.length;i++){\n if (document.styleSheets[i].ownerNode===tag){\n return document.styleSheets[i];\n}\n}// this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options){\n var tag=document.createElement('style');\n tag.setAttribute('data-emotion',options.key);\n\n if (options.nonce !==undefined){\n tag.setAttribute('nonce',options.nonce);\n}\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s','');\n return tag;\n}\n\nvar StyleSheet=function (){\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options){\n var _this=this;\n\n this._insertTag=function (tag){\n var before;\n\n if (_this.tags.length===0){\n if (_this.insertionPoint){\n before=_this.insertionPoint.nextSibling;\n}else if (_this.prepend){\n before=_this.container.firstChild;\n}else{\n before=_this.before;\n}\n}else{\n before=_this.tags[_this.tags.length - 1].nextSibling;\n}\n\n _this.container.insertBefore(tag,before);\n\n _this.tags.push(tag);\n};\n\n this.isSpeedy=options.speedy===undefined ? !isDevelopment:options.speedy;\n this.tags=[];\n this.ctr=0;\n this.nonce=options.nonce;// key is the value of the data-emotion attribute,it's used to identify different sheets\n\n this.key=options.key;\n this.container=options.container;\n this.prepend=options.prepend;\n this.insertionPoint=options.insertionPoint;\n this.before=null;\n}\n\n var _proto=StyleSheet.prototype;\n\n _proto.hydrate=function hydrate(nodes){\n nodes.forEach(this._insertTag);\n};\n\n _proto.insert=function insert(rule){\n // the max length is how many rules we have per style tag,it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 :1)===0){\n this._insertTag(createStyleElement(this));\n}\n\n var tag=this.tags[this.tags.length - 1];\n\n if (this.isSpeedy){\n var sheet=sheetForTag(tag);\n\n try{\n // this is the ultrafast version,works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule,sheet.cssRules.length);\n}catch (e){\n}\n}else{\n tag.appendChild(document.createTextNode(rule));\n}\n\n this.ctr++;\n};\n\n _proto.flush=function flush(){\n this.tags.forEach(function (tag){\n var _tag$parentNode;\n\n return (_tag$parentNode=tag.parentNode)==null ? void 0:_tag$parentNode.removeChild(tag);\n});\n this.tags=[];\n this.ctr=0;\n};\n\n return StyleSheet;\n}();\n\n\n\n;// ./node_modules/stylis/src/Utility.js\n\nvar abs=Math.abs\n\n\nvar Utility_from=String.fromCharCode\n\n\nvar Utility_assign=Object.assign\n\n\nfunction hash (value,length){\n\treturn Utility_charat(value,0) ^ 45 ? (((((((length << 2) ^ Utility_charat(value,0)) << 2) ^ Utility_charat(value,1)) << 2) ^ Utility_charat(value,2)) << 2) ^ Utility_charat(value,3):0\n}\n\n\nfunction trim (value){\n\treturn value.trim()\n}\n\n\nfunction Utility_match (value,pattern){\n\treturn (value=pattern.exec(value)) ? value[0]:value\n}\n\n\nfunction Utility_replace (value,pattern,replacement){\n\treturn value.replace(pattern,replacement)\n}\n\n\nfunction indexof (value,search){\n\treturn value.indexOf(search)\n}\n\n\nfunction Utility_charat (value,index){\n\treturn value.charCodeAt(index) | 0\n}\n\n\nfunction Utility_substr (value,begin,end){\n\treturn value.slice(begin,end)\n}\n\n\nfunction Utility_strlen (value){\n\treturn value.length\n}\n\n\nfunction Utility_sizeof (value){\n\treturn value.length\n}\n\n\nfunction Utility_append (value,array){\n\treturn array.push(value),value\n}\n\n\nfunction Utility_combine (array,callback){\n\treturn array.map(callback).join('')\n}\n\n;// ./node_modules/stylis/src/Tokenizer.js\n\n\nvar line=1\nvar column=1\nvar Tokenizer_length=0\nvar position=0\nvar character=0\nvar characters=''\n\n\nfunction node (value,root,parent,type,props,children,length){\n\treturn{value:value,root:root,parent:parent,type:type,props:props,children:children,line:line,column:column,length:length,return:''}\n}\n\n\nfunction Tokenizer_copy (root,props){\n\treturn Utility_assign(node('',null,null,'',null,null,0),root,{length:-root.length},props)\n}\n\n\nfunction Tokenizer_char (){\n\treturn character\n}\n\n\nfunction prev (){\n\tcharacter=position>0 ? Utility_charat(characters,--position):0\n\n\tif (column--,character===10)\n\t\tcolumn=1,line--\n\n\treturn character\n}\n\n\nfunction next (){\n\tcharacter=position < Tokenizer_length ? Utility_charat(characters,position++):0\n\n\tif (column++,character===10)\n\t\tcolumn=1,line++\n\n\treturn character\n}\n\n\nfunction peek (){\n\treturn Utility_charat(characters,position)\n}\n\n\nfunction caret (){\n\treturn position\n}\n\n\nfunction slice (begin,end){\n\treturn Utility_substr(characters,begin,end)\n}\n\n\nfunction token (type){\n\tswitch (type){\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0:case 9:case 10:case 13:case 32:\n\t\t\treturn 5\n\t\t// !+,/>@~isolate token\n\t\tcase 33:case 43:case 44:case 47:case 62:case 64:case 126:\n\t\t//;{}breakpoint token\n\t\tcase 59:case 123:case 125:\n\t\t\treturn 4\n\t\t//:accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ([opening delimit token\n\t\tcase 34:case 39:case 40:case 91:\n\t\t\treturn 2\n\t\t//)] closing delimit token\n\t\tcase 41:case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n\nfunction alloc (value){\n\treturn line=column=1,Tokenizer_length=Utility_strlen(characters=value),position=0,[]\n}\n\n\nfunction dealloc (value){\n\treturn characters='',value\n}\n\n\nfunction delimit (type){\n\treturn trim(slice(position - 1,delimiter(type===91 ? type+2:type===40 ? type+1:type)))\n}\n\n\nfunction Tokenizer_tokenize (value){\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n\nfunction whitespace (type){\n\twhile (character=peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type)>2 || token(character)>3 ? '':' '\n}\n\n\nfunction tokenizer (children){\n\twhile (next())\n\t\tswitch (token(character)){\n\t\t\tcase 0:append(identifier(position - 1),children)\n\t\t\t\tbreak\n\t\t\tcase 2:append(delimit(character),children)\n\t\t\t\tbreak\n\t\t\tdefault:append(from(character),children)\n\t\t}\n\n\treturn children\n}\n\n\nfunction escaping (index,count){\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character>102 || (character>57 && character < 65) || (character>70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index,caret()+(count < 6 && peek()==32 && next()==32))\n}\n\n\nfunction delimiter (type){\n\twhile (next())\n\t\tswitch (character){\n\t\t\t//]) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34:case 39:\n\t\t\t\tif (type !==34 && type !==39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type===41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n\nfunction commenter (type,index){\n\twhile (next())\n\t\t// //\n\t\tif (type+character===47+10)\n\t\t\tbreak\n\t\t// \nfunction identifier (index){\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index,position)\n}\n\n;// ./node_modules/stylis/src/Enum.js\nvar Enum_MS='-ms-'\nvar Enum_MOZ='-moz-'\nvar Enum_WEBKIT='-webkit-'\n\nvar COMMENT='comm'\nvar Enum_RULESET='rule'\nvar Enum_DECLARATION='decl'\n\nvar PAGE='@page'\nvar MEDIA='@media'\nvar IMPORT='@import'\nvar CHARSET='@charset'\nvar VIEWPORT='@viewport'\nvar SUPPORTS='@supports'\nvar DOCUMENT='@document'\nvar NAMESPACE='@namespace'\nvar Enum_KEYFRAMES='@keyframes'\nvar FONT_FACE='@font-face'\nvar COUNTER_STYLE='@counter-style'\nvar FONT_FEATURE_VALUES='@font-feature-values'\nvar LAYER='@layer'\n\n;// ./node_modules/stylis/src/Serializer.js\n\n\n\n\nfunction Serializer_serialize (children,callback){\n\tvar output=''\n\tvar length=Utility_sizeof(children)\n\n\tfor (var i=0;i < length;i++)\n\t\toutput+=callback(children[i],i,children,callback) || ''\n\n\treturn output\n}\n\n\nfunction stringify (element,index,children,callback){\n\tswitch (element.type){\n\t\tcase LAYER:if (element.children.length) break\n\t\tcase IMPORT:case Enum_DECLARATION:return element.return=element.return || element.value\n\t\tcase COMMENT:return ''\n\t\tcase Enum_KEYFRAMES:return element.return=element.value+'{'+Serializer_serialize(element.children,callback)+'}'\n\t\tcase Enum_RULESET:element.value=element.props.join(',')\n\t}\n\n\treturn Utility_strlen(children=Serializer_serialize(element.children,callback)) ? element.return=element.value+'{'+children+'}':''\n}\n\n;// ./node_modules/stylis/src/Middleware.js\n\n\n\n\n\n\n\nfunction middleware (collection){\n\tvar length=Utility_sizeof(collection)\n\n\treturn function (element,index,children,callback){\n\t\tvar output=''\n\n\t\tfor (var i=0;i < length;i++)\n\t\t\toutput+=collection[i](element,index,children,callback) || ''\n\n\t\treturn output\n\t}\n}\n\n\nfunction rulesheet (callback){\n\treturn function (element){\n\t\tif (!element.root)\n\t\t\tif (element=element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n\nfunction prefixer (element,index,children,callback){\n\tif (element.length>-1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type){\n\t\t\t\tcase DECLARATION:element.return=prefix(element.value,element.length,children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element,{value:replace(element.value,'@','@'+WEBKIT)})],callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props,function (value){\n\t\t\t\t\t\t\tswitch (match(value,/(::plac\\w+|:read-\\w+)/)){\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only':case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element,{props:[replace(value,/:(read-\\w+)/,':'+MOZ+'$1')]})],callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element,{props:[replace(value,/:(plac\\w+)/,':'+WEBKIT+'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element,{props:[replace(value,/:(plac\\w+)/,':'+MOZ+'$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element,{props:[replace(value,/:(plac\\w+)/,MS+'input-$1')]})\n\t\t\t\t\t\t\t\t\t],callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n\nfunction namespace (element){\n\tswitch (element.type){\n\t\tcase RULESET:\n\t\t\telement.props=element.props.map(function (value){\n\t\t\t\treturn combine(tokenize(value),function (value,index,children){\n\t\t\t\t\tswitch (charat(value,0)){\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value,1,strlen(value))\n\t\t\t\t\t\t// \\0 (+>~\n\t\t\t\t\t\tcase 0:case 40:case 43:case 62:case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index]==='global')\n\t\t\t\t\t\t\t\tchildren[index]='',children[++index]='\\f'+substr(children[index],index=1,-1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index===1 ? '' :value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index){\n\t\t\t\t\t\t\t\tcase 0:element=value\n\t\t\t\t\t\t\t\t\treturn sizeof(children)>1 ? '':value\n\t\t\t\t\t\t\t\tcase index=sizeof(children) - 1:case 2:\n\t\t\t\t\t\t\t\t\treturn index===2 ? value+element+element:value+element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n\n;// ./node_modules/stylis/src/Parser.js\n\n\n\n\n\nfunction compile (value){\n\treturn dealloc(parse('',null,null,null,[''],value=alloc(value),0,[0],value))\n}\n\n\nfunction parse (value,root,parent,rule,rules,rulesets,pseudo,points,declarations){\n\tvar index=0\n\tvar offset=0\n\tvar length=pseudo\n\tvar atrule=0\n\tvar property=0\n\tvar previous=0\n\tvar variable=1\n\tvar scanning=1\n\tvar ampersand=1\n\tvar character=0\n\tvar type=''\n\tvar props=rules\n\tvar children=rulesets\n\tvar reference=rule\n\tvar characters=type\n\n\twhile (scanning)\n\t\tswitch (previous=character,character=next()){\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous !=108 && Utility_charat(characters,length - 1)==58){\n\t\t\t\t\tif (indexof(characters+=Utility_replace(delimit(character),'&','&\\f'),'&\\f') !=-1)\n\t\t\t\t\t\tampersand=-1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34:case 39:case 91:\n\t\t\t\tcharacters+=delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9:case 10:case 13:case 32:\n\t\t\t\tcharacters+=whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters+=escaping(caret() - 1,7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()){\n\t\t\t\t\tcase 42:case 47:\n\t\t\t\t\t\tUtility_append(comment(commenter(next(),caret()),root,parent),declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters+='/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t//{\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++]=Utility_strlen(characters) * ampersand\n\t\t\t//};\\0\n\t\t\tcase 125 * variable:case 59:case 0:\n\t\t\t\tswitch (character){\n\t\t\t\t\t// \\0}\n\t\t\t\t\tcase 0:case 125:scanning=0\n\t\t\t\t\t//;\n\t\t\t\t\tcase 59+offset:if (ampersand==-1) characters=Utility_replace(characters,/\\f/g,'')\n\t\t\t\t\t\tif (property>0 && (Utility_strlen(characters) - length))\n\t\t\t\t\t\t\tUtility_append(property>32 ? declaration(characters+';',rule,parent,length - 1) :declaration(Utility_replace(characters,' ','')+';',rule,parent,length - 2),declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @;\n\t\t\t\t\tcase 59:characters+=';'\n\t\t\t\t\t//{rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tUtility_append(reference=ruleset(characters,root,parent,index,offset,rules,points,type,props=[],children=[],length),rulesets)\n\n\t\t\t\t\t\tif (character===123)\n\t\t\t\t\t\t\tif (offset===0)\n\t\t\t\t\t\t\t\tparse(characters,root,reference,reference,props,rulesets,length,points,children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule===99 && Utility_charat(characters,3)===110 ? 100 :atrule){\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100:case 108:case 109:case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value,reference,reference,rule && Utility_append(ruleset(value,reference,reference,0,0,rules,points,type,rules,props=[],length),children),rules,children,length,points,rule ? props:children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters,reference,reference,reference,[''],children,0,points,children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex=offset=property=0,variable=ampersand=1,type=characters='',length=pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength=1+Utility_strlen(characters),property=previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character==123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character==125 && variable++==0 && prev()==125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters+=Utility_from(character),character * variable){\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand=offset>0 ? 1:(characters+='\\f',-1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t//,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++]=(Utility_strlen(characters) - 1) * ampersand,ampersand=1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek()===45)\n\t\t\t\t\t\t\tcharacters+=delimit(next())\n\n\t\t\t\t\t\tatrule=peek(),offset=length=Utility_strlen(type=characters+=identifier(caret())),character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous===45 && Utility_strlen(characters)==2)\n\t\t\t\t\t\t\tvariable=0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n\nfunction ruleset (value,root,parent,index,offset,rules,points,type,props,children,length){\n\tvar post=offset - 1\n\tvar rule=offset===0 ? rules:['']\n\tvar size=Utility_sizeof(rule)\n\n\tfor (var i=0,j=0,k=0;i < index;++i)\n\t\tfor (var x=0,y=Utility_substr(value,post+1,post=abs(j=points[i])),z=value;x < size;++x)\n\t\t\tif (z=trim(j>0 ? rule[x]+' '+y:Utility_replace(y,/&\\f/g,rule[x])))\n\t\t\t\tprops[k++]=z\n\n\treturn node(value,root,parent,offset===0 ? Enum_RULESET:type,props,children,length)\n}\n\n\nfunction comment (value,root,parent){\n\treturn node(value,root,parent,COMMENT,Utility_from(Tokenizer_char()),Utility_substr(value,2,-2),0)\n}\n\n\nfunction declaration (value,root,parent,length){\n\treturn node(value,root,parent,Enum_DECLARATION,Utility_substr(value,0,length),Utility_substr(value,length+1,-1),length)\n}\n\n;// ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js\n\n\n\n\n\nvar identifierWithPointTracking=function identifierWithPointTracking(begin,points,index){\n var previous=0;\n var character=0;\n\n while (true){\n previous=character;\n character=peek();// &\\f\n\n if (previous===38 && character===12){\n points[index]=1;\n}\n\n if (token(character)){\n break;\n}\n\n next();\n}\n\n return slice(begin,position);\n};\n\nvar toRules=function toRules(parsed,points){\n // pretend we've started with a comma\n var index=-1;\n var character=44;\n\n do{\n switch (token(character)){\n case 0:\n // &\\f\n if (character===38 && peek()===12){\n // this is not 100% correct,we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context,so we just leverage this fact here\n points[index]=1;\n}\n\n parsed[index]+=identifierWithPointTracking(position - 1,points,index);\n break;\n\n case 2:\n parsed[index]+=delimit(character);\n break;\n\n case 4:\n // comma\n if (character===44){\n // colon\n parsed[++index]=peek()===58 ? '&\\f':'';\n points[index]=parsed[index].length;\n break;\n}\n\n // fallthrough\n\n default:\n parsed[index]+=Utility_from(character);\n}\n}while (character=next());\n\n return parsed;\n};\n\nvar getRules=function getRules(value,points){\n return dealloc(toRules(alloc(value),points));\n};// WeakSet would be more appropriate,but only WeakMap is supported in IE11\n\n\nvar fixedElements=new WeakMap();\nvar compat=function compat(element){\n if (element.type !=='rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1){\n return;\n}\n\n var value=element.value;\n var parent=element.parent;\n var isImplicitRule=element.column===parent.column && element.line===parent.line;\n\n while (parent.type !=='rule'){\n parent=parent.parent;\n if (!parent) return;\n}// short-circuit for the simplest case\n\n\n if (element.props.length===1 && value.charCodeAt(0) !==58\n \n && !fixedElements.get(parent)){\n return;\n}// if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule){\n return;\n}\n\n fixedElements.set(element,true);\n var points=[];\n var rules=getRules(value,points);\n var parentRules=parent.props;\n\n for (var i=0,k=0;i < rules.length;i++){\n for (var j=0;j < parentRules.length;j++,k++){\n element.props[k]=points[i] ? rules[i].replace(/&\\f/g,parentRules[j]):parentRules[j]+\" \"+rules[i];\n}\n}\n};\nvar removeLabel=function removeLabel(element){\n if (element.type==='decl'){\n var value=element.value;\n\n if (// charcode for l\n value.charCodeAt(0)===108 && // charcode for b\n value.charCodeAt(2)===98){\n // this ignores label\n element[\"return\"]='';\n element.value='';\n}\n}\n};\n\n\n\nfunction emotion_cache_browser_esm_prefix(value,length){\n switch (hash(value,length)){\n // color-adjust\n case 5103:\n return Enum_WEBKIT+'print-'+value+value;\n // animation,animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921:// text-decoration,filter,clip-path,backface-visibility,column,box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005:// mask,mask-image,mask-(mode|clip|size),mask-(repeat|origin),mask-position,mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855:// background-clip,columns,column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return Enum_WEBKIT+value+value;\n // appearance,user-select,transform,hyphens,text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return Enum_WEBKIT+value+Enum_MOZ+value+Enum_MS+value+value;\n // flex,flex-direction\n\n case 6828:\n case 4268:\n return Enum_WEBKIT+value+Enum_MS+value+value;\n // order\n\n case 6165:\n return Enum_WEBKIT+value+Enum_MS+'flex-'+value+value;\n // align-items\n\n case 5187:\n return Enum_WEBKIT+value+Utility_replace(value,/(\\w+).+(:[^]+)/,Enum_WEBKIT+'box-$1$2'+Enum_MS+'flex-$1$2')+value;\n // align-self\n\n case 5443:\n return Enum_WEBKIT+value+Enum_MS+'flex-item-'+Utility_replace(value,/flex-|-self/,'')+value;\n // align-content\n\n case 4675:\n return Enum_WEBKIT+value+Enum_MS+'flex-line-pack'+Utility_replace(value,/align-content|flex-|-self/,'')+value;\n // flex-shrink\n\n case 5548:\n return Enum_WEBKIT+value+Enum_MS+Utility_replace(value,'shrink','negative')+value;\n // flex-basis\n\n case 5292:\n return Enum_WEBKIT+value+Enum_MS+Utility_replace(value,'basis','preferred-size')+value;\n // flex-grow\n\n case 6060:\n return Enum_WEBKIT+'box-'+Utility_replace(value,'-grow','')+Enum_WEBKIT+value+Enum_MS+Utility_replace(value,'grow','positive')+value;\n // transition\n\n case 4554:\n return Enum_WEBKIT+Utility_replace(value,/([^-])(transform)/g,'$1'+Enum_WEBKIT+'$2')+value;\n // cursor\n\n case 6187:\n return Utility_replace(Utility_replace(Utility_replace(value,/(zoom-|grab)/,Enum_WEBKIT+'$1'),/(image-set)/,Enum_WEBKIT+'$1'),value,'')+value;\n // background,background-image\n\n case 5495:\n case 3959:\n return Utility_replace(value,/(image-set\\([^]*)/,Enum_WEBKIT+'$1'+'$`$1');\n // justify-content\n\n case 4968:\n return Utility_replace(Utility_replace(value,/(.+:)(flex-)?(.*)/,Enum_WEBKIT+'box-pack:$3'+Enum_MS+'flex-pack:$3'),/s.+-b[^;]+/,'justify')+Enum_WEBKIT+value+value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return Utility_replace(value,/(.+)-inline(.+)/,Enum_WEBKIT+'$1$2')+value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch,max-content,min-content,fill-available\n if (Utility_strlen(value) - 1 - length>6) switch (Utility_charat(value,length+1)){\n // (m)ax-content,(m)in-content\n case 109:\n // -\n if (Utility_charat(value,length+4) !==45) break;\n // (f)ill-available,(f)it-content\n\n case 102:\n return Utility_replace(value,/(.+:)(.+)-([^]+)/,'$1'+Enum_WEBKIT+'$2-$3'+'$1'+Enum_MOZ+(Utility_charat(value,length+3)==108 ? '$3':'$2-$3'))+value;\n // (s)tretch\n\n case 115:\n return~indexof(value,'stretch') ? emotion_cache_browser_esm_prefix(Utility_replace(value,'stretch','fill-available'),length)+value:value;\n}\n break;\n // position:sticky\n\n case 4949:\n // (s)ticky?\n if (Utility_charat(value,length+1) !==115) break;\n // display:(flex|inline-flex)\n\n case 6444:\n switch (Utility_charat(value,Utility_strlen(value) - 3 - (~indexof(value,'!important') && 10))){\n // stic(k)y\n case 107:\n return Utility_replace(value,':',':'+Enum_WEBKIT)+value;\n // (inline-)?fl(e)x\n\n case 101:\n return Utility_replace(value,/(.+:)([^;!]+)(;|!.+)?/,'$1'+Enum_WEBKIT+(Utility_charat(value,14)===45 ? 'inline-':'')+'box$3'+'$1'+Enum_WEBKIT+'$2$3'+'$1'+Enum_MS+'$2box$3')+value;\n}\n\n break;\n // writing-mode\n\n case 5936:\n switch (Utility_charat(value,length+11)){\n // vertical-l(r)\n case 114:\n return Enum_WEBKIT+value+Enum_MS+Utility_replace(value,/[svh]\\w+-[tblr]{2}/,'tb')+value;\n // vertical-r(l)\n\n case 108:\n return Enum_WEBKIT+value+Enum_MS+Utility_replace(value,/[svh]\\w+-[tblr]{2}/,'tb-rl')+value;\n // horizontal(-)tb\n\n case 45:\n return Enum_WEBKIT+value+Enum_MS+Utility_replace(value,/[svh]\\w+-[tblr]{2}/,'lr')+value;\n}\n\n return Enum_WEBKIT+value+Enum_MS+value+value;\n}\n\n return value;\n}\n\nvar emotion_cache_browser_esm_prefixer=function prefixer(element,index,children,callback){\n if (element.length>-1) if (!element[\"return\"]) switch (element.type){\n case Enum_DECLARATION:\n element[\"return\"]=emotion_cache_browser_esm_prefix(element.value,element.length);\n break;\n\n case Enum_KEYFRAMES:\n return Serializer_serialize([Tokenizer_copy(element,{\n value:Utility_replace(element.value,'@','@'+Enum_WEBKIT)\n})],callback);\n\n case Enum_RULESET:\n if (element.length) return Utility_combine(element.props,function (value){\n switch (Utility_match(value,/(::plac\\w+|:read-\\w+)/)){\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return Serializer_serialize([Tokenizer_copy(element,{\n props:[Utility_replace(value,/:(read-\\w+)/,':'+Enum_MOZ+'$1')]\n})],callback);\n // :placeholder\n\n case '::placeholder':\n return Serializer_serialize([Tokenizer_copy(element,{\n props:[Utility_replace(value,/:(plac\\w+)/,':'+Enum_WEBKIT+'input-$1')]\n}),Tokenizer_copy(element,{\n props:[Utility_replace(value,/:(plac\\w+)/,':'+Enum_MOZ+'$1')]\n}),Tokenizer_copy(element,{\n props:[Utility_replace(value,/:(plac\\w+)/,Enum_MS+'input-$1')]\n})],callback);\n}\n\n return '';\n});\n}\n};\n\nvar defaultStylisPlugins=[emotion_cache_browser_esm_prefixer];\n\nvar createCache=function createCache(options){\n var key=options.key;\n\n if (key==='css'){\n var ssrStyles=document.querySelectorAll(\"style[data-emotion]:not([data-s])\");// get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles,function (node){\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute=node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ')===-1){\n return;\n}\n\n document.head.appendChild(node);\n node.setAttribute('data-s','');\n});\n}\n\n var stylisPlugins=options.stylisPlugins || defaultStylisPlugins;;\n var container;\n var nodesToHydrate=[];\n\n{\n container=options.container || document.head;\n Array.prototype.forEach.call(// this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\"+key+\" \\\"]\"),function (node){\n var attrib=node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i=1;i < attrib.length;i++){\n inserted[attrib[i]]=true;\n}\n\n nodesToHydrate.push(node);\n});\n}\n\n var _insert;\n\n var omnipresentPlugins=[compat,removeLabel];\n\n{\n var currentSheet;\n var finalizingPlugins=[stringify,rulesheet(function (rule){\n currentSheet.insert(rule);\n})];\n var serializer=middleware(omnipresentPlugins.concat(stylisPlugins,finalizingPlugins));\n\n var stylis=function stylis(styles){\n return Serializer_serialize(compile(styles),serializer);\n};\n\n _insert=function insert(selector,serialized,sheet,shouldCache){\n currentSheet=sheet;\n\n stylis(selector ? selector+\"{\"+serialized.styles+\"}\" :serialized.styles);\n\n if (shouldCache){\n cache.inserted[serialized.name]=true;\n}\n};\n}\n\n var cache={\n key:key,\n sheet:new StyleSheet({\n key:key,\n container:container,\n nonce:options.nonce,\n speedy:options.speedy,\n prepend:options.prepend,\n insertionPoint:options.insertionPoint\n},\n insert:_insert\n};\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGFBQWEsb0JBQVMsQ0FBQyxPQUFPO0FBQzlCOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxVQUFVO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9lbW90aW9uLXNoZWV0LmVzbS5qcz82ZGU4Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVXRpbGl0eS5qcz8zOTdlIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzPzQzNDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzPzgyMzMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzP2U2MDIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzPzQxNmIiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanM/NzhhYSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanM/ZmI1NSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5655\n")},5659:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(composeClasses)\n});\nfunction composeClasses(slots,getUtilityClass,classes=undefined){\n const output={};\n Object.keys(slots).forEach(\n // `Object.keys(slots)` can't be wider than `T` because we infer `T` from `slots`.\n // @ts-expect-error https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208\n slot=>{\n output[slot]=slots[slot].reduce((acc,key)=>{\n if (key){\n const utilityClass=getUtilityClass(key);\n if (utilityClass !==''){\n acc.push(utilityClass);\n}\n if (classes && classes[key]){\n acc.push(classes[key]);\n}\n}\n return acc;\n},[]).join(' ');\n});\n return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY1OS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS91dGlscy9lc20vY29tcG9zZUNsYXNzZXMvY29tcG9zZUNsYXNzZXMuanM/Njg2MyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5659\n")},5669:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n b:()=>(useDefaultProps)\n});\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _mui_system_DefaultPropsProvider__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(2221);\n var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4848);\n'use client';\n\n\n\n\n\n\nfunction DefaultPropsProvider(props){\n return _jsx(SystemDefaultPropsProvider,_extends({},props));\n}\n false ? 0 :void 0;\n var __WEBPACK_DEFAULT_EXPORT__=((null && (DefaultPropsProvider)));\nfunction useDefaultProps(params){\n return (0,_mui_system_DefaultPropsProvider__WEBPACK_IMPORTED_MODULE_2__ .b)(params);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTY2OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRTBEO0FBQzNCO0FBQ0k7QUFDcUY7QUFDeEU7QUFDaEQ7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQSxNQUFxQyxHQUFHLENBYXZDLENBQUM7QUFDRixzRUFBZSxvRUFBb0IsSUFBQztBQUM3QjtBQUNQLFNBQVMsMEZBQXFCO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EZWZhdWx0UHJvcHNQcm92aWRlci9EZWZhdWx0UHJvcHNQcm92aWRlci5qcz81YmQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFN5c3RlbURlZmF1bHRQcm9wc1Byb3ZpZGVyLCB7IHVzZURlZmF1bHRQcm9wcyBhcyB1c2VTeXN0ZW1EZWZhdWx0UHJvcHMgfSBmcm9tICdAbXVpL3N5c3RlbS9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gRGVmYXVsdFByb3BzUHJvdmlkZXIocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbURlZmF1bHRQcm9wc1Byb3ZpZGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMpKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IERlZmF1bHRQcm9wc1Byb3ZpZGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBEZWZhdWx0UHJvcHNQcm92aWRlcjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VEZWZhdWx0UHJvcHMocGFyYW1zKSB7XG4gIHJldHVybiB1c2VTeXN0ZW1EZWZhdWx0UHJvcHMocGFyYW1zKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5669\n")},5765:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(SvgIcon_SvgIcon)\n});\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose=__webpack_require__(8587);\n// EXTERNAL MODULE:external \"React\"\nvar external_React_=__webpack_require__(1594);\n// EXTERNAL MODULE:./node_modules/clsx/dist/clsx.mjs\nvar clsx=__webpack_require__(4164);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\nvar composeClasses=__webpack_require__(5659);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/capitalize.js\nvar capitalize=__webpack_require__(8466);\n// EXTERNAL MODULE:./node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js\nvar DefaultPropsProvider=__webpack_require__(5669);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/styled.js\nvar styled=__webpack_require__(1848);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\nvar generateUtilityClasses=__webpack_require__(8413);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\nvar generateUtilityClass=__webpack_require__(1609);\n;// ./node_modules/@mui/material/SvgIcon/svgIconClasses.js\n\n\nfunction getSvgIconUtilityClass(slot){\n return (0,generateUtilityClass.Ay)('MuiSvgIcon',slot);\n}\nconst svgIconClasses=(0,generateUtilityClasses.A)('MuiSvgIcon',['root','colorPrimary','colorSecondary','colorAction','colorError','colorDisabled','fontSizeInherit','fontSizeSmall','fontSizeMedium','fontSizeLarge']);\n const SvgIcon_svgIconClasses=((null && (svgIconClasses)));\n// EXTERNAL MODULE:./node_modules/react/jsx-runtime.js\nvar jsx_runtime=__webpack_require__(4848);\n;// ./node_modules/@mui/material/SvgIcon/SvgIcon.js\n'use client';\n\n\n\nconst _excluded=[\"children\",\"className\",\"color\",\"component\",\"fontSize\",\"htmlColor\",\"inheritViewBox\",\"titleAccess\",\"viewBox\"];\n\n\n\n\n\n\n\n\n\n\nconst useUtilityClasses=ownerState=>{\n const{\n color,\n fontSize,\n classes\n}=ownerState;\n const slots={\n root:['root',color !=='inherit' && `color${(0,capitalize.A)(color)}`,`fontSize${(0,capitalize.A)(fontSize)}`]\n};\n return (0,composeClasses.A)(slots,getSvgIconUtilityClass,classes);\n};\nconst SvgIconRoot=(0,styled.Ay)('svg',{\n name:'MuiSvgIcon',\n slot:'Root',\n overridesResolver:(props,styles)=>{\n const{\n ownerState\n}=props;\n return [styles.root,ownerState.color !=='inherit' && styles[`color${(0,capitalize.A)(ownerState.color)}`],styles[`fontSize${(0,capitalize.A)(ownerState.fontSize)}`]];\n}\n})(({\n theme,\n ownerState\n})=>{\n var _theme$transitions,_theme$transitions$cr,_theme$transitions2,_theme$typography,_theme$typography$pxT,_theme$typography2,_theme$typography2$px,_theme$typography3,_theme$typography3$px,_palette$ownerState$c,_palette,_palette2,_palette3;\n return{\n userSelect:'none',\n width:'1em',\n height:'1em',\n display:'inline-block',\n // the <svg>will define the property that has `currentColor`\n // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n fill:ownerState.hasSvgAsChild ? undefined :'currentColor',\n flexShrink:0,\n transition:(_theme$transitions=theme.transitions)==null || (_theme$transitions$cr=_theme$transitions.create)==null ? void 0 :_theme$transitions$cr.call(_theme$transitions,'fill',{\n duration:(_theme$transitions2=theme.transitions)==null || (_theme$transitions2=_theme$transitions2.duration)==null ? void 0:_theme$transitions2.shorter\n}),\n fontSize:{\n inherit:'inherit',\n small:((_theme$typography=theme.typography)==null || (_theme$typography$pxT=_theme$typography.pxToRem)==null ? void 0:_theme$typography$pxT.call(_theme$typography,20)) || '1.25rem',\n medium:((_theme$typography2=theme.typography)==null || (_theme$typography2$px=_theme$typography2.pxToRem)==null ? void 0:_theme$typography2$px.call(_theme$typography2,24)) || '1.5rem',\n large:((_theme$typography3=theme.typography)==null || (_theme$typography3$px=_theme$typography3.pxToRem)==null ? void 0:_theme$typography3$px.call(_theme$typography3,35)) || '2.1875rem'\n}[ownerState.fontSize],\n // TODO v5 deprecate,v6 remove for sx\n color:(_palette$ownerState$c=(_palette=(theme.vars || theme).palette)==null || (_palette=_palette[ownerState.color])==null ? void 0 :_palette.main) !=null ? _palette$ownerState$c :{\n action:(_palette2=(theme.vars || theme).palette)==null || (_palette2=_palette2.action)==null ? void 0:_palette2.active,\n disabled:(_palette3=(theme.vars || theme).palette)==null || (_palette3=_palette3.action)==null ? void 0:_palette3.disabled,\n inherit:undefined\n}[ownerState.color]\n};\n});\nconst SvgIcon=external_React_.forwardRef(function SvgIcon(inProps,ref){\n const props=(0,DefaultPropsProvider.b)({\n props:inProps,\n name:'MuiSvgIcon'\n});\n const{\n children,\n className,\n color='inherit',\n component='svg',\n fontSize='medium',\n htmlColor,\n inheritViewBox=false,\n titleAccess,\n viewBox='0 0 24 24'\n}=props,\n other=(0,objectWithoutPropertiesLoose.A)(props,_excluded);\n const hasSvgAsChild=external_React_.isValidElement(children) && children.type==='svg';,props,{\n color,\n component,\n fontSize,\n instanceFontSize:inProps.fontSize,\n inheritViewBox,\n viewBox,\n hasSvgAsChild\n});;\n if (!inheritViewBox){\n more.viewBox=viewBox;\n}\n const classes=useUtilityClasses(ownerState);\n return (0,jsx_runtime.jsxs)(SvgIconRoot,(0,esm_extends.A)({\n as:component,\n className:(0,clsx.A)(classes.root,className),\n focusable:\"false\",\n color:htmlColor,\n \"aria-hidden\":titleAccess ? undefined:true,\n role:titleAccess ? 'img':undefined,\n ref:ref\n},more,other,hasSvgAsChild && children.props,{\n ownerState:ownerState,\n children:[hasSvgAsChild ? children.props.children :children,titleAccess ? (0,jsx_runtime.jsx)(\"title\",{\n children:titleAccess\n}):null]\n}));\n});\n false ? 0:void 0;\nSvgIcon.muiName='SvgIcon';\n const SvgIcon_SvgIcon=(SvgIcon);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc2NS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUU7QUFDSjtBQUM1RDtBQUNQLFNBQVMsd0NBQW9CO0FBQzdCO0FBQ0EsdUJBQXVCLHlDQUFzQjtBQUM3Qyw2REFBZSw4REFBYyxJOzs7O0FDTjdCOztBQUUwRDtBQUMwQztBQUNwRztBQUMrQjtBQUNJO0FBQ1g7QUFDK0I7QUFDVjtBQUNhO0FBQ3BCO0FBQ29CO0FBQ1Y7QUFDRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esa0RBQWtELDZCQUFVLFFBQVEsY0FBYyw2QkFBVSxXQUFXO0FBQ3ZHO0FBQ0EsU0FBUyxpQ0FBYyxRQUFRLHNCQUFzQjtBQUNyRDtBQUNBLG9CQUFvQiwwQkFBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDBFQUEwRSw2QkFBVSxtQkFBbUIsc0JBQXNCLDZCQUFVLHNCQUFzQjtBQUM3SjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLDBCQUFnQjtBQUM3QyxnQkFBZ0IsK0NBQWU7QUFDL0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixZQUFZLCtDQUE2QjtBQUN6QyxxQ0FBcUMsOEJBQW9CO0FBQ3pELHFCQUFxQiw4QkFBUSxHQUFHO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQUssY0FBYyw4QkFBUTtBQUNqRDtBQUNBLGVBQWUsdUJBQUk7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixtQkFBSTtBQUNsRztBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNELE1BQXFDLEdBQUcsQ0F1RXZDLENBQUM7QUFDRjtBQUNBLHNEQUFlLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vc3ZnSWNvbkNsYXNzZXMuanM/Yjc3ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcz82N2FhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZm9yIGV4YW1wbGUgaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5765\n")},5926:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3M7.5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S9.83 13 9 13s-1.5-.67-1.5-1.5M16 17H8v-2h8zm-1-4c-.83 0-1.5-.67-1.5-1.5S14.17 10 15 10s1.5.67 1.5 1.5S15.83 13 15 13"\n}),\'SmartToy\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkyNi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvU21hcnRUb3kuanM/MTFhNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjAgOVY3YzAtMS4xLS45LTItMi0yaC0zYzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDVINmMtMS4xIDAtMiAuOS0yIDJ2MmMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgM3Y0YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ2LTRjMS42NiAwIDMtMS4zNCAzLTNzLTEuMzQtMy0zLTNNNy41IDExLjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjVTOS44MyAxMyA5IDEzcy0xLjUtLjY3LTEuNS0xLjVNMTYgMTdIOHYtMmg4em0tMS00Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTQuMTcgMTAgMTUgMTBzMS41LjY3IDEuNSAxLjVTMTUuODMgMTMgMTUgMTNcIlxufSksICdTbWFydFRveScpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5926\n')},6248:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2325);\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_ownerDocument__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI0OC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXFEO0FBQ3JELGlFQUFlLHlFQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lckRvY3VtZW50LmpzP2FkZDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnQG11aS91dGlscy9vd25lckRvY3VtZW50JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyRG9jdW1lbnQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6248\n')},6289:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(memoize)\n});\nfunction memoize(fn){\n var cache=Object.create(null);\n return function (arg){\n if (cache[arg]===undefined) cache[arg]=fn(arg);\n return cache[arg];\n};\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI4OS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFOEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcz83ZGVjIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6289\n")},6314:module=>{"use strict";eval('\n\n\nmodule.exports=function (cssWithMappingToString){\n var list=[];\n\n // return the list of modules as css string\n list.toString=function toString(){\n return this.map(function (item){\n var content="";\n var needLayer=typeof item[5] !=="undefined";\n if (item[4]){\n content+="@supports (".concat(item[4],"){");\n}\n if (item[2]){\n content+="@media ".concat(item[2],"{");\n}\n if (needLayer){\n content+="@layer".concat(item[5].length>0 ? " ".concat(item[5]) :"","{");\n}\n content+=cssWithMappingToString(item);\n if (needLayer){\n content+="}";\n}\n if (item[2]){\n content+="}";\n}\n if (item[4]){\n content+="}";\n}\n return content;\n}).join("");\n};\n\n // import a list of modules into the list\n list.i=function i(modules,media,dedupe,supports,layer){\n if (typeof modules==="string"){\n modules=[[null,modules,undefined]];\n};\n if (dedupe){\n for (var k=0;k < this.length;k++){\n var id=this[k][0];\n if (id !=null){\n alreadyImportedModules[id]=true;\n}\n}\n}\n for (var _k=0;_k < modules.length;_k++){\n var item=[].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]){\n continue;\n}\n if (typeof layer !=="undefined"){\n if (typeof item[5]==="undefined"){\n item[5]=layer;\n}else{\n item[1]="@layer".concat(item[5].length>0 ? " ".concat(item[5]) :"","{").concat(item[1],"}");\n item[5]=layer;\n}\n}\n if (media){\n if (!item[2]){\n item[2]=media;\n}else{\n item[1]="@media ".concat(item[2],"{").concat(item[1],"}");\n item[2]=media;\n}\n}\n if (supports){\n if (!item[4]){\n item[4]="".concat(supports);\n}else{\n item[1]="@supports (".concat(item[4],"){").concat(item[1],"}");\n item[4]=supports;\n}\n}\n list.push(item);\n}\n};\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxQkFBcUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0ZBQXNGLHFCQUFxQjtBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsaURBQWlELHFCQUFxQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0RBQXNELHFCQUFxQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzPzI0ZmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICB2YXIgbmVlZExheWVyID0gdHlwZW9mIGl0ZW1bNV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgbGlzdC5pID0gZnVuY3Rpb24gaShtb2R1bGVzLCBtZWRpYSwgZGVkdXBlLCBzdXBwb3J0cywgbGF5ZXIpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIHVuZGVmaW5lZF1dO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWzVdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs1XSA9IGxheWVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBsaXN0O1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6314\n')},6461:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval("var __webpack_unused_export__;\n\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.Ay=createStyled;\n__webpack_unused_export__=shouldForwardProp;\n__webpack_unused_export__=void 0;\nvar _extends2=_interopRequireDefault(__webpack_require__(4634));\nvar _objectWithoutPropertiesLoose2=_interopRequireDefault(__webpack_require__(4893));\nvar _styledEngine=_interopRequireWildcard(__webpack_require__(2532));\nvar _deepmerge=__webpack_require__(4239);\nvar _capitalize=_interopRequireDefault(__webpack_require__(7149));\nvar _getDisplayName=_interopRequireDefault(__webpack_require__(7320));\nvar _createTheme=_interopRequireDefault(__webpack_require__(3142));\nvar _styleFunctionSx=_interopRequireDefault(__webpack_require__(3857));\nconst _excluded=[\"ownerState\"],\n _excluded2=[\"variants\"],\n _excluded3=[\"name\",\"slot\",\"skipVariantsResolver\",\"skipSx\",\"overridesResolver\"];\n\nfunction _getRequireWildcardCache(e){if (\"function\" !=typeof WeakMap) return null;var r=new WeakMap(),t=new WeakMap();return (_getRequireWildcardCache=function (e){return e ? t:r})(e)}\nfunction _interopRequireWildcard(e,r){if (!r && e && e.__esModule) return e;if (null===e || \"object\" !=typeof e && \"function\" !=typeof e) return{default:e};var t=_getRequireWildcardCache(r);if (t && t.has(e)) return t.get(e);var n={__proto__:null},a=Object.defineProperty && Object.getOwnPropertyDescriptor;for (var u in e) if (\"default\" !==u && Object.prototype.hasOwnProperty.call(e,u)){var i=a ? Object.getOwnPropertyDescriptor(e,u):null;i && (i.get || i.set) ? Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t && t.set(e,n),n}\nfunction isEmpty(obj){\n return Object.keys(obj).length===0;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag){\n return typeof tag==='string' &&\n // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0)>96;\n}\n\n// Update /system/styled/#api in case if this changes\nfunction shouldForwardProp(prop){\n return prop !=='ownerState' && prop !=='theme' && prop !=='sx' && prop !=='as';\n}\nconst systemDefaultTheme=__webpack_unused_export__=(0,_createTheme.default)();\nconst lowercaseFirstLetter=string=>{\n if (!string){\n return string;\n}\n return string.charAt(0).toLowerCase()+string.slice(1);\n};\nfunction resolveTheme({\n defaultTheme,\n theme,\n themeId\n}){\n return isEmpty(theme) ? defaultTheme:theme[themeId] || theme;\n}\nfunction defaultOverridesResolver(slot){\n if (!slot){\n return null;\n}\n return (props,styles)=>styles[slot];\n}\nfunction processStyleArg(callableStyle,_ref){\n let{\n ownerState\n}=_ref,\n props=(0,_objectWithoutPropertiesLoose2.default)(_ref,_excluded);\n const resolvedStylesArg=typeof callableStyle==='function' ? callableStyle((0,_extends2.default)({\n ownerState\n},props)) :callableStyle;\n if (Array.isArray(resolvedStylesArg)){\n return resolvedStylesArg.flatMap(resolvedStyle=>processStyleArg(resolvedStyle,(0,_extends2.default)({\n ownerState\n},props)));\n}\n if (!!resolvedStylesArg && typeof resolvedStylesArg==='object' && Array.isArray(resolvedStylesArg.variants)){\n const{\n variants=[]\n}=resolvedStylesArg,\n otherStyles=(0,_objectWithoutPropertiesLoose2.default)(resolvedStylesArg,_excluded2);\n let result=otherStyles;\n variants.forEach(variant=>{\n let isMatch=true;\n if (typeof variant.props==='function'){\n isMatch=variant.props((0,_extends2.default)({\n ownerState\n},props,ownerState));\n}else{\n Object.keys(variant.props).forEach(key=>{\n if ((ownerState==null ? void 0 :ownerState[key]) !==variant.props[key] && props[key] !==variant.props[key]){\n isMatch=false;\n}\n});\n}\n if (isMatch){\n if (!Array.isArray(result)){\n result=[result];\n}\n result.push(typeof variant.style==='function' ? variant.style((0,_extends2.default)({\n ownerState\n},props,ownerState)):variant.style);\n}\n});\n return result;\n}\n return resolvedStylesArg;\n}){\n const{\n themeId,\n defaultTheme=systemDefaultTheme,\n rootShouldForwardProp=shouldForwardProp,\n slotShouldForwardProp=shouldForwardProp\n}=input;\n const systemSx=props=>{\n return (0,_styleFunctionSx.default)((0,_extends2.default)({},props,{\n theme:resolveTheme((0,_extends2.default)({},props,{\n defaultTheme,\n themeId\n}))\n}));\n};\n systemSx.__mui_systemSx=true;)=>{\n // Filter out the `sx` style function from the previous styled component to prevent unnecessary styles generated by the composite components.\n (0,_styledEngine.internal_processStyles)(tag,styles=>styles.filter(style=>!(style !=null && style.__mui_systemSx)));\n const{\n name:componentName,\n slot:componentSlot,\n skipVariantsResolver:inputSkipVariantsResolver,\n skipSx:inputSkipSx,\n // TODO v6:remove `lowercaseFirstLetter()` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n overridesResolver=defaultOverridesResolver(lowercaseFirstLetter(componentSlot))\n}=inputOptions,\n options=(0,_objectWithoutPropertiesLoose2.default)(inputOptions,_excluded3);\n\n // if skipVariantsResolver option is defined,take the value,otherwise,true for root and false for other slots.\n const skipVariantsResolver=inputSkipVariantsResolver !==undefined ? inputSkipVariantsResolver :\n // TODO v6:remove `Root` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n componentSlot && componentSlot !=='Root' && componentSlot !=='root' || false;\n const skipSx=inputSkipSx || false;\n let label;\n let shouldForwardPropOption=shouldForwardProp;\n\n // TODO v6:remove `Root` in the next major release\n // For more details:https://github.com/mui/material-ui/pull/37908\n if (componentSlot==='Root' || componentSlot==='root'){\n shouldForwardPropOption=rootShouldForwardProp;\n}else if (componentSlot){\n // any other slot specified\n shouldForwardPropOption=slotShouldForwardProp;\n}else if (isStringTag(tag)){\n // for string (html) tag,preserve the behavior in emotion & styled-components.\n shouldForwardPropOption=undefined;\n}\n const defaultStyledResolver=(0,_styledEngine.default)(tag,(0,_extends2.default)({\n shouldForwardProp:shouldForwardPropOption,\n label\n},options));\n const transformStyleArg=stylesArg=>{\n // On the server Emotion doesn't use React.forwardRef for creating components,so the created\n // component stays as a function. This condition makes sure that we do not interpolate functions\n // which are basically components used as a selectors.\n if (typeof stylesArg==='function' && stylesArg.__emotion_real !==stylesArg || (0,_deepmerge.isPlainObject)(stylesArg)){\n return props=>processStyleArg(stylesArg,(0,_extends2.default)({},props,{\n theme:resolveTheme({\n theme:props.theme,\n defaultTheme,\n themeId\n})\n}));\n}\n return stylesArg;\n};\n const muiStyledResolver=(styleArg,...expressions)=>{\n let transformedStyleArg=transformStyleArg(styleArg);\n const expressionsWithDefaultTheme=expressions ? expressions.map(transformStyleArg) :[];\n if (componentName && overridesResolver){\n expressionsWithDefaultTheme.push(props=>{\n const theme=resolveTheme((0,_extends2.default)({},props,{\n defaultTheme,\n themeId\n}));\n if (!theme.components || !theme.components[componentName] || !theme.components[componentName].styleOverrides){\n return null;\n}\n const styleOverrides=theme.components[componentName].styleOverrides;;\n // TODO:v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n Object.entries(styleOverrides).forEach(([slotKey,slotStyle])=>{\n resolvedStyleOverrides[slotKey]=processStyleArg(slotStyle,(0,_extends2.default)({},props,{\n theme\n}));\n});\n return overridesResolver(props,resolvedStyleOverrides);\n});\n}\n if (componentName && !skipVariantsResolver){\n expressionsWithDefaultTheme.push(props=>{\n var _theme$components;,props,{\n defaultTheme,\n themeId\n}));\n const themeVariants=theme==null || (_theme$components=theme.components)==null || (_theme$components=_theme$components[componentName])==null ? void 0 :_theme$components.variants;\n return processStyleArg({\n variants:themeVariants\n},props,{\n theme\n}));\n});\n}\n if (!skipSx){\n expressionsWithDefaultTheme.push(systemSx);\n}\n const numOfCustomFnsApplied=expressionsWithDefaultTheme.length - expressions.length;\n if (Array.isArray(styleArg) && numOfCustomFnsApplied>0){\n const placeholders=new Array(numOfCustomFnsApplied).fill('');\n // If the type is array,than we need to add placeholders in the template for the overrides,variants and the sx styles.\n transformedStyleArg=[...styleArg,...placeholders];\n transformedStyleArg.raw=[...styleArg.raw,...placeholders];\n}\n const Component=defaultStyledResolver(transformedStyleArg,...expressionsWithDefaultTheme);\n if (tag.muiName){\n Component.muiName=tag.muiName;\n}\n return Component;\n};\n if (defaultStyledResolver.withConfig){\n muiStyledResolver.withConfig=defaultStyledResolver.withConfig;\n}\n return muiStyledResolver;\n};\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVMxQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVTdHlsZWQuanM/NzM1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlU3R5bGVkO1xuZXhwb3J0cy5zaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9zdHlsZWRFbmdpbmUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiQG11aS9zdHlsZWQtZW5naW5lXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpO1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfZ2V0RGlzcGxheU5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2dldERpc3BsYXlOYW1lXCIpKTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfc3R5bGVGdW5jdGlvblN4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZUZ1bmN0aW9uU3hcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInZhcmlhbnRzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMjZkZWQ2MTA5ZmNkOGNhOTg3NWNjMmNlNDU2NGZlZTY3OGEzZjNjNS9wYWNrYWdlcy9zdHlsZWQvc3JjL3V0aWxzLmpzI0w0MFxuZnVuY3Rpb24gaXNTdHJpbmdUYWcodGFnKSB7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyAmJlxuICAvLyA5NiBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjaGFyIGNvZGVcbiAgLy8gZm9yIFwiYVwiIHNvIHRoaXMgaXMgY2hlY2tpbmcgdGhhdFxuICAvLyBpdCdzIGEgbG93ZXJjYXNlIGNoYXJhY3RlclxuICB0YWcuY2hhckNvZGVBdCgwKSA+IDk2O1xufVxuXG4vLyBVcGRhdGUgL3N5c3RlbS9zdHlsZWQvI2FwaSBpbiBjYXNlIGlmIHRoaXMgY2hhbmdlc1xuZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gZXhwb3J0cy5zeXN0ZW1EZWZhdWx0VGhlbWUgPSAoMCwgX2NyZWF0ZVRoZW1lLmRlZmF1bHQpKCk7XG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIGlmICghc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUaGVtZSh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgcmV0dXJuIGlzRW1wdHkodGhlbWUpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIoc2xvdCkge1xuICBpZiAoIXNsb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlc1tzbG90XTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTdHlsZUFyZyhjYWxsYWJsZVN0eWxlLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgcHJvcHMpKSA6IGNhbGxhYmxlU3R5bGU7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnKSkge1xuICAgIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZy5mbGF0TWFwKHJlc29sdmVkU3R5bGUgPT4gcHJvY2Vzc1N0eWxlQXJnKHJlc29sdmVkU3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sIHByb3BzKSkpO1xuICB9XG4gIGlmICghIXJlc29sdmVkU3R5bGVzQXJnICYmIHR5cGVvZiByZXNvbHZlZFN0eWxlc0FyZyA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZy52YXJpYW50cykpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhcmlhbnRzID0gW11cbiAgICAgIH0gPSByZXNvbHZlZFN0eWxlc0FyZyxcbiAgICAgIG90aGVyU3R5bGVzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFyaWFudC5wcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmICgob3duZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb3duZXJTdGF0ZVtrZXldKSAhPT0gdmFyaWFudC5wcm9wc1trZXldICYmIHByb3BzW2tleV0gIT09IHZhcmlhbnQucHJvcHNba2V5XSkge1xuICAgICAgICAgICAgaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHRdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKHR5cGVvZiB2YXJpYW50LnN0eWxlID09PSAnZnVuY3Rpb24nID8gdmFyaWFudC5zdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSkgOiB2YXJpYW50LnN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZUlkLFxuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiAoMCwgX3N0eWxlRnVuY3Rpb25TeC5kZWZhdWx0KSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgIHRoZW1lSWRcbiAgICAgIH0pKVxuICAgIH0pKTtcbiAgfTtcbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICAoMCwgX3N0eWxlZEVuZ2luZS5pbnRlcm5hbF9wcm9jZXNzU3R5bGVzKSh0YWcsIHN0eWxlcyA9PiBzdHlsZXMuZmlsdGVyKHN0eWxlID0+ICEoc3R5bGUgIT0gbnVsbCAmJiBzdHlsZS5fX211aV9zeXN0ZW1TeCkpKTtcbiAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IGNvbXBvbmVudE5hbWUsXG4gICAgICAgIHNsb3Q6IGNvbXBvbmVudFNsb3QsXG4gICAgICAgIHNraXBWYXJpYW50c1Jlc29sdmVyOiBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyLFxuICAgICAgICBza2lwU3g6IGlucHV0U2tpcFN4LFxuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIG92ZXJyaWRlc1Jlc29sdmVyID0gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKGxvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QpKVxuICAgICAgfSA9IGlucHV0T3B0aW9ucyxcbiAgICAgIG9wdGlvbnMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6XG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgJiYgY29tcG9uZW50U2xvdCAhPT0gJ3Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290JyB8fCBjb21wb25lbnRTbG90ID09PSAncm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSAoMCwgX3N0eWxlZEVuZ2luZS5kZWZhdWx0KSh0YWcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uLFxuICAgICAgbGFiZWxcbiAgICB9LCBvcHRpb25zKSk7XG4gICAgY29uc3QgdHJhbnNmb3JtU3R5bGVBcmcgPSBzdHlsZXNBcmcgPT4ge1xuICAgICAgLy8gT24gdGhlIHNlcnZlciBFbW90aW9uIGRvZXNuJ3QgdXNlIFJlYWN0LmZvcndhcmRSZWYgZm9yIGNyZWF0aW5nIGNvbXBvbmVudHMsIHNvIHRoZSBjcmVhdGVkXG4gICAgICAvLyBjb21wb25lbnQgc3RheXMgYXMgYSBmdW5jdGlvbi4gVGhpcyBjb25kaXRpb24gbWFrZXMgc3VyZSB0aGF0IHdlIGRvIG5vdCBpbnRlcnBvbGF0ZSBmdW5jdGlvbnNcbiAgICAgIC8vIHdoaWNoIGFyZSBiYXNpY2FsbHkgY29tcG9uZW50cyB1c2VkIGFzIGEgc2VsZWN0b3JzLlxuICAgICAgaWYgKHR5cGVvZiBzdHlsZXNBcmcgPT09ICdmdW5jdGlvbicgJiYgc3R5bGVzQXJnLl9fZW1vdGlvbl9yZWFsICE9PSBzdHlsZXNBcmcgfHwgKDAsIF9kZWVwbWVyZ2UuaXNQbGFpbk9iamVjdCkoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKHtcbiAgICAgICAgICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzQXJnO1xuICAgIH07XG4gICAgY29uc3QgbXVpU3R5bGVkUmVzb2x2ZXIgPSAoc3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zKSA9PiB7XG4gICAgICBsZXQgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IHRyYW5zZm9ybVN0eWxlQXJnKHN0eWxlQXJnKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSA9IGV4cHJlc3Npb25zID8gZXhwcmVzc2lvbnMubWFwKHRyYW5zZm9ybVN0eWxlQXJnKSA6IFtdO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgb3ZlcnJpZGVzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgLy8gVE9ETzogdjcgcmVtb3ZlIGl0ZXJhdGlvbiBhbmQgdXNlIGByZXNvbHZlU3R5bGVBcmcoc3R5bGVPdmVycmlkZXNbc2xvdF0pYCBkaXJlY3RseVxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHByb2Nlc3NTdHlsZUFyZyhzbG90U3R5bGUsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zdCB0aGVtZVZhcmlhbnRzID0gdGhlbWUgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzW2NvbXBvbmVudE5hbWVdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMudmFyaWFudHM7XG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NTdHlsZUFyZyh7XG4gICAgICAgICAgICB2YXJpYW50czogdGhlbWVWYXJpYW50c1xuICAgICAgICAgIH0sICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHsoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgkeygwLCBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdCkodGFnKX0pYDtcbiAgICAgICAgfVxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWcubXVpTmFtZSkge1xuICAgICAgICBDb21wb25lbnQubXVpTmFtZSA9IHRhZy5tdWlOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIENvbXBvbmVudDtcbiAgICB9O1xuICAgIGlmIChkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZykge1xuICAgICAgbXVpU3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZyA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gbXVpU3R5bGVkUmVzb2x2ZXI7XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6461\n")},6481:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n Ay:()=>(__WEBPACK_DEFAULT_EXPORT__),\n BO:()=>(getStyleValue),\n Yn:()=>(getPath)\n});\n var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3967);\n var _breakpoints__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(9452);\n\n\n\nfunction getPath(obj,path,checkVars=true){\n if (!path || typeof path !=='string'){\n return null;\n}\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars){\n const val=`vars.${path}`.split('.').reduce((acc,item)=>acc && acc[item] ? acc[item] :null,obj);\n if (val !=null){\n return val;\n}\n}\n return path.split('.').reduce((acc,item)=>{\n if (acc && acc[item] !=null){\n return acc[item];\n}\n return null;\n},obj);\n}\nfunction getStyleValue(themeMapping,transform,propValueFinal,userValue=propValueFinal){\n let value;\n if (typeof themeMapping==='function'){\n value=themeMapping(propValueFinal);\n}else if (Array.isArray(themeMapping)){\n value=themeMapping[propValueFinal] || userValue;\n}else{\n value=getPath(themeMapping,propValueFinal) || userValue;\n}\n if (transform){\n value=transform(value,userValue,themeMapping);\n}\n return value;\n}\nfunction style(options){\n const{\n prop,\n cssProperty=options.prop,\n themeKey,\n transform\n}=options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn=props=>{\n if (props[prop]==null){\n return null;\n}\n const propValue=props[prop];\n const theme=props.theme;;\n const styleFromPropValue=propValueFinal=>{\n let value=getStyleValue(themeMapping,transform,propValueFinal);\n if (propValueFinal===value && typeof propValueFinal==='string'){\n // Haven't found value\n value=getStyleValue(themeMapping,transform,`${prop}${propValueFinal==='default' ? '':(0,_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__ .A)(propValueFinal)}`,propValueFinal);\n}\n if (cssProperty===false){\n return value;\n}\n return{\n [cssProperty]:value\n};\n};\n return (0,_breakpoints__WEBPACK_IMPORTED_MODULE_1__ .NI)(props,propValue,styleFromPropValue);\n};;\n fn.filterProps=[prop];\n return fn;\n}\n const __WEBPACK_DEFAULT_EXPORT__=(style);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQ4MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ087QUFDSjtBQUMzQztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLEtBQUs7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELEtBQUssRUFBRSxvQ0FBb0MsMEVBQVUsaUJBQWlCO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHlFQUFpQjtBQUM1QjtBQUNBLGlCQUFpQixNQUFxQyxHQUFHLENBRXRELENBQUM7QUFDSjtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzP2ZiMmUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6481\n")},6544:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(styles_createTheme)\n});\n\n// UNUSED EXPORTS:createMuiTheme\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose=__webpack_require__(8587);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js\nvar formatMuiErrorMessage=__webpack_require__(9453);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge=__webpack_require__(1317);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js+5 modules\nvar defaultSxConfig=__webpack_require__(4188);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx=__webpack_require__(3571);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/createTheme/createTheme.js+2 modules\nvar createTheme=__webpack_require__(8749);\n;// ./node_modules/@mui/material/styles/createMixins.js\n\nfunction createMixins(breakpoints,mixins){\n return (0,esm_extends.A)({\n toolbar:{\n minHeight:56,\n [breakpoints.up('xs')]:{\n '@media (orientation:landscape)':{\n minHeight:48\n}\n},\n [breakpoints.up('sm')]:{\n minHeight:64\n}\n}\n},mixins);\n}\n// EXTERNAL MODULE:./node_modules/@mui/system/colorManipulator.js\nvar colorManipulator=__webpack_require__(771);\n;// ./node_modules/@mui/material/colors/common.js\nconst common={\n black:'#000',\n white:'#fff'\n};\n const colors_common=(common);\n;// ./node_modules/@mui/material/colors/grey.js\nconst grey={\n 50:'#fafafa',\n 100:'#f5f5f5',\n 200:'#eeeeee',\n 300:'#e0e0e0',\n 400:'#bdbdbd',\n 500:'#9e9e9e',\n 600:'#757575',\n 700:'#616161',\n 800:'#424242',\n 900:'#212121',\n A100:'#f5f5f5',\n A200:'#eeeeee',\n A400:'#bdbdbd',\n A700:'#616161'\n};\n const colors_grey=(grey);\n;// ./node_modules/@mui/material/colors/purple.js\nconst purple={\n 50:'#f3e5f5',\n 100:'#e1bee7',\n 200:'#ce93d8',\n 300:'#ba68c8',\n 400:'#ab47bc',\n 500:'#9c27b0',\n 600:'#8e24aa',\n 700:'#7b1fa2',\n 800:'#6a1b9a',\n 900:'#4a148c',\n A100:'#ea80fc',\n A200:'#e040fb',\n A400:'#d500f9',\n A700:'#aa00ff'\n};\n const colors_purple=(purple);\n;// ./node_modules/@mui/material/colors/red.js\nconst red={\n 50:'#ffebee',\n 100:'#ffcdd2',\n 200:'#ef9a9a',\n 300:'#e57373',\n 400:'#ef5350',\n 500:'#f44336',\n 600:'#e53935',\n 700:'#d32f2f',\n 800:'#c62828',\n 900:'#b71c1c',\n A100:'#ff8a80',\n A200:'#ff5252',\n A400:'#ff1744',\n A700:'#d50000'\n};\n const colors_red=(red);\n;// ./node_modules/@mui/material/colors/orange.js\nconst orange={\n 50:'#fff3e0',\n 100:'#ffe0b2',\n 200:'#ffcc80',\n 300:'#ffb74d',\n 400:'#ffa726',\n 500:'#ff9800',\n 600:'#fb8c00',\n 700:'#f57c00',\n 800:'#ef6c00',\n 900:'#e65100',\n A100:'#ffd180',\n A200:'#ffab40',\n A400:'#ff9100',\n A700:'#ff6d00'\n};\n const colors_orange=(orange);\n;// ./node_modules/@mui/material/colors/blue.js\nconst blue={\n 50:'#e3f2fd',\n 100:'#bbdefb',\n 200:'#90caf9',\n 300:'#64b5f6',\n 400:'#42a5f5',\n 500:'#2196f3',\n 600:'#1e88e5',\n 700:'#1976d2',\n 800:'#1565c0',\n 900:'#0d47a1',\n A100:'#82b1ff',\n A200:'#448aff',\n A400:'#2979ff',\n A700:'#2962ff'\n};\n const colors_blue=(blue);\n;// ./node_modules/@mui/material/colors/lightBlue.js\nconst lightBlue={\n 50:'#e1f5fe',\n 100:'#b3e5fc',\n 200:'#81d4fa',\n 300:'#4fc3f7',\n 400:'#29b6f6',\n 500:'#03a9f4',\n 600:'#039be5',\n 700:'#0288d1',\n 800:'#0277bd',\n 900:'#01579b',\n A100:'#80d8ff',\n A200:'#40c4ff',\n A400:'#00b0ff',\n A700:'#0091ea'\n};\n const colors_lightBlue=(lightBlue);\n;// ./node_modules/@mui/material/colors/green.js\nconst green={\n 50:'#e8f5e9',\n 100:'#c8e6c9',\n 200:'#a5d6a7',\n 300:'#81c784',\n 400:'#66bb6a',\n 500:'#4caf50',\n 600:'#43a047',\n 700:'#388e3c',\n 800:'#2e7d32',\n 900:'#1b5e20',\n A100:'#b9f6ca',\n A200:'#69f0ae',\n A400:'#00e676',\n A700:'#00c853'\n};\n const colors_green=(green);\n;// ./node_modules/@mui/material/styles/createPalette.js\n\n\n\nconst _excluded=[\"mode\",\"contrastThreshold\",\"tonalOffset\"];\n\n\n\n\n\n\n\n\n\n\nconst light={\n // The colors used to style the text.\n text:{\n // The most important text.\n primary:'rgba(0,0,0,.87)',\n // Secondary text.\n secondary:'rgba(0,0,0,.6)',\n // Disabled text have even lower visual prominence.\n disabled:'rgba(0,0,0,.38)'\n},\n // The color used to divide different elements.\n divider:'rgba(0,0,0,.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background:{\n paper:colors_common.white,\n default:colors_common.white\n},\n // The colors used to style the action elements.\n action:{\n // The color of an active action like an icon button.\n active:'rgba(0,0,0,.54)',\n // The color of an hovered action.\n hover:'rgba(0,0,0,.04)',\n hoverOpacity:.04,\n // The color of a selected action.\n selected:'rgba(0,0,0,.08)',\n selectedOpacity:.08,\n // The color of a disabled action.\n disabled:'rgba(0,0,0,.26)',\n // The background color of a disabled action.\n disabledBackground:'rgba(0,0,0,.12)',\n disabledOpacity:.38,\n focus:'rgba(0,0,0,.12)',\n focusOpacity:.12,\n activatedOpacity:0.12\n}\n};\nconst dark={\n text:{\n primary:colors_common.white,\n secondary:'rgba(255,255,255,.7)',\n disabled:'rgba(255,255,255,.5)',\n icon:'rgba(255,255,255,.5)'\n},\n divider:'rgba(255,255,255,.12)',\n background:{\n paper:'#121212',\n default:'#121212'\n},\n action:{\n active:colors_common.white,\n hover:'rgba(255,255,255,.08)',\n hoverOpacity:.08,\n selected:'rgba(255,255,255,.16)',\n selectedOpacity:.16,\n disabled:'rgba(255,255,255,.3)',\n disabledBackground:'rgba(255,255,255,.12)',\n disabledOpacity:.38,\n focus:'rgba(255,255,255,.12)',\n focusOpacity:.12,\n activatedOpacity:0.24\n}\n};\nfunction addLightOrDark(intent,direction,shade,tonalOffset){\n const tonalOffsetLight=tonalOffset.light || tonalOffset;\n const tonalOffsetDark=tonalOffset.dark || tonalOffset * 1.5;\n if (!intent[direction]){\n if (intent.hasOwnProperty(shade)){\n intent[direction]=intent[shade];\n}else if (direction==='light'){\n intent.light=(0,colorManipulator.a)(intent.main,tonalOffsetLight);\n}else if (direction==='dark'){\n intent.dark=(0,colorManipulator.e$)(intent.main,tonalOffsetDark);\n}\n}\n}\nfunction getDefaultPrimary(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_blue[200],\n light:colors_blue[50],\n dark:colors_blue[400]\n};\n}\n return{\n main:colors_blue[700],\n light:colors_blue[400],\n dark:colors_blue[800]\n};\n}\nfunction getDefaultSecondary(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_purple[200],\n light:colors_purple[50],\n dark:colors_purple[400]\n};\n}\n return{\n main:colors_purple[500],\n light:colors_purple[300],\n dark:colors_purple[700]\n};\n}\nfunction getDefaultError(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_red[500],\n light:colors_red[300],\n dark:colors_red[700]\n};\n}\n return{\n main:colors_red[700],\n light:colors_red[400],\n dark:colors_red[800]\n};\n}\nfunction getDefaultInfo(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_lightBlue[400],\n light:colors_lightBlue[300],\n dark:colors_lightBlue[700]\n};\n}\n return{\n main:colors_lightBlue[700],\n light:colors_lightBlue[500],\n dark:colors_lightBlue[900]\n};\n}\nfunction getDefaultSuccess(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_green[400],\n light:colors_green[300],\n dark:colors_green[700]\n};\n}\n return{\n main:colors_green[800],\n light:colors_green[500],\n dark:colors_green[900]\n};\n}\nfunction getDefaultWarning(mode='light'){\n if (mode==='dark'){\n return{\n main:colors_orange[400],\n light:colors_orange[300],\n dark:colors_orange[700]\n};\n}\n return{\n main:'#ed6c02',\n // closest to orange[800] that pass 3:1.\n light:colors_orange[500],\n dark:colors_orange[900]\n};\n}\nfunction createPalette(palette){\n const{\n mode='light',\n contrastThreshold=3,\n tonalOffset=0.2\n}=palette,\n other=(0,objectWithoutPropertiesLoose.A)(palette,_excluded);\n const primary=palette.primary || getDefaultPrimary(mode);\n const secondary=palette.secondary || getDefaultSecondary(mode);\n const error=palette.error || getDefaultError(mode);\n const info=palette.info || getDefaultInfo(mode);\n const success=palette.success || getDefaultSuccess(mode);\n const warning=palette.warning || getDefaultWarning(mode);\n\n // Use the same logic as\n // Bootstrap:https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n function getContrastText(background){\n const contrastText=(0,colorManipulator.eM)(background,dark.text.primary)>=contrastThreshold ? dark.text.primary :light.text.primary;\n return contrastText;\n}\n const augmentColor=({\n color,\n name,\n mainShade=500,\n lightShade=300,\n darkShade=700\n})=>{\n color=(0,esm_extends.A)({},color);\n if (!color.main && color[mainShade]){\n color.main=color[mainShade];\n}\n if (!color.hasOwnProperty('main')){\n throw new Error(false ? 0 :(0,formatMuiErrorMessage.A)(11,name ? ` (${name})`:'',mainShade));\n}\n if (typeof color.main !=='string'){\n throw new Error(false ? 0 :(0,formatMuiErrorMessage.A)(12,name ? ` (${name})`:'',JSON.stringify(color.main)));\n}\n addLightOrDark(color,'light',lightShade,tonalOffset);\n addLightOrDark(color,'dark',darkShade,tonalOffset);\n if (!color.contrastText){\n color.contrastText=getContrastText(color.main);\n}\n return color;\n};\n const modes={\n dark,\n light\n};\n const paletteOutput=(0,deepmerge.A)((0,esm_extends.A)({\n // A collection of common colors.\n common:(0,esm_extends.A)({},colors_common),\n // prevent mutable object.\n // The palette mode,can be light or dark.\n mode,\n // The colors used to represent primary interface elements for a user.\n primary:augmentColor({\n color:primary,\n name:'primary'\n}),\n // The colors used to represent secondary interface elements for a user.\n secondary:augmentColor({\n color:secondary,\n name:'secondary',\n mainShade:'A400',\n lightShade:'A200',\n darkShade:'A700'\n}),\n // The colors used to represent interface elements that the user should be made aware of.\n error:augmentColor({\n color:error,\n name:'error'\n}),\n // The colors used to represent potentially dangerous actions or important messages.\n warning:augmentColor({\n color:warning,\n name:'warning'\n}),\n // The colors used to present information to the user that is neutral and not necessarily important.\n info:augmentColor({\n color:info,\n name:'info'\n}),\n // The colors used to indicate the successful completion of an action that user triggered.\n success:augmentColor({\n color:success,\n name:'success'\n}),\n // The grey colors.\n grey:colors_grey,\n // Used by `getContrastText()` to maximize the contrast between\n // the background and the text.\n contrastThreshold,\n // Takes a background color and returns the text color that maximizes the contrast.\n getContrastText,\n // Generate a rich color object.\n augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g.,shift from Red 500 to Red 300 or Red 700.\n tonalOffset\n},modes[mode]),other);\n return paletteOutput;\n}\n;// ./node_modules/@mui/material/styles/createTypography.js\n\n\nconst createTypography_excluded=[\"fontFamily\",\"fontSize\",\"fontWeightLight\",\"fontWeightRegular\",\"fontWeightMedium\",\"fontWeightBold\",\"htmlFontSize\",\"allVariants\",\"pxToRem\"];\n\nfunction round(value){\n return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps={\n textTransform:'uppercase'\n};\nconst defaultFontFamily='\"Roboto\",\"Helvetica\",\"Arial\",sans-serif';\n\n\nfunction createTypography(palette,typography){\n const _ref=typeof typography==='function' ? typography(palette) :typography,\n{\n fontFamily=defaultFontFamily,\n // The default font size of the Material Specification.\n fontSize=14,\n // px\n fontWeightLight=300,\n fontWeightRegular=400,\n fontWeightMedium=500,\n fontWeightBold=700,\n // Tell MUI what's the font-size on the html element.\n // 16px is the default font-size used by browsers.\n htmlFontSize=16,\n // Apply the CSS properties to all the variants.\n allVariants,\n pxToRem:pxToRem2\n}=_ref,\n other=(0,objectWithoutPropertiesLoose.A)(_ref,createTypography_excluded);\n const coef=fontSize / 14;\n const pxToRem=pxToRem2 || (size=>`${size / htmlFontSize * coef}rem`);\n const buildVariant=(fontWeight,size,lineHeight,letterSpacing,casing)=>(0,esm_extends.A)({\n fontFamily,\n fontWeight,\n fontSize:pxToRem(size),\n // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight\n},fontFamily===defaultFontFamily ?{\n letterSpacing:`${round(letterSpacing / size)}em`\n},casing,allVariants);\n const variants={\n h1:buildVariant(fontWeightLight,96,1.167,-1.5),\n h2:buildVariant(fontWeightLight,60,1.2,-.5),\n h3:buildVariant(fontWeightRegular,48,1.167,0),\n h4:buildVariant(fontWeightRegular,34,1.235,.25),\n h5:buildVariant(fontWeightRegular,24,1.334,0),\n h6:buildVariant(fontWeightMedium,20,1.6,.15),\n subtitle1:buildVariant(fontWeightRegular,16,1.75,.15),\n subtitle2:buildVariant(fontWeightMedium,14,1.57,.1),\n body1:buildVariant(fontWeightRegular,16,1.5,.15),\n body2:buildVariant(fontWeightRegular,14,1.43,.15),\n button:buildVariant(fontWeightMedium,14,1.75,.4,caseAllCaps),\n caption:buildVariant(fontWeightRegular,12,1.66,.4),\n overline:buildVariant(fontWeightRegular,12,2.66,1,caseAllCaps),\n // TODO v6:Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also,remember to remove the associated types.\n inherit:{\n fontFamily:'inherit',\n fontWeight:'inherit',\n fontSize:'inherit',\n lineHeight:'inherit',\n letterSpacing:'inherit'\n}\n};\n return (0,deepmerge.A)((0,esm_extends.A)({\n htmlFontSize,\n pxToRem,\n fontFamily,\n fontSize,\n fontWeightLight,\n fontWeightRegular,\n fontWeightMedium,\n fontWeightBold\n},variants),other,{\n clone:false // No need to clone deep\n});\n}\n;// ./node_modules/@mui/material/styles/shadows.js\nconst shadowKeyUmbraOpacity=0.2;\nconst shadowKeyPenumbraOpacity=0.14;\nconst shadowAmbientShadowOpacity=0.12;\nfunction createShadow(...px){\n return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`,`${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`,`${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows=['none',createShadow(0,2,1,-1,0,1,1,0,0,1,3,0),createShadow(0,3,1,-2,0,2,2,0,0,1,5,0),createShadow(0,3,3,-2,0,3,4,0,0,1,8,0),createShadow(0,2,4,-1,0,4,5,0,0,1,10,0),createShadow(0,3,5,-1,0,5,8,0,0,1,14,0),createShadow(0,3,5,-1,0,6,10,0,0,1,18,0),createShadow(0,4,5,-2,0,7,10,1,0,2,16,1),createShadow(0,5,5,-3,0,8,10,1,0,3,14,2),createShadow(0,5,6,-3,0,9,12,1,0,3,16,2),createShadow(0,6,6,-3,0,10,14,1,0,4,18,3),createShadow(0,6,7,-4,0,11,15,1,0,4,20,3),createShadow(0,7,8,-4,0,12,17,2,0,5,22,4),createShadow(0,7,8,-4,0,13,19,2,0,5,24,4),createShadow(0,7,9,-4,0,14,21,2,0,5,26,4),createShadow(0,8,9,-5,0,15,22,2,0,6,28,5),createShadow(0,8,10,-5,0,16,24,2,0,6,30,5),createShadow(0,8,11,-5,0,17,26,2,0,6,32,5),createShadow(0,9,11,-5,0,18,28,2,0,7,34,6),createShadow(0,9,12,-6,0,19,29,2,0,7,36,6),createShadow(0,10,13,-6,0,20,31,3,0,8,38,7),createShadow(0,10,13,-6,0,21,33,3,0,8,40,7),createShadow(0,10,14,-6,0,22,35,3,0,8,42,7),createShadow(0,11,14,-7,0,23,36,3,0,9,44,8),createShadow(0,11,15,-7,0,24,38,3,0,9,46,8)];\n const styles_shadows=(shadows);\n// EXTERNAL MODULE:./node_modules/@mui/material/styles/createTransitions.js\nvar createTransitions=__webpack_require__(7091);\n;// ./node_modules/@mui/material/styles/zIndex.js\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex={\n mobileStepper:1000,\n fab:1050,\n speedDial:1050,\n appBar:1100,\n drawer:1200,\n modal:1300,\n snackbar:1400,\n tooltip:1500\n};\n const styles_zIndex=(zIndex);\n;// ./node_modules/@mui/material/styles/createTheme.js\n\n\n\nconst createTheme_excluded=[\"breakpoints\",\"mixins\",\"spacing\",\"palette\",\"transitions\",\"typography\",\"shape\"];,...args){\n const{\n mixins:mixinsInput={}\n}=options,\n other=(0,objectWithoutPropertiesLoose.A)(options,createTheme_excluded);\n if (options.vars &&\n // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n // `generateCssVars` is the closest identifier for checking that the `options` is a result of `extendTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n options.generateCssVars===undefined){\n throw new Error(false ? 0:(0,formatMuiErrorMessage.A)(18));\n}\n const palette=createPalette(paletteInput);\n const systemTheme=(0,createTheme.A)(options);\n let muiTheme=(0,deepmerge.A)(systemTheme,{\n mixins:createMixins(systemTheme.breakpoints,mixinsInput),\n palette,\n // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n shadows:styles_shadows.slice(),\n typography:createTypography(palette,typographyInput),\n transitions:(0,createTransitions.Ay)(transitionsInput),\n zIndex:(0,esm_extends.A)({},styles_zIndex)\n});\n muiTheme=(0,deepmerge.A)(muiTheme,other);\n muiTheme=args.reduce((acc,argument)=>(0,deepmerge.A)(acc,argument),muiTheme);,defaultSxConfig.A,other==null ? void 0 :other.unstable_sxConfig);\n muiTheme.unstable_sx=function sx(props){\n return (0,styleFunctionSx.A)({\n sx:props,\n theme:this\n});\n};\n return muiTheme;\n}\nlet warnedOnce=false;\nfunction createMuiTheme(...args){\n if (false) // removed by dead control flow\n{}\n return createTheme_createTheme(...args);\n}\n const styles_createTheme=(createTheme_createTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDckQsTUFBTSxLQUFxQyxFQUFFO0FBQUEsRUE2QjFDO0FBQ0gsK0JBQStCLDhCQUFRLEdBQUcsRUFBRSw4QkFBZTtBQUMzRDtBQUNBLFdBQVcsa0NBQWU7QUFDMUI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsTUFBTSxLQUFxQyxFQUFFO0FBQUEsRUFLMUM7QUFDSCxTQUFTLHVCQUFXO0FBQ3BCO0FBQ0EseURBQWUsdUJBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVNaXhpbnMuanM/ZTI1OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9jb21tb24uanM/MWY0ZCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmV5LmpzPzVmMTciLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzPzg4ODgiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzP2QxNzEiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzPzAzNTYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvYmx1ZS5qcz81MDZkIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcz9mMjM2Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzPzZhZGUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcz9lMTY1Iiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVR5cG9ncmFwaHkuanM/MzA3OSIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzPzU0N2MiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzPzY5YTYiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanM/YjAzZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm1vZGVcIiwgXCJjb250cmFzdFRocmVzaG9sZFwiLCBcInRvbmFsT2Zmc2V0XCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgeyBkYXJrZW4sIGdldENvbnRyYXN0UmF0aW8sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuZnVuY3Rpb24gYWRkTGlnaHRPckRhcmsoaW50ZW50LCBkaXJlY3Rpb24sIHNoYWRlLCB0b25hbE9mZnNldCkge1xuICBjb25zdCB0b25hbE9mZnNldExpZ2h0ID0gdG9uYWxPZmZzZXQubGlnaHQgfHwgdG9uYWxPZmZzZXQ7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0RGFyayA9IHRvbmFsT2Zmc2V0LmRhcmsgfHwgdG9uYWxPZmZzZXQgKiAxLjU7XG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGJsdWVbNzAwXSxcbiAgICBsaWdodDogYmx1ZVs0MDBdLFxuICAgIGRhcms6IGJsdWVbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRFcnJvcihtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHJlZFs1MDBdLFxuICAgICAgbGlnaHQ6IHJlZFszMDBdLFxuICAgICAgZGFyazogcmVkWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbGlnaHRCbHVlWzcwMF0sXG4gICAgbGlnaHQ6IGxpZ2h0Qmx1ZVs1MDBdLFxuICAgIGRhcms6IGxpZ2h0Qmx1ZVs5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0V2FybmluZyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yYW5nZVs0MDBdLFxuICAgICAgbGlnaHQ6IG9yYW5nZVszMDBdLFxuICAgICAgZGFyazogb3JhbmdlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICAgIGNvbnRyYXN0VGhyZXNob2xkID0gMyxcbiAgICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gICAgfSA9IHBhbGV0dGUsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYWxldHRlLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpO1xuXG4gIC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhc1xuICAvLyBCb290c3RyYXA6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzFkNmUzNzEwZGQ0NDdkZTFhMjAwZjI5ZThmYTUyMWY4YTA5MDhmNzAvc2Nzcy9fZnVuY3Rpb25zLnNjc3MjTDU5XG4gIC8vIGFuZCBtYXRlcmlhbC1jb21wb25lbnRzLXdlYiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2FjNDZiODg2M2M0ZGFiOWZjMjJjNGM2NjJkYzZiZDFiNjVkZDY1MmYvcGFja2FnZXMvbWRjLXRoZW1lL19mdW5jdGlvbnMuc2NzcyNMNTRcbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcbiAgICAgIGlmIChjb250cmFzdCA8IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGNvbnRyYXN0IHJhdGlvIG9mICR7Y29udHJhc3R9OjEgZm9yICR7Y29udHJhc3RUZXh0fSBvbiAke2JhY2tncm91bmR9YCwgJ2ZhbGxzIGJlbG93IHRoZSBXQ0FHIHJlY29tbWVuZGVkIGFic29sdXRlIG1pbmltdW0gY29udHJhc3QgcmF0aW8gb2YgMzoxLicsICdodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuICAgIGlmICghY29sb3IubWFpbiAmJiBjb2xvclttYWluU2hhZGVdKSB7XG4gICAgICBjb2xvci5tYWluID0gY29sb3JbbWFpblNoYWRlXTtcbiAgICB9XG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdsaWdodCcsIGxpZ2h0U2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2RhcmsnLCBkYXJrU2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG4gIGNvbnN0IG1vZGVzID0ge1xuICAgIGRhcmssXG4gICAgbGlnaHRcbiAgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCJjb25zdCBzaGFkb3dLZXlVbWJyYU9wYWNpdHkgPSAwLjI7XG5jb25zdCBzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHkgPSAwLjE0O1xuY29uc3Qgc2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHkgPSAwLjEyO1xuZnVuY3Rpb24gY3JlYXRlU2hhZG93KC4uLnB4KSB7XG4gIHJldHVybiBbYCR7cHhbMF19cHggJHtweFsxXX1weCAke3B4WzJdfXB4ICR7cHhbM119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbNF19cHggJHtweFs1XX1weCAke3B4WzZdfXB4ICR7cHhbN119cHggcmdiYSgwLDAsMCwke3NoYWRvd0tleVBlbnVtYnJhT3BhY2l0eX0pYCwgYCR7cHhbOF19cHggJHtweFs5XX1weCAke3B4WzEwXX1weCAke3B4WzExXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93QW1iaWVudFNoYWRvd09wYWNpdHl9KWBdLmpvaW4oJywnKTtcbn1cblxuLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9iZTg3NDdmOTQ1NzQ2NjljYjVlN2FkZDFhN2M1NGZhNDFhODljZWM3L3BhY2thZ2VzL21kYy1lbGV2YXRpb24vX3ZhcmlhYmxlcy5zY3NzXG5jb25zdCBzaGFkb3dzID0gWydub25lJywgY3JlYXRlU2hhZG93KDAsIDIsIDEsIC0xLCAwLCAxLCAxLCAwLCAwLCAxLCAzLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDEsIC0yLCAwLCAyLCAyLCAwLCAwLCAxLCA1LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDMsIC0yLCAwLCAzLCA0LCAwLCAwLCAxLCA4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDIsIDQsIC0xLCAwLCA0LCA1LCAwLCAwLCAxLCAxMCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNSwgOCwgMCwgMCwgMSwgMTQsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDYsIDEwLCAwLCAwLCAxLCAxOCwgMCksIGNyZWF0ZVNoYWRvdygwLCA0LCA1LCAtMiwgMCwgNywgMTAsIDEsIDAsIDIsIDE2LCAxKSwgY3JlYXRlU2hhZG93KDAsIDUsIDUsIC0zLCAwLCA4LCAxMCwgMSwgMCwgMywgMTQsIDIpLCBjcmVhdGVTaGFkb3coMCwgNSwgNiwgLTMsIDAsIDksIDEyLCAxLCAwLCAzLCAxNiwgMiksIGNyZWF0ZVNoYWRvdygwLCA2LCA2LCAtMywgMCwgMTAsIDE0LCAxLCAwLCA0LCAxOCwgMyksIGNyZWF0ZVNoYWRvdygwLCA2LCA3LCAtNCwgMCwgMTEsIDE1LCAxLCAwLCA0LCAyMCwgMyksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTIsIDE3LCAyLCAwLCA1LCAyMiwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA4LCAtNCwgMCwgMTMsIDE5LCAyLCAwLCA1LCAyNCwgNCksIGNyZWF0ZVNoYWRvdygwLCA3LCA5LCAtNCwgMCwgMTQsIDIxLCAyLCAwLCA1LCAyNiwgNCksIGNyZWF0ZVNoYWRvdygwLCA4LCA5LCAtNSwgMCwgMTUsIDIyLCAyLCAwLCA2LCAyOCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMCwgLTUsIDAsIDE2LCAyNCwgMiwgMCwgNiwgMzAsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTEsIC01LCAwLCAxNywgMjYsIDIsIDAsIDYsIDMyLCA1KSwgY3JlYXRlU2hhZG93KDAsIDksIDExLCAtNSwgMCwgMTgsIDI4LCAyLCAwLCA3LCAzNCwgNiksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMiwgLTYsIDAsIDE5LCAyOSwgMiwgMCwgNywgMzYsIDYpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjAsIDMxLCAzLCAwLCA4LCAzOCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMSwgMzMsIDMsIDAsIDgsIDQwLCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxNCwgLTYsIDAsIDIyLCAzNSwgMywgMCwgOCwgNDIsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE0LCAtNywgMCwgMjMsIDM2LCAzLCAwLCA5LCA0NCwgOCksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTUsIC03LCAwLCAyNCwgMzgsIDMsIDAsIDksIDQ2LCA4KV07XG5leHBvcnQgZGVmYXVsdCBzaGFkb3dzOyIsIi8vIFdlIG5lZWQgdG8gY2VudHJhbGl6ZSB0aGUgekluZGV4IGRlZmluaXRpb25zIGFzIHRoZXkgd29ya1xuLy8gbGlrZSBnbG9iYWwgdmFsdWVzIGluIHRoZSBicm93c2VyLlxuY29uc3QgekluZGV4ID0ge1xuICBtb2JpbGVTdGVwcGVyOiAxMDAwLFxuICBmYWI6IDEwNTAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycyAmJlxuICAvLyBUaGUgZXJyb3Igc2hvdWxkIHRocm93IG9ubHkgZm9yIHRoZSByb290IHRoZW1lIGNyZWF0aW9uIGJlY2F1c2UgdXNlciBpcyBub3QgYWxsb3dlZCB0byB1c2UgYSBjdXN0b20gbm9kZSBgdmFyc2AuXG4gIC8vIGBnZW5lcmF0ZUNzc1ZhcnNgIGlzIHRoZSBjbG9zZXN0IGlkZW50aWZpZXIgZm9yIGNoZWNraW5nIHRoYXQgdGhlIGBvcHRpb25zYCBpcyBhIHJlc3VsdCBvZiBgZXh0ZW5kVGhlbWVgIHdpdGggQ1NTIHZhcmlhYmxlcyBzbyB0aGF0IHVzZXIgY2FuIGNyZWF0ZSBuZXcgdGhlbWUgZm9yIG5lc3RlZCBUaGVtZVByb3ZpZGVyLlxuICBvcHRpb25zLmdlbmVyYXRlQ3NzVmFycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYHZhcnNcXGAgaXMgYSBwcml2YXRlIGZpZWxkIHVzZWQgZm9yIENTUyB2YXJpYWJsZXMgc3VwcG9ydC5cblBsZWFzZSB1c2UgYW5vdGhlciBuYW1lLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDE4KSk7XG4gIH1cbiAgY29uc3QgcGFsZXR0ZSA9IGNyZWF0ZVBhbGV0dGUocGFsZXR0ZUlucHV0KTtcbiAgY29uc3Qgc3lzdGVtVGhlbWUgPSBzeXN0ZW1DcmVhdGVUaGVtZShvcHRpb25zKTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHN5c3RlbVRoZW1lLCB7XG4gICAgbWl4aW5zOiBjcmVhdGVNaXhpbnMoc3lzdGVtVGhlbWUuYnJlYWtwb2ludHMsIG1peGluc0lucHV0KSxcbiAgICBwYWxldHRlLFxuICAgIC8vIERvbid0IHVzZSBbLi4uc2hhZG93c10gdW50aWwgeW91J3ZlIHZlcmlmaWVkIGl0cyB0cmFuc3BpbGVkIGNvZGUgaXMgbm90IGludm9raW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbC5cbiAgICBzaGFkb3dzOiBzaGFkb3dzLnNsaWNlKCksXG4gICAgdHlwb2dyYXBoeTogY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5SW5wdXQpLFxuICAgIHRyYW5zaXRpb25zOiBjcmVhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0lucHV0KSxcbiAgICB6SW5kZXg6IF9leHRlbmRzKHt9LCB6SW5kZXgpXG4gIH0pO1xuICBtdWlUaGVtZSA9IGRlZXBtZXJnZShtdWlUaGVtZSwgb3RoZXIpO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUT0RPIHY2OiBSZWZhY3RvciB0byB1c2UgZ2xvYmFsU3RhdGVDbGFzc2VzTWFwcGluZyBmcm9tIEBtdWkvdXRpbHMgb25jZSBgcmVhZE9ubHlgIHN0YXRlIGNsYXNzIGlzIHVzZWQgaW4gUmF0aW5nIGNvbXBvbmVudC5cbiAgICBjb25zdCBzdGF0ZUNsYXNzZXMgPSBbJ2FjdGl2ZScsICdjaGVja2VkJywgJ2NvbXBsZXRlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdleHBhbmRlZCcsICdmb2N1c2VkJywgJ2ZvY3VzVmlzaWJsZScsICdyZXF1aXJlZCcsICdzZWxlY3RlZCddO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4ge1xuICAgICAgbGV0IGtleTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIGZvciAoa2V5IGluIG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlW2tleV07XG4gICAgICAgIGlmIChzdGF0ZUNsYXNzZXMuaW5kZXhPZihrZXkpICE9PSAtMSAmJiBPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJycsIGtleSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgJHtjb21wb25lbnR9XFxgIGNvbXBvbmVudCBpbmNyZWFzZXMgYCArIGB0aGUgQ1NTIHNwZWNpZmljaXR5IG9mIHRoZSBcXGAke2tleX1cXGAgaW50ZXJuYWwgc3RhdGUuYCwgJ1lvdSBjYW4gbm90IG92ZXJyaWRlIGl0IGxpa2UgdGhpczogJywgSlNPTi5zdHJpbmdpZnkobm9kZSwgbnVsbCwgMiksICcnLCBgSW5zdGVhZCwgeW91IG5lZWQgdG8gdXNlIHRoZSAnJi4ke3N0YXRlQ2xhc3N9JyBzeW50YXg6YCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICByb290OiB7XG4gICAgICAgICAgICAgICAgW2AmLiR7c3RhdGVDbGFzc31gXTogY2hpbGRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbnVsbCwgMiksICcnLCAnaHR0cHM6Ly9tdWkuY29tL3Ivc3RhdGUtY2xhc3Nlcy1ndWlkZSddLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdHlsZSB0byBwcmV2ZW50IGdsb2JhbCBjb25mbGljdHMuXG4gICAgICAgICAgbm9kZVtrZXldID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKG11aVRoZW1lLmNvbXBvbmVudHMpLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gbXVpVGhlbWUuY29tcG9uZW50c1tjb21wb25lbnRdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgaWYgKHN0eWxlT3ZlcnJpZGVzICYmIGNvbXBvbmVudC5pbmRleE9mKCdNdWknKSA9PT0gMCkge1xuICAgICAgICB0cmF2ZXJzZShzdHlsZU92ZXJyaWRlcywgY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmxldCB3YXJuZWRPbmNlID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVpVGhlbWUoLi4uYXJncykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghd2FybmVkT25jZSkge1xuICAgICAgd2FybmVkT25jZSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiB0aGUgY3JlYXRlTXVpVGhlbWUgZnVuY3Rpb24gd2FzIHJlbmFtZWQgdG8gY3JlYXRlVGhlbWUuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVUaGVtZSguLi5hcmdzKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6544\n")},6673:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(createChainedFunction)\n});\n\nfunction createChainedFunction(...funcs){\n return funcs.reduce((acc,func)=>{\n if (func==null){\n return acc;\n}\n return function chainedFunction(...args){\n acc.apply(this,args);\n func.apply(this,args);\n};\n});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjY3My5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFVBQVU7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi9jcmVhdGVDaGFpbmVkRnVuY3Rpb24uanM/Y2UxNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6673\n")},6852:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1523);\n'use client';\n\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_useForkRef__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg1Mi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRStDO0FBQy9DLGlFQUFlLHNFQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VGb3JrUmVmLmpzPzY1ZjAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6852\n")},7091:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n Ay:()=>(createTransitions)\n});\n\n var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8587);\n var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8168);\n\n\nconst _excluded=[\"duration\",\"easing\",\"delay\"];\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nconst easing={\n // This is the most common easing curve.\n easeInOut:'cubic-bezier(.4,0,.2,1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut:'cubic-bezier(0,0,.2,1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn:'cubic-bezier(.4,0,1,1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp:'cubic-bezier(.4,0,.6,1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nconst duration={\n shortest:150,\n shorter:200,\n short:250,\n // most basic recommended timing\n standard:300,\n // this is to be used in complex animations\n complex:375,\n // recommended when something is entering screen\n enteringScreen:225,\n // recommended when something is leaving screen\n leavingScreen:195\n};\nfunction formatMs(milliseconds){\n return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height){\n if (!height){\n return 0;\n}\n const constant=height / 36;\n\n // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n return Math.round((4+15 * constant ** 0.25+constant / 5) * 10);\n}\nfunction createTransitions(inputTransitions){\n const mergedEasing=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({},easing,inputTransitions.easing);,duration,inputTransitions.duration);)=>{\n const{\n duration:durationOption=mergedDuration.standard,\n easing:easingOption=mergedEasing.easeInOut,\n delay=0\n}=options,\n other=(0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ .A)(options,_excluded);\n return (Array.isArray(props) ? props :[props]).map(animatedProp=>`${animatedProp}${typeof durationOption==='string' ? durationOption:formatMs(durationOption)}${easingOption}${typeof delay==='string' ? delay:formatMs(delay)}`).join(',');\n};\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({\n getAutoHeightDuration,\n create\n},inputTransitions,{\n easing:mergedEasing,\n duration:mergedDuration\n});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzA5MS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0c7QUFDMUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseUJBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDZTtBQUNmLHVCQUF1Qix1RkFBUSxHQUFHO0FBQ2xDLHlCQUF5Qix1RkFBUSxHQUFHO0FBQ3BDLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixjQUFjLDRHQUE2QjtBQUMzQyxRQUFRLEtBQXFDLEVBQUU7QUFBQSxFQXVCMUM7QUFDTCwyRUFBMkUsY0FBYyxFQUFFLGdGQUFnRixFQUFFLGNBQWMsRUFBRSxvREFBb0Q7QUFDalA7QUFDQSxTQUFTLHVGQUFRO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zLmpzPzg2YTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7091\n")},7149:(n,c,e)=>{"use strict";e.r(c),e.d(c,{default:()=>l.A});var l=e(3967)},7246:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)([(0,_jsxRuntime.jsx)("circle",{\n cx:"9",\n cy:"9",\n r:"use strict"\n},"use strict"),(0,_jsxRuntime.jsx)("path",{\n d:"M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4m7.76-9.64-1.68 1.69c.84 1.18.84 2.71 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27M20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14"\n},"/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Rk: () => (/* binding */ getRegisteredStyles),\n/* harmony export */   SF: () => (/* binding */ registerStyles),\n/* harmony export */   sk: () => (/* binding */ insertStyles)\n/* harmony export */ });\nvar isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFNkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L2Vtb3Rpb24tdXRpbHMuYnJvd3Nlci5lc20uanM/Nzk1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///41\n")],\'RecordVoiceOver\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzI0Ni5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL2ljb25zLW1hdGVyaWFsL1JlY29yZFZvaWNlT3Zlci5qcz85MWRlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXCJ1c2UgY2xpZW50XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfY3JlYXRlU3ZnSWNvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvY3JlYXRlU3ZnSWNvblwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAoMCwgX2NyZWF0ZVN2Z0ljb24uZGVmYXVsdCkoWy8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShcImNpcmNsZVwiLCB7XG4gIGN4OiBcIjlcIixcbiAgY3k6IFwiOVwiLFxuICByOiBcIjRcIlxufSwgXCIwXCIpLCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNOSAxNWMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNG03Ljc2LTkuNjQtMS42OCAxLjY5Yy44NCAxLjE4Ljg0IDIuNzEgMCAzLjg5bDEuNjggMS42OWMyLjAyLTIuMDIgMi4wMi01LjA3IDAtNy4yN00yMC4wNyAybC0xLjYzIDEuNjNjMi43NyAzLjAyIDIuNzcgNy41NiAwIDEwLjc0TDIwLjA3IDE2YzMuOS0zLjg5IDMuOTEtOS45NSAwLTE0XCJcbn0sIFwiMVwiKV0sICdSZWNvcmRWb2ljZU92ZXInKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7246\n')},7320:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n \"default\":()=>(getDisplayName),\n getFunctionName:()=>(getFunctionName)\n});\n\n// EXTERNAL MODULE:./node_modules/react-is/cjs/react-is.production.js\nvar react_is_production=__webpack_require__(4405);\n;// ./node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js\n\n\n// Simplified polyfill for IE11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nconst fnNameMatchRegex=/^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\nfunction getFunctionName(fn){\n const match=`${fn}`.match(fnNameMatchRegex);\n const name=match && match[1];\n return name || '';\n}\nfunction getFunctionComponentName(Component,fallback=''){\n return Component.displayName || Component.name || getFunctionName(Component) || fallback;\n}\nfunction getWrappedName(outerType,innerType,wrapperName){\n const functionName=getFunctionComponentName(innerType);\n return outerType.displayName || (functionName !=='' ? `${wrapperName}(${functionName})`:wrapperName);\n}\n\n\nfunction getDisplayName(Component){\n if (Component==null){\n return undefined;\n}\n if (typeof Component==='string'){\n return Component;\n}\n if (typeof Component==='function'){\n return getFunctionComponentName(Component,'Component');\n}\n\n // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n if (typeof Component==='object'){\n switch (Component.$$typeof){\n case react_is_production.vM:\n return getWrappedName(Component,Component.render,'ForwardRef');\n case react_is_production.lD:\n return getWrappedName(Component,Component.type,'memo');\n default:\n return undefined;\n}\n}\n return undefined;\n}\n;// ./node_modules/@mui/utils/esm/getDisplayName/index.js\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMyMC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxZQUFZLEdBQUcsYUFBYTtBQUN4Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxzQ0FBVTtBQUNyQjtBQUNBLFdBQVcsZ0NBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOztBQzlDMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZXREaXNwbGF5TmFtZS9nZXREaXNwbGF5TmFtZS5qcz9kMzBiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2dldERpc3BsYXlOYW1lL2luZGV4LmpzPzAwNzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9yd2FyZFJlZiwgTWVtbyB9IGZyb20gJ3JlYWN0LWlzJztcblxuLy8gU2ltcGxpZmllZCBwb2x5ZmlsbCBmb3IgSUUxMSBzdXBwb3J0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vSmFtZXNNR3JlZW5lL0Z1bmN0aW9uLm5hbWUvYmxvYi81OGIzMTRkNGE5ODMxMTBjMzY4MmYxMjI4Zjg0NWQzOWNjY2ExODE3L0Z1bmN0aW9uLm5hbWUuanMjTDNcbmNvbnN0IGZuTmFtZU1hdGNoUmVnZXggPSAvXlxccypmdW5jdGlvbig/Olxcc3xcXHMqXFwvXFwqLipcXCpcXC9cXHMqKSsoW14oXFxzL10qKVxccyovO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShmbikge1xuICBjb25zdCBtYXRjaCA9IGAke2ZufWAubWF0Y2goZm5OYW1lTWF0Y2hSZWdleCk7XG4gIGNvbnN0IG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgcmV0dXJuIG5hbWUgfHwgJyc7XG59XG5mdW5jdGlvbiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCBmYWxsYmFjayA9ICcnKSB7XG4gIHJldHVybiBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgZ2V0RnVuY3Rpb25OYW1lKENvbXBvbmVudCkgfHwgZmFsbGJhY2s7XG59XG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKGlubmVyVHlwZSk7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyBgJHt3cmFwcGVyTmFtZX0oJHtmdW5jdGlvbk5hbWV9KWAgOiB3cmFwcGVyTmFtZSk7XG59XG5cbi8qKlxuICogY2hlcnJ5LXBpY2sgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvNzY5YjFmMjcwZTEyNTFkOWRiZGNlMGZjYmQ5ZTkyZTUwMmQwNTliOC9wYWNrYWdlcy9zaGFyZWQvZ2V0Q29tcG9uZW50TmFtZS5qc1xuICogb3JpZ2luYWxseSBmb3JrZWQgZnJvbSByZWNvbXBvc2UvZ2V0RGlzcGxheU5hbWUgd2l0aCBhZGRlZCBJRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcG9uZW50KSB7XG4gIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfVxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoQ29tcG9uZW50LCAnQ29tcG9uZW50Jyk7XG4gIH1cblxuICAvLyBUeXBlU2NyaXB0IGNhbid0IGhhdmUgY29tcG9uZW50cyBhcyBvYmplY3RzIGJ1dCB0aGV5IGV4aXN0IGluIHRoZSBmb3JtIG9mIGBtZW1vYCBvciBgU3VzcGVuc2VgXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAoQ29tcG9uZW50LiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG4gICAgICBjYXNlIE1lbW86XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZShDb21wb25lbnQsIENvbXBvbmVudC50eXBlLCAnbWVtbycpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9nZXREaXNwbGF5TmFtZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldERpc3BsYXlOYW1lJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7320\n")},7365:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(setRef)\n});\n\nfunction setRef(ref,value){\n if (typeof ref==='function'){\n ref(value);\n}else if (ref){\n ref.current=value;\n}\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU8sSUFBSTtBQUN0QjtBQUNBO0FBQ0EsaURBQWlELEtBQUs7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3NldFJlZi9zZXRSZWYuanM/ZDU4NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRPRE8gdjU6IGNvbnNpZGVyIG1ha2luZyBpdCBwcml2YXRlXG4gKlxuICogcGFzc2VzIHt2YWx1ZX0gdG8ge3JlZn1cbiAqXG4gKiBXQVJOSU5HOiBCZSBzdXJlIHRvIG9ubHkgY2FsbCB0aGlzIGluc2lkZSBhIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIGFzIGEgcmVmLlxuICogT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gY2xlYW51cCB0aGUgcHJldmlvdXMge3JlZn0gaWYgaXQgY2hhbmdlcy4gU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzUzOVxuICpcbiAqIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlIHJlZiBvZiBhbiBpbm5lciBjb21wb25lbnQgdG8gdGhlIHB1YmxpYyBBUElcbiAqIHdoaWxlIHN0aWxsIHVzaW5nIGl0IGluc2lkZSB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHJlZiBBIHJlZiBjYWxsYmFjayBvciByZWYgb2JqZWN0LiBJZiBhbnl0aGluZyBmYWxzeSwgdGhpcyBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRSZWYocmVmLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7365\n")},7379:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(resolveProps)\n});\n var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8168);\n\n\nfunction resolveProps(defaultProps,props){\n const output=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({},props);\n Object.keys(defaultProps).forEach(propName=>{\n if (propName.toString().match(/^(components|slots)$/)){\n output[propName]=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({},defaultProps[propName],output[propName]);\n}else if (propName.toString().match(/^(componentsProps|slotProps)$/)){\n const defaultSlotProps=defaultProps[propName] ||{};\n const slotProps=props[propName];;\n if (!slotProps || !Object.keys(slotProps)){\n // Reduce the iteration if the slot props is empty\n output[propName]=defaultSlotProps;\n}else if (!defaultSlotProps || !Object.keys(defaultSlotProps)){\n // Reduce the iteration if the default slot props is empty\n output[propName]=slotProps;\n}else{\n output[propName]=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({},slotProps);\n Object.keys(defaultSlotProps).forEach(slotPropName=>{\n output[propName][slotPropName]=resolveProps(defaultSlotProps[slotPropName],slotProps[slotPropName]);\n});\n}\n}else if (output[propName]===undefined){\n output[propName]=defaultProps[propName];\n}\n});\n return output;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM3OS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTBEO0FBQzFEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2YsaUJBQWlCLHVGQUFRLEdBQUc7QUFDNUI7QUFDQTtBQUNBLHlCQUF5Qix1RkFBUSxHQUFHO0FBQ3BDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUiwyQkFBMkIsdUZBQVEsR0FBRztBQUN0QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3Jlc29sdmVQcm9wcy9yZXNvbHZlUHJvcHMuanM/NzdiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7379\n')},7437:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n AH:()=>(css),\n i7:()=>(keyframes),\n mL:()=>(Global)\n});\n\n var _emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(4684);\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _emotion_utils__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(41);\n var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1287);\n var _emotion_serialize__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(3174);\n var _emotion_cache__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(5655);\n var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(4146);\n var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\n\n\n\n\n\n\nvar jsx=function jsx(type,props){\n // eslint-disable-next-line prefer-rest-params\n var args=arguments;\n\n if (props==null || !_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.h.call(props,\'css\')){\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(undefined,args);\n}\n\n var argsLength=args.length;\n var createElementArgArray=new Array(argsLength);\n createElementArgArray[0]=_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.E;\n createElementArgArray[1]=(0,_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.c)(type,props);\n\n for (var i=2;i < argsLength;i++){\n createElementArgArray[i]=args[i];\n}\n\n return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null,createElementArgArray);\n};\n\n(function (_jsx){\n var JSX;)));\n}));\n\n// initial render from browser,insertBefore context.sheet.tags[0] or if a style hasn\'t been inserted there yet,appendChild\n// initial client-side render from SSR,use place of hydrating tag\n\nvar Global=(0,_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.w)(function (props,cache){\n\n var styles=props.styles;\n var serialized=(0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__ .J)([styles],undefined,react__WEBPACK_IMPORTED_MODULE_0__.useContext(_emotion_element_f0de968e_browser_esm_js__WEBPACK_IMPORTED_MODULE_5__.T));\n // but it is based on a constant that will never change at runtime\n // it\'s effectively like having two implementations and switching them out\n // so it\'s not actually breaking anything\n\n\n var sheetRef=react__WEBPACK_IMPORTED_MODULE_0__.useRef();\n (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__ .i)(function (){\n var key=cache.key+"-global";// use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet=new cache.sheet.constructor({\n key:key,\n nonce:cache.sheet.nonce,\n container:cache.sheet.container,\n speedy:cache.sheet.isSpeedy\n});\n var rehydrating=false;\n var node=document.querySelector("style[data-emotion=\\""+key+" "+serialized.name+"\\"]");\n\n if (cache.sheet.tags.length){\n sheet.before=cache.sheet.tags[0];\n}\n\n if (node !==null){\n rehydrating=true;// clear the hash so this node won\'t be recognizable as rehydratable by other <Global/>s\n\n node.setAttribute(\'data-emotion\',key);\n sheet.hydrate([node]);\n}\n\n sheetRef.current=[sheet,rehydrating];\n return function (){\n sheet.flush();\n};\n},[cache]);\n (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_1__ .i)(function (){\n var sheetRefCurrent=sheetRef.current;\n var sheet=sheetRefCurrent[0],\n rehydrating=sheetRefCurrent[1];\n\n if (rehydrating){\n sheetRefCurrent[1]=false;\n return;\n}\n\n if (serialized.next !==undefined){\n // insert keyframes\n (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_6__ .sk)(cache,serialized.next,true);\n}\n\n if (sheet.tags.length){\n // if this doesn\'t exist then it will be null so the style element will be appended\n var element=sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before=element;\n sheet.flush();\n}\n\n cache.insert("",serialized,sheet,false);\n},[cache,serialized.name]);\n return null;\n});\n\nfunction css(){\n for (var _len=arguments.length,args=new Array(_len),_key=0;_key < _len;_key++){\n args[_key]=arguments[_key];\n}\n\n return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_2__ .J)(args);\n}\n\nfunction keyframes(){\n var insertable=css.apply(void 0,arguments);\n var name="animation-"+insertable.name;\n return{\n name:name,\n styles:"@keyframes "+name+"{"+insertable.styles+"}",\n anim:1,\n toString:function toString(){\n return "_EMO_"+this.name+"_"+this.styles+"_EMO_";\n}\n};\n}\n\nvar classnames=function classnames(args){\n var len=args.length;\n var i=0;\n var cls=\'\';\n\n for (;i < len;i++){\n var arg=args[i];\n if (arg==null) continue;\n var toAdd=void 0;\n\n switch (typeof arg){\n case \'boolean\':\n break;\n\n case \'object\':\n{\n if (Array.isArray(arg)){\n toAdd=classnames(arg);\n}else{\n\n toAdd=\'\';\n\n for (var k in arg){\n if (arg[k] && k){\n toAdd && (toAdd+=\' \');\n toAdd+=k;\n}\n}\n}\n\n break;\n}\n\n default:\n{\n toAdd=arg;\n}\n}\n\n if (toAdd){\n cls && (cls+=\' \');\n cls+=toAdd;\n}\n}\n\n return cls;\n};\n\nfunction merge(registered,css,className){\n var registeredStyles=[];\n var rawClassName=getRegisteredStyles(registered,registeredStyles,className);\n\n if (registeredStyles.length < 2){\n return className;\n}\n\n return rawClassName+css(registeredStyles);\n}\n\nvar Insertion=function Insertion(_ref){\n var cache=_ref.cache,\n serializedArr=_ref.serializedArr;\n useInsertionEffectAlwaysWithSyncFallback(function (){\n\n for (var i=0;i < serializedArr.length;i++){\n insertStyles(cache,serializedArr[i],false);\n}\n});\n\n return null;\n};\n\nvar ClassNames=(null && (withEmotionCache(function (props,cache){\n var hasRendered=false;\n var serializedArr=[];\n\n var css=function css(){\n if (hasRendered && isDevelopment){\n throw new Error(\'css can only be used during render\');\n}\n\n for (var _len=arguments.length,args=new Array(_len),_key=0;_key < _len;_key++){\n args[_key]=arguments[_key];\n}\n\n var serialized=serializeStyles(args,cache.registered);\n serializedArr.push(serialized);// registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache,serialized,false);\n return cache.key+"-"+serialized.name;\n};\n\n var cx=function cx(){\n if (hasRendered && isDevelopment){\n throw new Error(\'cx can only be used during render\');\n}\n\n for (var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2 < _len2;_key2++){\n args[_key2]=arguments[_key2];\n}\n\n return merge(cache.registered,css,classnames(args));\n};\n\n var content={\n css:css,\n cx:cx,\n theme:React.useContext(ThemeContext)\n};\n var ele=props.children(content);\n hasRendered=true;\n return React.createElement(React.Fragment,null,React.createElement(Insertion,{\n cache:cache,\n serializedArr:serializedArr\n}),ele);\n})));\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQzNy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBNks7QUFDOEI7QUFDNUs7QUFDb0Q7QUFDMkQ7QUFDekY7QUFDN0I7QUFDZ0I7QUFDVDtBQUM2QztBQUMzQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qix1RUFBTTtBQUM5QixXQUFXLGdEQUFtQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLHVFQUFPO0FBQ3BDLDZCQUE2QiwyRUFBa0I7O0FBRS9DLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTs7QUFFQSxTQUFTLGdEQUFtQjtBQUM1Qjs7QUFFQTtBQUNBOztBQUVBLHFCQUFxQiwwQ0FBMEM7QUFDL0QsQ0FBQyxrQkFBa0I7O0FBRW5CO0FBQ0E7O0FBRUEsNEJBQTRCLDJFQUFnQjs7QUFFNUM7QUFDQSxtQkFBbUIsNEVBQWUsc0JBQXNCLDZDQUFnQixDQUFDLHVFQUFZO0FBQ3JGO0FBQ0E7QUFDQTs7O0FBR0EsaUJBQWlCLHlDQUFZO0FBQzdCLEVBQUUsMkhBQW9DO0FBQ3RDLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsMkhBQW9DO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSxzRUFBWTtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0Esc0VBQXNFLGFBQWE7QUFDbkY7QUFDQTs7QUFFQSxTQUFTLDRFQUFlO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMEJBQTBCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLFNBQVM7QUFDbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdFQUF3RSxhQUFhO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyRUFBMkUsZUFBZTtBQUMxRjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxDQUFDOztBQUV1RSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcz8wMWUxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzRGV2ZWxvcG1lbnQgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC1mMGRlOTY4ZS5icm93c2VyLmVzbS5qcyc7XG5leHBvcnQgeyBDIGFzIENhY2hlUHJvdmlkZXIsIFQgYXMgVGhlbWVDb250ZXh0LCBhIGFzIFRoZW1lUHJvdmlkZXIsIF8gYXMgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlLCB1IGFzIHVzZVRoZW1lLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIGIgYXMgd2l0aFRoZW1lIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtZjBkZTk2OGUuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcywgZ2V0UmVnaXN0ZXJlZFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICB9XG5cbiAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSA9IG5ldyBBcnJheShhcmdzTGVuZ3RoKTtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzBdID0gRW1vdGlvbjtcbiAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVtpXSA9IGFyZ3NbaV07XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxuKGZ1bmN0aW9uIChfanN4KSB7XG4gIHZhciBKU1g7XG5cbiAgKGZ1bmN0aW9uIChfSlNYKSB7fSkoSlNYIHx8IChKU1ggPSBfanN4LkpTWCB8fCAoX2pzeC5KU1ggPSB7fSkpKTtcbn0pKGpzeCB8fCAoanN4ID0ge30pKTtcblxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IFwiQGtleWZyYW1lcyBcIiArIG5hbWUgKyBcIntcIiArIGluc2VydGFibGUuc3R5bGVzICsgXCJ9XCIsXG4gICAgYW5pbTogMSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gXCJfRU1PX1wiICsgdGhpcy5uYW1lICsgXCJfXCIgKyB0aGlzLnN0eWxlcyArIFwiX0VNT19cIjtcbiAgICB9XG4gIH07XG59XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7437\n')},7659:module=>{"use strict";;\n\n\nfunction getTarget(target){\n if (typeof memo[target]==="undefined"){\n var styleTarget=document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement){\n try{\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget=styleTarget.contentDocument.head;\n}catch (e){\n // istanbul ignore next\n styleTarget=null;\n}\n}\n memo[target]=styleTarget;\n}\n return memo[target];\n}\n\n\nfunction insertBySelector(insert,style){\n var target=getTarget(insert);\n if (!target){\n throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n}\n target.appendChild(style);\n}\nmodule.exports=insertBySelector;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanM/YjIxNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7659\n')},7825:module=>{"use strict";eval('\n\n\nfunction apply(styleElement,options,obj){\n var css="";\n if (obj.supports){\n css+="@supports (".concat(obj.supports,"){");\n}\n if (obj.media){\n css+="@media ".concat(obj.media,"{");\n}\n var needLayer=typeof obj.layer !=="undefined";\n if (needLayer){\n css+="@layer".concat(obj.layer.length>0 ? " ".concat(obj.layer) :"","{");\n}\n css+=obj.css;\n if (needLayer){\n css+="}";\n}\n if (obj.media){\n css+="}";\n}\n if (obj.supports){\n css+="}";\n}\n var sourceMap=obj.sourceMap;\n if (sourceMap && typeof btoa !=="undefined"){\n css+="\\n");\n}\n\n // For old IE\n \n options.styleTagTransform(css,styleElement,options.options);\n}\nfunction removeStyleElement(styleElement){\n // istanbul ignore if\n if (styleElement.parentNode===null){\n return false;\n}\n styleElement.parentNode.removeChild(styleElement);\n}\n\n\nfunction domAPI(options){\n if (typeof document==="undefined"){\n return{\n update:function update(){}\n};\n}\n var styleElement=options.insertStyleElement(options);\n return{\n update:function update(obj){\n apply(styleElement,options,obj);\n},\n remove:function remove(){\n removeStyleElement(styleElement);\n}\n};\n}\nmodule.exports=domAPI;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzgyNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanM/ZTQ3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7825\n')},8094:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(createBreakpoints)\n});\n\n var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8587);\n var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8168);\n\n\nconst _excluded=[\"values\",\"unit\",\"step\"];\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nconst breakpointKeys=(null && (['xs','sm','md','lg','xl']));\nconst sortBreakpointsValues=values=>{\n const breakpointsAsArray=Object.keys(values).map(key=>({\n key,\n val:values[key]\n})) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1,breakpoint2)=>breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc,obj)=>{\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({},acc,{\n [obj.key]:obj.val\n});\n});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nfunction createBreakpoints(breakpoints){\n const{\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs:[xs,sm).\n values={\n xs:0,\n // phone\n sm:600,\n // tablet\n md:900,\n // small laptop\n lg:1200,\n // desktop\n xl:1536 // large screen\n},\n unit='px',\n step=5\n}=breakpoints,\n other=(0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ .A)(breakpoints,_excluded);\n const sortedValues=sortBreakpointsValues(values);\n const keys=Object.keys(sortedValues);\n function up(key){\n const value=typeof values[key]==='number' ? values[key] :key;\n return `@media (min-width:${value}${unit})`;\n}\n function down(key){\n const value=typeof values[key]==='number' ? values[key] :key;\n return `@media (max-width:${value - step / 100}${unit})`;\n}\n function between(start,end){\n const endIndex=keys.indexOf(end);\n return `@media (min-width:${typeof values[start]==='number' ? values[start]:start}${unit}) and `+`(max-width:${(endIndex !==-1 && typeof values[keys[endIndex]]==='number' ? values[keys[endIndex]]:end) - step / 100}${unit})`;\n}\n function only(key){\n if (keys.indexOf(key)+1 < keys.length){\n return between(key,keys[keys.indexOf(key)+1]);\n}\n return up(key);\n}\n function not(key){\n // handle first and last key separately,for better readability\n const keyIndex=keys.indexOf(key);\n if (keyIndex===0){\n return up(keys[1]);\n}\n if (keyIndex===keys.length - 1){\n return down(keys[keyIndex]);\n}\n return between(key,keys[keys.indexOf(key)+1]).replace('@media','@media not all and');\n}\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ .A)({\n keys,\n values:sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit\n},other);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODA5NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0c7QUFDMUM7QUFDMUQ7QUFDQTtBQUNBO0FBQ08sdUJBQXVCLDhFQUE4QjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVGQUFRLEdBQUc7QUFDdEI7QUFDQSxLQUFLO0FBQ0wsR0FBRyxJQUFJO0FBQ1A7O0FBRUE7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNO0FBQ04sWUFBWSw0R0FBNkI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsTUFBTSxFQUFFLEtBQUs7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLG1CQUFtQixFQUFFLEtBQUs7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDBEQUEwRCxFQUFFLEtBQUssd0JBQXdCLDRHQUE0RyxFQUFFLEtBQUs7QUFDNU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx1RkFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzP2IzYzUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdO1xuICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgICB2YWx1ZXMgPSB7XG4gICAgICAgIHhzOiAwLFxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICBzbTogNjAwLFxuICAgICAgICAvLyB0YWJsZXRcbiAgICAgICAgbWQ6IDkwMCxcbiAgICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICAgIGxnOiAxMjAwLFxuICAgICAgICAvLyBkZXNrdG9wXG4gICAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuICAgICAgfSxcbiAgICAgIHVuaXQgPSAncHgnLFxuICAgICAgc3RlcCA9IDVcbiAgICB9ID0gYnJlYWtwb2ludHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8094\n")},8168:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(_extends)\n});\nfunction _extends(){\n return _extends=Object.assign ? Object.assign.bind() :function (n){\n for (var e=1;e < arguments.length;e++){\n var t=arguments[e];).hasOwnProperty.call(t,r) && (n[r]=t[r]);\n}\n return n;\n},_extends.apply(null,arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODE2OC5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcz82MzNiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8168\n")},8248:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n LX:()=>(createUnarySpacing),\n MA:()=>(createUnaryUnit),\n _W:()=>(getValue),\n Lc:()=>(margin),\n Ms:()=>(padding)\n});\n\n// UNUSED EXPORTS:default,getStyleFromPropValue,marginKeys,paddingKeys\n\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/breakpoints.js\nvar breakpoints=__webpack_require__(9452);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/style.js\nvar style=__webpack_require__(6481);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/merge.js\nvar merge=__webpack_require__(4620);\n;// ./node_modules/@mui/system/esm/memoize.js\nfunction memoize(fn){\n const cache={};\n return arg=>{\n if (cache[arg]===undefined){\n cache[arg]=fn(arg);\n}\n return cache[arg];\n};\n}\n;// ./node_modules/@mui/system/esm/spacing.js\n\n\n\n\n\nconst properties={\n m:'margin',\n p:'padding'\n};\nconst directions={\n t:'Top',\n r:'Right',\n b:'Bottom',\n l:'Left',\n x:['Left','Right'],\n y:['Top','Bottom']\n};\nconst aliases={\n marginX:'mx',\n marginY:'my',\n paddingX:'px',\n paddingY:'py'\n};\n\n// memoize() impact:\n// From 300,0 ops/sec\n// To 350,0 ops/sec\nconst getCssProperties=memoize(prop=>{\n // It's not a shorthand notation.\n if (prop.length>2){\n if (aliases[prop]){\n prop=aliases[prop];\n}else{\n return [prop];\n}\n}\n const [a,b]=prop.split('');\n const property=properties[a];\n const direction=directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir=>property+dir):[property+direction];\n});\nconst marginKeys=['m','mt','mr','mb','ml','mx','my','margin','marginTop','marginRight','marginBottom','marginLeft','marginX','marginY','marginInline','marginInlineStart','marginInlineEnd','marginBlock','marginBlockStart','marginBlockEnd'];\nconst paddingKeys=['p','pt','pr','pb','pl','px','py','padding','paddingTop','paddingRight','paddingBottom','paddingLeft','paddingX','paddingY','paddingInline','paddingInlineStart','paddingInlineEnd','paddingBlock','paddingBlockStart','paddingBlockEnd'];\nconst spacingKeys=[...marginKeys,...paddingKeys];\nfunction createUnaryUnit(theme,themeKey,defaultValue,propName){\n var _getPath;\n const themeSpacing=(_getPath=(0,style.Yn)(theme,themeKey,false)) !=null ? _getPath :defaultValue;\n if (typeof themeSpacing==='number'){\n return abs=>{\n if (typeof abs==='string'){\n return abs;\n}\n return themeSpacing * abs;\n};\n}\n if (Array.isArray(themeSpacing)){\n return abs=>{\n if (typeof abs==='string'){\n return abs;\n}\n return themeSpacing[abs];\n};\n}\n if (typeof themeSpacing==='function'){\n return themeSpacing;\n}\n return ()=>undefined;\n}\nfunction createUnarySpacing(theme){\n return createUnaryUnit(theme,'spacing',8,'spacing');\n}\nfunction getValue(transformer,propValue){\n if (typeof propValue==='string' || propValue==null){\n return propValue;\n}\n const abs=Math.abs(propValue);\n const transformed=transformer(abs);\n if (propValue>=0){\n return transformed;\n}\n if (typeof transformed==='number'){\n return -transformed;\n}\n return `-${transformed}`;\n}\nfunction getStyleFromPropValue(cssProperties,transformer){\n return propValue=>cssProperties.reduce((acc,cssProperty)=>{\n acc[cssProperty]=getValue(transformer,propValue);\n return acc;\n});\n}\nfunction resolveCssProperty(props,keys,prop,transformer){\n // Using a hash computation over an array iteration could be faster,but with only 28 items,\n // it's doesn't worth the bundle size.\n if (keys.indexOf(prop)===-1){\n return null;\n}\n const cssProperties=getCssProperties(prop);\n const styleFromPropValue=getStyleFromPropValue(cssProperties,transformer);\n const propValue=props[prop];\n return (0,breakpoints.NI)(props,propValue,styleFromPropValue);\n}\nfunction spacing_style(props,keys){\n const transformer=createUnarySpacing(props.theme););\n}\nfunction margin(props){\n return spacing_style(props,marginKeys);\n};\nmargin.filterProps=marginKeys;\nfunction padding(props){\n return spacing_style(props,paddingKeys);\n};\npadding.filterProps=paddingKeys;\nfunction spacing(props){\n return spacing_style(props,spacingKeys);\n};\nspacing.filterProps=spacingKeys;\n const esm_spacing=((null && (spacing)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI0OC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7O0FDUnNEO0FBQ0o7QUFDaEI7QUFDTjtBQUNJO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDTTtBQUNBO0FBQ1A7QUFDTztBQUNQO0FBQ0EsbUNBQW1DLHlCQUFPO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQXFDLEVBQUU7QUFBQSxFQUkxQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLEtBQXFDLEVBQUU7QUFBQSxFQU0xQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUMsRUFBRTtBQUFBLEVBRTFDO0FBQ0g7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHlDQUFpQjtBQUMxQjtBQUNBLFNBQVMsYUFBSztBQUNkO0FBQ0EsbUdBQW1HLG9CQUFLLElBQUk7QUFDNUc7QUFDTztBQUNQLFNBQVMsYUFBSztBQUNkO0FBQ0EsbUJBQW1CLE1BQXFDLEdBQUcsQ0FHckQ7QUFDTjtBQUNPO0FBQ1AsU0FBUyxhQUFLO0FBQ2Q7QUFDQSxvQkFBb0IsTUFBcUMsR0FBRyxDQUd0RDtBQUNOO0FBQ0E7QUFDQSxTQUFTLGFBQUs7QUFDZDtBQUNBLG9CQUFvQixNQUFxQyxHQUFHLENBR3REO0FBQ047QUFDQSxrREFBZSx1REFBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzPzRiOWMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanM/ZmMxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIGNvbnN0IGNhY2hlID0ge307XG4gIHJldHVybiBhcmcgPT4ge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn0iLCJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUnO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gbWVtb2l6ZShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5leHBvcnQgY29uc3QgbWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmV4cG9ydCBjb25zdCBwYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UobWVyZ2UsIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xuZXhwb3J0IGRlZmF1bHQgc3BhY2luZzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8248\n")},8312:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n const __WEBPACK_DEFAULT_EXPORT__=('$$material');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMxMi5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBZSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcz81OTMzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0ICckJG1hdGVyaWFsJzsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8312\n")},8336:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(applyStyles)\n});\n\nfunction applyStyles(key,styles){\n // @ts-expect-error this is 'any' type\n const theme=this;\n if (theme.vars && typeof theme.getColorSchemeSelector==='function'){\n // If CssVarsProvider is used as a provider,\n // returns '* :where([data-mui-color-scheme=\"light|dark\"]) &'\n const selector=theme.getColorSchemeSelector(key).replace(/(\\[[^\\]]+\\])/,'*:where($1)');\n return{\n [selector]:styles\n};\n}\n if (theme.palette.mode===key){\n return styles;\n};\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNi5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVCQUF1Qiw4QkFBOEIsdUJBQXVCO0FBQ3BGO0FBQ0EsUUFBUSxzREFBc0QsdUJBQXVCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0MsU0FBUyx1QkFBdUI7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxTQUFTLHVCQUF1QjtBQUNoQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixPQUFPO0FBQzdCLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2FwcGx5U3R5bGVzLmpzP2RkNzEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHVuaXZlcnNhbCB1dGlsaXR5IHRvIHN0eWxlIGNvbXBvbmVudHMgd2l0aCBtdWx0aXBsZSBjb2xvciBtb2Rlcy4gQWx3YXlzIHVzZSBpdCBmcm9tIHRoZSB0aGVtZSBvYmplY3QuXG4gKiBJdCB3b3JrcyB3aXRoOlxuICogIC0gW0Jhc2ljIHRoZW1lXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9kYXJrLW1vZGUvKVxuICogIC0gW0NTUyB0aGVtZSB2YXJpYWJsZXNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9leHBlcmltZW50YWwtYXBpL2Nzcy10aGVtZS12YXJpYWJsZXMvb3ZlcnZpZXcvKVxuICogIC0gWmVyby1ydW50aW1lIGVuZ2luZVxuICpcbiAqIFRpcHM6IFVzZSBhbiBhcnJheSBvdmVyIG9iamVjdCBzcHJlYWQgYW5kIHBsYWNlIGB0aGVtZS5hcHBseVN0eWxlcygpYCBsYXN0LlxuICpcbiAqIOKchSBbeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KV1cbiAqXG4gKiDwn5qrIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8336\n")},8413:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(generateUtilityClasses)\n});\n var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1609);\n\nfunction generateUtilityClasses(componentName,slots,globalStatePrefix='Mui'){\n const result={};\n slots.forEach(slot=>{\n result[slot]=(0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ .Ay)(componentName,slot,globalStatePrefix);\n});\n return result;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQxMy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTJEO0FBQzVDO0FBQ2Y7QUFDQTtBQUNBLG1CQUFtQiwyRUFBb0I7QUFDdkMsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanM/M2Q4NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyhjb21wb25lbnROYW1lLCBzbG90cywgZ2xvYmFsU3RhdGVQcmVmaXggPSAnTXVpJykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICByZXN1bHRbc2xvdF0gPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8413\n")},8466:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3967);\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_capitalize__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ2Ni5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQStDO0FBQy9DLGlFQUFlLHNFQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzP2M1ZTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8466\n')},8493:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('\n\n\nvar React=__webpack_require__(1594);\nfunction is(x,y){\n return (x===y && (0 !==x || 1 / x===1 / y)) || (x !==x && y !==y);\n}\nvar objectIs="function"===typeof Object.is ? Object.is :is,\n useState=React.useState,\n useEffect=React.useEffect,\n useLayoutEffect=React.useLayoutEffect,\n useDebugValue=React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe,getSnapshot){\n var value=getSnapshot(),\n _useState=useState({inst:{value:value,getSnapshot:getSnapshot}}),\n inst=_useState[0].inst,\n forceUpdate=_useState[1];\n useLayoutEffect(\n function (){\n inst.value=value;\n inst.getSnapshot=getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({inst:inst});\n},\n [subscribe,value,getSnapshot]\n);\n useEffect(\n function (){\n checkIfSnapshotChanged(inst) && forceUpdate({inst:inst});\n return subscribe(function (){\n checkIfSnapshotChanged(inst) && forceUpdate({inst:inst});\n});\n},\n [subscribe]\n);\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst){\n var latestGetSnapshot=inst.getSnapshot;\n inst=inst.value;\n try{\n var nextValue=latestGetSnapshot();\n return !objectIs(inst,nextValue);\n}catch (error){\n return !0;\n}\n}\nfunction useSyncExternalStore$1(subscribe,getSnapshot){\n return getSnapshot();\n}\nvar shim=\n "undefined"===typeof window ||\n "undefined"===typeof window.document ||\n "undefined"===typeof window.document.createElement\n ? useSyncExternalStore$1\n:useSyncExternalStore$2;\nexports.useSyncExternalStore=\n void 0 !==React.useSyncExternalStore ? React.useSyncExternalStore:shim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQ5My5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixZQUFZLG1CQUFPLENBQUMsSUFBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixRQUFRLDBDQUEwQztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsWUFBWTtBQUNoRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsWUFBWTtBQUNoRTtBQUNBLHNEQUFzRCxZQUFZO0FBQ2xFLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLmpzP2I0ODkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xufVxudmFyIG9iamVjdElzID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgT2JqZWN0LmlzID8gT2JqZWN0LmlzIDogaXMsXG4gIHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUsXG4gIHVzZUVmZmVjdCA9IFJlYWN0LnVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0ID0gUmVhY3QudXNlTGF5b3V0RWZmZWN0LFxuICB1c2VEZWJ1Z1ZhbHVlID0gUmVhY3QudXNlRGVidWdWYWx1ZTtcbmZ1bmN0aW9uIHVzZVN5bmNFeHRlcm5hbFN0b3JlJDIoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCkge1xuICB2YXIgdmFsdWUgPSBnZXRTbmFwc2hvdCgpLFxuICAgIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHsgaW5zdDogeyB2YWx1ZTogdmFsdWUsIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9IH0pLFxuICAgIGluc3QgPSBfdXNlU3RhdGVbMF0uaW5zdCxcbiAgICBmb3JjZVVwZGF0ZSA9IF91c2VTdGF0ZVsxXTtcbiAgdXNlTGF5b3V0RWZmZWN0KFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGluc3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcbiAgICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VVcGRhdGUoeyBpbnN0OiBpbnN0IH0pO1xuICAgIH0sXG4gICAgW3N1YnNjcmliZSwgdmFsdWUsIGdldFNuYXBzaG90XVxuICApO1xuICB1c2VFZmZlY3QoXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgICByZXR1cm4gc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtzdWJzY3JpYmVdXG4gICk7XG4gIHVzZURlYnVnVmFsdWUodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgaW5zdCA9IGluc3QudmFsdWU7XG4gIHRyeSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAhMDtcbiAgfVxufVxuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUkMShzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gIHJldHVybiBnZXRTbmFwc2hvdCgpO1xufVxudmFyIHNoaW0gPVxuICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgfHxcbiAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgPyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxXG4gICAgOiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQyO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9XG4gIHZvaWQgMCAhPT0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUgPyBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZSA6IHNoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8493\n')},8586:(n,c,e)=>{"use strict";e.r(c),e.d(c,{default:()=>l.A});var l=e(725)},8587:(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(_objectWithoutPropertiesLoose)\n});\nfunction _objectWithoutPropertiesLoose(r,e){\n if (null==r) return{};;.hasOwnProperty.call(r,n)){\n if (-1 !==e.indexOf(n)) continue;\n t[n]=r[n];\n}\n return t;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU4Ny5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/OGQzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8587\n")},8593:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(utils_isMuiElement)\n});\n\n// EXTERNAL MODULE:external "React"\nvar external_React_=__webpack_require__(1594);\n;// ./node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js\n\nfunction isMuiElement(element,muiNames){\n var _muiName,_element$type;\n return external_React_.isValidElement(element) && muiNames.indexOf(// For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName=element.type.muiName) !=null ? _muiName:(_element$type=element.type)==null || (_element$type=_element$type._payload)==null || (_element$type=_element$type.value)==null ? void 0:_element$type.muiName) !==-1;\n}\n;// ./node_modules/@mui/material/utils/isMuiElement.js\n\n const utils_isMuiElement=(isMuiElement);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODU5My5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFDaEI7QUFDZjtBQUNBLHNCQUFzQiw4QkFBb0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsQzs7QUNQbUQ7QUFDbkQseURBQWUsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanM/OTQ3NiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcz8zMzczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwiaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICdAbXVpL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8593\n')},8749:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n A:()=>(createTheme_createTheme)\n});\n\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends=__webpack_require__(8168);\n// EXTERNAL MODULE:./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose=__webpack_require__(8587);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/deepmerge/deepmerge.js\nvar deepmerge=__webpack_require__(1317);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/createTheme/createBreakpoints.js\nvar createBreakpoints=__webpack_require__(8094);\n;// ./node_modules/@mui/system/esm/createTheme/shape.js\nconst shape={\n borderRadius:4\n};\n const createTheme_shape=(shape);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/spacing.js+1 modules\nvar esm_spacing=__webpack_require__(8248);\n;// ./node_modules/@mui/system/esm/createTheme/createSpacing.js\n\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nfunction createSpacing(spacingInput=8){\n // Already transformed.\n if (spacingInput.mui){\n return spacingInput;\n}\n\n // Material Design layouts are visually balanced. Most measurements align to an 8dp grid,which aligns both spacing and the overall layout.\n // Smaller components,such as icons,can align to a 4dp grid.\n // https://m2.material.io/design/layout/understanding-layout.html\n const transform=(0,esm_spacing.LX)({\n spacing:spacingInput\n});\n const spacing=(...argsInput)=>{\n if (false) // removed by dead control flow\n{}\n const args=argsInput.length===0 ? [1] :argsInput;\n return args.map(argument=>{\n const output=transform(argument);\n return typeof output==='number' ? `${output}px`:output;\n}).join(' ');\n};\n spacing.mui=true;\n return spacing;\n}\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js\nvar styleFunctionSx=__webpack_require__(3571);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js+5 modules\nvar defaultSxConfig=__webpack_require__(4188);\n// EXTERNAL MODULE:./node_modules/@mui/system/esm/createTheme/applyStyles.js\nvar applyStyles=__webpack_require__(8336);\n;// ./node_modules/@mui/system/esm/createTheme/createTheme.js\n\n\nconst _excluded=[\"breakpoints\",\"palette\",\"spacing\",\"shape\"];,...args){\n const{\n breakpoints:breakpointsInput={}\n}=options,\n other=(0,objectWithoutPropertiesLoose.A)(options,_excluded);\n const breakpoints=(0,createBreakpoints.A)(breakpointsInput);\n const spacing=createSpacing(spacingInput);\n let muiTheme=(0,deepmerge.A)({\n breakpoints,\n direction:'ltr',\n components:{},\n // Inject component definitions.\n palette:(0,esm_extends.A)({\n mode:'light'\n},createTheme_shape,shapeInput)\n},other);\n muiTheme.applyStyles=applyStyles.A;\n muiTheme=args.reduce((acc,argument)=>(0,deepmerge.A)(acc,argument),muiTheme);,defaultSxConfig.A,other==null ? void 0 :other.unstable_sxConfig);\n muiTheme.unstable_sx=function sx(props){\n return (0,styleFunctionSx.A)({\n sx:props,\n theme:this\n});\n};\n return muiTheme;\n}\n const createTheme_createTheme=(createTheme);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODc0OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQSx3REFBZSxLQUFLLEU7Ozs7QUNINEI7O0FBRWhEO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMENBQWtCO0FBQ3RDO0FBQ0EsR0FBRztBQUNIO0FBQ0EsUUFBUSxLQUFxQyxFQUFFO0FBQUEsRUFJMUM7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsT0FBTztBQUNwRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7Ozs7QUMvQjBEO0FBQzBDO0FBQ3BHO0FBQzZDO0FBQ087QUFDeEI7QUFDZ0I7QUFDcUI7QUFDQTtBQUN6QjtBQUN4QyxpQ0FBaUM7QUFDakM7QUFDQSx3Q0FBd0M7QUFDeEMsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSxNQUFNO0FBQ04sWUFBWSwrQ0FBNkI7QUFDekMsc0JBQXNCLG9DQUFpQjtBQUN2QyxrQkFBa0IsYUFBYTtBQUMvQixpQkFBaUIsNEJBQVM7QUFDMUI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLGFBQWEsOEJBQVE7QUFDckI7QUFDQSxLQUFLO0FBQ0w7QUFDQSxXQUFXLDhCQUFRLEdBQUcsRUFBRSxpQkFBSztBQUM3QixHQUFHO0FBQ0gseUJBQXlCLDBCQUFXO0FBQ3BDLDRDQUE0Qyw0QkFBUztBQUNyRCwrQkFBK0IsOEJBQVEsR0FBRyxFQUFFLDhCQUFlO0FBQzNEO0FBQ0EsV0FBVyxrQ0FBZTtBQUMxQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDhEQUFlLFdBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvc2hhcGUuanM/YWRkNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcz8xMDgwIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcz9lYmY2Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8749\n")},8851:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _mui_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3313);\n'use client';\n\n\n const __WEBPACK_DEFAULT_EXPORT__=(_mui_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_0__ .A);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg1MS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRTZEO0FBQzdELGlFQUFlLDZFQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanM/ZjJiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICdAbXVpL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlzRm9jdXNWaXNpYmxlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8851\n")},8928:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__,{\n capitalize:()=>(capitalize.A),\n createChainedFunction:()=>(createChainedFunction.A),\n createSvgIcon:()=>(createSvgIcon.A),\n debounce:()=>(debounce.A),\n deprecatedPropType:()=>(utils_deprecatedPropType),\n isMuiElement:()=>(isMuiElement.A),\n ownerDocument:()=>(ownerDocument.A),\n ownerWindow:()=>(ownerWindow.A),\n requirePropFactory:()=>(utils_requirePropFactory),\n setRef:()=>(utils_setRef),\n unstable_ClassNameGenerator:()=>(unstable_ClassNameGenerator),\n unstable_useEnhancedEffect:()=>(useEnhancedEffect.A),\n unstable_useId:()=>(useId.A),\n unsupportedProp:()=>(utils_unsupportedProp),\n useControlled:()=>(useControlled.A),\n useEventCallback:()=>(useEventCallback.A),\n useForkRef:()=>(useForkRef.A),\n useIsFocusVisible:()=>(useIsFocusVisible.A)\n});\n\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js\nvar ClassNameGenerator=__webpack_require__(9071);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/capitalize.js\nvar capitalize=__webpack_require__(8466);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/createChainedFunction.js\nvar createChainedFunction=__webpack_require__(862);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/createSvgIcon.js\nvar createSvgIcon=__webpack_require__(561);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/debounce.js\nvar debounce=__webpack_require__(1935);\n;// ./node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js\nfunction deprecatedPropType(validator,reason){\n if (true){\n return ()=>null;\n}\n}\n;// ./node_modules/@mui/material/utils/deprecatedPropType.js\n\n const utils_deprecatedPropType=(deprecatedPropType);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/isMuiElement.js+1 modules\nvar isMuiElement=__webpack_require__(8593);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerDocument.js\nvar ownerDocument=__webpack_require__(6248);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/ownerWindow.js\nvar ownerWindow=__webpack_require__(3749);\n;// ./node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js\n\nfunction requirePropFactory(componentNameInError,Component){\n if (true){\n return ()=>null;\n}\n}\n;// ./node_modules/@mui/material/utils/requirePropFactory.js\n\n const utils_requirePropFactory=(requirePropFactory);\n// EXTERNAL MODULE:./node_modules/@mui/utils/esm/setRef/setRef.js\nvar setRef=__webpack_require__(7365);\n;// ./node_modules/@mui/material/utils/setRef.js\n\n const utils_setRef=(setRef.A);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEnhancedEffect.js\nvar useEnhancedEffect=__webpack_require__(2778);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useId.js\nvar useId=__webpack_require__(1668);\n;// ./node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js\nfunction unsupportedProp(props,propName,componentName,location,propFullName){\n if (true){\n return null;\n}\n}\n;// ./node_modules/@mui/material/utils/unsupportedProp.js\n\n const utils_unsupportedProp=(unsupportedProp);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useControlled.js\nvar useControlled=__webpack_require__(1159);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useEventCallback.js\nvar useEventCallback=__webpack_require__(3034);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useForkRef.js\nvar useForkRef=__webpack_require__(6852);\n// EXTERNAL MODULE:./node_modules/@mui/material/utils/useIsFocusVisible.js\nvar useIsFocusVisible=__webpack_require__(8851);\n;// ./node_modules/@mui/material/utils/index.js\n'use client';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO:remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst unstable_ClassNameGenerator={\n configure:generator=>{\n if (false) // removed by dead control flow\n{}\n ClassNameGenerator.A.configure(generator);\n}\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyOC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZTtBQUNmLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBLEVBQUU7QUFBQSxFQU9FO0FBQ0osQzs7QUNaK0Q7QUFDL0QsK0RBQWUsa0JBQWtCLEU7Ozs7Ozs7O0FDRHlCO0FBQzNDO0FBQ2YsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUFBLEVBQTJFO0FBQzdFLEVBQUU7QUFBQSxFQWFFO0FBQ0osRUFBRTtBQUFBLEVBQW1CO0FBQ3JCLEM7O0FDdkIrRDtBQUMvRCwrREFBZSxrQkFBa0IsRTs7OztBQ0RNO0FBQ3ZDLG1EQUFlLHFCQUFNLEU7Ozs7OztBQ0ROO0FBQ2YsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0EsRUFBRTtBQUFBLEVBQWtEO0FBQ3BELEVBQUU7QUFBQSxFQUVDO0FBQ0gsRUFBRTtBQUFBLEVBQVk7QUFDZCxDOztBQ1R5RDtBQUN6RCw0REFBZSxlQUFlLEU7Ozs7Ozs7Ozs7QUNEOUI7O0FBRStFO0FBQzFCO0FBQ3NCO0FBQ2hCO0FBQ1Y7QUFDb0I7QUFDWjtBQUNFO0FBQ0o7QUFDYztBQUN4QjtBQUMrQjtBQUN4QjtBQUNXO0FBQ0o7QUFDTTtBQUNaO0FBQ2M7QUFDbkU7QUFDQTtBQUNPO0FBQ1A7QUFDQSxRQUFRLEtBQXFDLEVBQUU7QUFBQSxFQUUxQztBQUNMLElBQUksaUNBQWtCO0FBQ3RCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9kZXByZWNhdGVkUHJvcFR5cGUvZGVwcmVjYXRlZFByb3BUeXBlLmpzPzAyYTMiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUuanM/OTE3MyIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9yZXF1aXJlUHJvcEZhY3RvcnkvcmVxdWlyZVByb3BGYWN0b3J5LmpzP2YyYmUiLCJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnkuanM/ODcxNiIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3NldFJlZi5qcz8yOGMxIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvZXNtL3Vuc3VwcG9ydGVkUHJvcC91bnN1cHBvcnRlZFByb3AuanM/ZDQwNCIsIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcC5qcz8xOWNiIiwid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaW5kZXguanM/NTFkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXByZWNhdGVkUHJvcFR5cGUodmFsaWRhdG9yLCByZWFzb24pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWVTYWZlID0gY29tcG9uZW50TmFtZSB8fCAnPDxhbm9ueW1vdXM+Pic7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcbiAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYFRoZSAke2xvY2F0aW9ufSBcXGAke3Byb3BGdWxsTmFtZVNhZmV9XFxgIG9mIGAgKyBgXFxgJHtjb21wb25lbnROYW1lU2FmZX1cXGAgaXMgZGVwcmVjYXRlZC4gJHtyZWFzb259YCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xufSIsImltcG9ydCBkZXByZWNhdGVkUHJvcFR5cGUgZnJvbSAnQG11aS91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUnO1xuZXhwb3J0IGRlZmF1bHQgZGVwcmVjYXRlZFByb3BUeXBlOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWlyZVByb3BGYWN0b3J5KGNvbXBvbmVudE5hbWVJbkVycm9yLCBDb21wb25lbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZm9yZWlnbi1wcm9wLXR5cGVzXG4gIGNvbnN0IHByZXZQcm9wVHlwZXMgPSBDb21wb25lbnQgPyBfZXh0ZW5kcyh7fSwgQ29tcG9uZW50LnByb3BUeXBlcykgOiBudWxsO1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVkUHJvcCA9PiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCAuLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcHJvcEZ1bGxOYW1lU2FmZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcbiAgICBjb25zdCBkZWZhdWx0VHlwZUNoZWNrZXIgPSBwcmV2UHJvcFR5cGVzID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UHJvcFR5cGVzW3Byb3BGdWxsTmFtZVNhZmVdO1xuICAgIGlmIChkZWZhdWx0VHlwZUNoZWNrZXIpIHtcbiAgICAgIGNvbnN0IHR5cGVDaGVja2VyUmVzdWx0ID0gZGVmYXVsdFR5cGVDaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgLi4uYXJncyk7XG4gICAgICBpZiAodHlwZUNoZWNrZXJSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVDaGVja2VyUmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXByb3BzW3JlcXVpcmVkUHJvcF0pIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYFRoZSBwcm9wIFxcYCR7cHJvcEZ1bGxOYW1lU2FmZX1cXGAgb2YgYCArIGBcXGAke2NvbXBvbmVudE5hbWVJbkVycm9yfVxcYCBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIFxcYCR7cmVxdWlyZWRQcm9wfVxcYCBwcm9wLmApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIHJlcXVpcmVQcm9wO1xufSIsImltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnQG11aS91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnknO1xuZXhwb3J0IGRlZmF1bHQgcmVxdWlyZVByb3BGYWN0b3J5OyIsImltcG9ydCBzZXRSZWYgZnJvbSAnQG11aS91dGlscy9zZXRSZWYnO1xuZXhwb3J0IGRlZmF1bHQgc2V0UmVmOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuc3VwcG9ydGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBUaGUgcHJvcCBcXGAke3Byb3BGdWxsTmFtZVNhZmV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSByZW1vdmUgaXQuYCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IHVuc3VwcG9ydGVkUHJvcCBmcm9tICdAbXVpL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgZGVmYXVsdCB1bnN1cHBvcnRlZFByb3A7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgYXMgQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNhcGl0YWxpemUgfSBmcm9tICcuL2NhcGl0YWxpemUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN2Z0ljb24gfSBmcm9tICcuL2NyZWF0ZVN2Z0ljb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWJvdW5jZSB9IGZyb20gJy4vZGVib3VuY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICcuL2RlcHJlY2F0ZWRQcm9wVHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJy4vaXNNdWlFbGVtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJy4vb3duZXJEb2N1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyV2luZG93IH0gZnJvbSAnLi9vd25lcldpbmRvdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlcXVpcmVQcm9wRmFjdG9yeSB9IGZyb20gJy4vcmVxdWlyZVByb3BGYWN0b3J5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0UmVmIH0gZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VJZCB9IGZyb20gJy4vdXNlSWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN1cHBvcnRlZFByb3AgfSBmcm9tICcuL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUNvbnRyb2xsZWQgfSBmcm9tICcuL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnLi91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRm9ya1JlZiB9IGZyb20gJy4vdXNlRm9ya1JlZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnLi91c2VJc0ZvY3VzVmlzaWJsZSc7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBleHBvcnQgb25jZSBDbGFzc05hbWVHZW5lcmF0b3IgaXMgc3RhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yID0ge1xuICBjb25maWd1cmU6IGdlbmVyYXRvciA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ01VSTogYENsYXNzTmFtZUdlbmVyYXRvcmAgaW1wb3J0IGZyb20gYEBtdWkvbWF0ZXJpYWwvdXRpbHNgIGlzIG91dGRhdGVkIGFuZCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9jbGFzc05hbWUnYCBpbnN0ZWFkXCIsICcnLCAnVGhlIGRldGFpbCBvZiB0aGUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMwMDExI2lzc3VlY29tbWVudC0xMDI0OTkzNDAxJywgJycsICdUaGUgdXBkYXRlZCBkb2N1bWVudGF0aW9uOiBodHRwczovL211aS5jb20vZ3VpZGVzL2NsYXNzbmFtZS1nZW5lcmF0b3IvJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgICBDbGFzc05hbWVHZW5lcmF0b3IuY29uZmlndXJlKGdlbmVyYXRvcik7XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8928\n")},8944:(n,c,e)=>{"use strict";e.r(c),e.d(c,{default:()=>l.A});var l=e(9453)},8989:(__unused_webpack_module,exports)=>{"use strict";eval('var __webpack_unused_export__;\n\nvar b=Symbol.for("react.element"),c=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),e=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),g=Symbol.for("react.provider"),h=Symbol.for("react.context"),k=Symbol.for("react.server_context"),l=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),n=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),t=Symbol.for("react.offscreen"),u;u=Symbol.for("react.module.reference");\nfunction v(a){if("object"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}__webpack_unused_export__=h;__webpack_unused_export__=g;__webpack_unused_export__=b;__webpack_unused_export__=l;__webpack_unused_export__=d;__webpack_unused_export__=q;__webpack_unused_export__=p;__webpack_unused_export__=c;__webpack_unused_export__=f;__webpack_unused_export__=e;__webpack_unused_export__=m;\n__webpack_unused_export__=n;__webpack_unused_export__=function(){return!1};__webpack_unused_export__=function(){return!1};__webpack_unused_export__=function(a){return v(a)===h};__webpack_unused_export__=function(a){return v(a)===g};__webpack_unused_export__=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===b};__webpack_unused_export__=function(a){return v(a)===l};__webpack_unused_export__=function(a){return v(a)===d};__webpack_unused_export__=function(a){return v(a)===q};__webpack_unused_export__=function(a){return v(a)===p};\n__webpack_unused_export__=function(a){return v(a)===c};__webpack_unused_export__=function(a){return v(a)===f};__webpack_unused_export__=function(a){return v(a)===e};__webpack_unused_export__=function(a){return v(a)===m};__webpack_unused_export__=function(a){return v(a)===n};\n__webpack_unused_export__=function(a){return"string"===typeof a||"function"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||"object"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};__webpack_unused_export__=v;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2EsOGJBQThiO0FBQzNjLGNBQWMsa0NBQWtDLGlCQUFpQixVQUFVLDBCQUEwQiw0Q0FBNEMsa0NBQWtDLG1EQUFtRCxrQkFBa0Isa0JBQWtCLHlCQUF1QixHQUFHLHlCQUF1QixHQUFHLHlCQUFlLEdBQUcseUJBQWtCLEdBQUcseUJBQWdCLEdBQUcseUJBQVksR0FBRyx5QkFBWSxHQUFHLHlCQUFjLEdBQUcseUJBQWdCLEdBQUcseUJBQWtCLEdBQUcseUJBQWdCO0FBQy9kLHlCQUFvQixHQUFHLHlCQUFtQixZQUFZLFVBQVUseUJBQXdCLFlBQVksVUFBVSx5QkFBeUIsYUFBYSxpQkFBaUIseUJBQXlCLGFBQWEsaUJBQWlCLHlCQUFpQixhQUFhLHFEQUFxRCx5QkFBb0IsYUFBYSxpQkFBaUIseUJBQWtCLGFBQWEsaUJBQWlCLHlCQUFjLGFBQWEsaUJBQWlCLHlCQUFjLGFBQWE7QUFDeGQseUJBQWdCLGFBQWEsaUJBQWlCLHlCQUFrQixhQUFhLGlCQUFpQix5QkFBb0IsYUFBYSxpQkFBaUIseUJBQWtCLGFBQWEsaUJBQWlCLHlCQUFzQixhQUFhO0FBQ25PLHlCQUEwQixhQUFhLDJQQUEyUCx5QkFBYyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanM/MGQ0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLGQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGU9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksaz1TeW1ib2wuZm9yKFwicmVhY3Quc2VydmVyX2NvbnRleHRcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksbj1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxwPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLHE9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksdD1TeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLHU7dT1TeW1ib2wuZm9yKFwicmVhY3QubW9kdWxlLnJlZmVyZW5jZVwiKTtcbmZ1bmN0aW9uIHYoYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHI9YS4kJHR5cGVvZjtzd2l0Y2gocil7Y2FzZSBiOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGQ6Y2FzZSBmOmNhc2UgZTpjYXNlIG06Y2FzZSBuOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBoOmNhc2UgbDpjYXNlIHE6Y2FzZSBwOmNhc2UgZzpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiByfX1jYXNlIGM6cmV0dXJuIHJ9fX1leHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWc7ZXhwb3J0cy5FbGVtZW50PWI7ZXhwb3J0cy5Gb3J3YXJkUmVmPWw7ZXhwb3J0cy5GcmFnbWVudD1kO2V4cG9ydHMuTGF6eT1xO2V4cG9ydHMuTWVtbz1wO2V4cG9ydHMuUG9ydGFsPWM7ZXhwb3J0cy5Qcm9maWxlcj1mO2V4cG9ydHMuU3RyaWN0TW9kZT1lO2V4cG9ydHMuU3VzcGVuc2U9bTtcbmV4cG9ydHMuU3VzcGVuc2VMaXN0PW47ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWh9O2V4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1nfTtleHBvcnRzLmlzRWxlbWVudD1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09Yn07ZXhwb3J0cy5pc0ZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1sfTtleHBvcnRzLmlzRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1kfTtleHBvcnRzLmlzTGF6eT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXF9O2V4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cH07XG5leHBvcnRzLmlzUG9ydGFsPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Y307ZXhwb3J0cy5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Zn07ZXhwb3J0cy5pc1N0cmljdE1vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1lfTtleHBvcnRzLmlzU3VzcGVuc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1tfTtleHBvcnRzLmlzU3VzcGVuc2VMaXN0PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bn07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZHx8YT09PWZ8fGE9PT1lfHxhPT09bXx8YT09PW58fGE9PT10fHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXF8fGEuJCR0eXBlb2Y9PT1wfHxhLiQkdHlwZW9mPT09Z3x8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1sfHxhLiQkdHlwZW9mPT09dXx8dm9pZCAwIT09YS5nZXRNb2R1bGVJZCk/ITA6ITF9O2V4cG9ydHMudHlwZU9mPXY7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8989\n')},9071:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\nconst defaultGenerator=componentName=>componentName;\nconst createClassNameGenerator=()=>{\n let generate=defaultGenerator;\n return{\n configure(generator){\n generate=generator;\n},\n generate(componentName){\n return generate(componentName);\n},\n reset(){\n generate=defaultGenerator;\n}\n};\n};\nconst ClassNameGenerator=createClassNameGenerator();\n const __WEBPACK_DEFAULT_EXPORT__=(ClassNameGenerator);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA3MS5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9DbGFzc05hbWVHZW5lcmF0b3IvQ2xhc3NOYW1lR2VuZXJhdG9yLmpzPzNhOGEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9071\n")},9242:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n module.exports=__webpack_require__(2162);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTI0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTJGO0FBQzdGLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanM/N2EzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9242\n")},9452:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n EU:()=>(createEmptyBreakpointObject),\n NI:()=>(handleBreakpoints),\n iZ:()=>(mergeBreakpointsInOrder),\n kW:()=>(resolveBreakpointValues),\n vf:()=>(removeUnusedBreakpoints),\n zu:()=>(values)\n});\n\n var _mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1317);\n\n\n\n\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs:[xs,sm[.\nconst values={\n xs:0,\n // phone\n sm:600,\n // tablet\n md:900,\n // small laptop\n lg:1200,\n // desktop\n xl:1536 // large screen\n};\nconst defaultBreakpoints={\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys:['xs','sm','md','lg','xl'],\n up:key=>`@media (min-width:${values[key]}px)`\n};\nfunction handleBreakpoints(props,propValue,styleFromPropValue){\n const theme=props.theme ||{};\n if (Array.isArray(propValue)){\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc,item,index)=>{\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])]=styleFromPropValue(propValue[index]);\n return acc;\n});\n}\n if (typeof propValue==='object'){\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc,breakpoint)=>{\n // key is breakpoint\n if (Object.keys(themeBreakpoints.values || values).indexOf(breakpoint) !==-1){\n const mediaKey=themeBreakpoints.up(breakpoint);\n acc[mediaKey]=styleFromPropValue(propValue[breakpoint],breakpoint);\n}else{\n const cssKey=breakpoint;\n acc[cssKey]=propValue[cssKey];\n}\n return acc;\n});\n}\n const output=styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction){\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction=props=>{\n const theme=props.theme ||{};\n const base=styleFunction(props);\n const themeBreakpoints=theme.breakpoints || defaultBreakpoints;\n const extended=themeBreakpoints.keys.reduce((acc,key)=>{\n if (props[key]){\n acc=acc ||{};\n acc[themeBreakpoints.up(key)]=styleFunction(_extends({\n theme\n},props[key]));\n}\n return acc;\n},null);\n return merge(base,extended);\n};;\n newStyleFunction.filterProps=['xs','sm','md','lg','xl',...styleFunction.filterProps];\n return newStyleFunction;\n}){\n var _breakpointsInput$key;\n const breakpointsInOrder=(_breakpointsInput$key=breakpointsInput.keys)==null ? void 0 :_breakpointsInput$key.reduce((acc,key)=>{\n const breakpointStyleKey=breakpointsInput.up(key);;\n return acc;\n});;\n}\nfunction removeUnusedBreakpoints(breakpointKeys,style){\n return breakpointKeys.reduce((acc,key)=>{\n const breakpointOutput=acc[key];\n const isBreakpointUnused=!breakpointOutput || Object.keys(breakpointOutput).length===0;\n if (isBreakpointUnused){\n delete acc[key];\n}\n return acc;\n},style);\n}\nfunction mergeBreakpointsInOrder(breakpointsInput,...styles){\n const emptyBreakpoints=createEmptyBreakpointObject(breakpointsInput););\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints),mergedOutput);\n}\n\n// compute base for responsive values;e.g.,\n// [1,2,3]=>{xs:true,sm:true,md:true}\n//{xs:1,sm:2,md:3}=>{xs:true,sm:true,md:true}\nfunction computeBreakpointsBase(breakpointValues,themeBreakpoints){\n // fixed value\n if (typeof breakpointValues !=='object'){\n return{};\n};\n const breakpointsKeys=Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)){\n breakpointsKeys.forEach((breakpoint,i)=>{\n if (i < breakpointValues.length){\n base[breakpoint]=true;\n}\n});\n}else{\n breakpointsKeys.forEach(breakpoint=>{\n if (breakpointValues[breakpoint] !=null){\n base[breakpoint]=true;\n}\n});\n}\n return base;\n}\nfunction resolveBreakpointValues({\n values:breakpointValues,\n breakpoints:themeBreakpoints,\n base:customBase\n}){\n const base=customBase || computeBreakpointsBase(breakpointValues,themeBreakpoints);\n const keys=Object.keys(base);\n if (keys.length===0){\n return breakpointValues;\n}\n let previous;\n return keys.reduce((acc,breakpoint,i)=>{\n if (Array.isArray(breakpointValues)){\n acc[breakpoint]=breakpointValues[i] !=null ? breakpointValues[i]:breakpointValues[previous];\n previous=i;\n}else if (typeof breakpointValues==='object'){\n acc[breakpoint]=breakpointValues[breakpoint] !=null ? breakpointValues[breakpoint]:breakpointValues[previous];\n previous=breakpoint;\n}else{\n acc[breakpoint]=breakpointValues;\n}\n return acc;\n});\n}\n var __WEBPACK_DEFAULT_EXPORT__=((null && (breakpoints)));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ1Mi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTBEO0FBQ3ZCO0FBQ1U7QUFDakI7O0FBRTVCO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsWUFBWTtBQUM5QztBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssSUFBSTtBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixNQUFxQyxHQUFHLENBTW5FO0FBQ0o7QUFDQTtBQUNBO0FBQ08sMERBQTBEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQSw0RUFBNEUseUVBQVMsZ0JBQWdCO0FBQ3JHO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDLGVBQWU7QUFDZixJQUFJLHFCQUFxQixJQUFJO0FBQ3RCO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBLHNFQUFlLDJEQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2JyZWFrcG9pbnRzLmpzPzdjNjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9452\n")},9453:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(formatMuiErrorMessage)\n});\n\nfunction formatMuiErrorMessage(code){\n // Apply babel-plugin-transform-template-literals in loose mode\n // loose mode is safe if we're concatenating primitives\n // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n \n let url='https://mui.com/production-error/?code='+code;\n for (let i=1;i < arguments.length;i+=1){\n // rest params over-transpile for this case\n // eslint-disable-next-line prefer-rest-params\n url+='&args[]='+encodeURIComponent(arguments[i]);\n}\n return 'Minified MUI error #'+code+';visit '+url+' for the full message.';\n \n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ1My5qcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2VzbS9mb3JtYXRNdWlFcnJvck1lc3NhZ2UvZm9ybWF0TXVpRXJyb3JNZXNzYWdlLmpzPzI5MTkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9453\n")},9483:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z"\n}),\'KeyboardArrowDown\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ4My5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvS2V5Ym9hcmRBcnJvd0Rvd24uanM/ZGM5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNNy40MSA4LjU5IDEyIDEzLjE3bDQuNTktNC41OEwxOCAxMGwtNiA2LTYtNnpcIlxufSksICdLZXlib2FyZEFycm93RG93bicpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9483\n')},9599:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(' __webpack_require__.d(__webpack_exports__,{\n A:()=>(extendSxProp)\n});\n var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(8168);\n var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8587);\n var _mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(1317);\n var _defaultSxConfig__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4188);\n\n\nconst _excluded=["sx"];\n\n\nconst splitProps=props=>{\n var _props$theme$unstable,_props$theme;\n const result={\n systemProps:{}\n};\n const config=(_props$theme$unstable=props==null || (_props$theme=props.theme)==null ? void 0 :_props$theme.unstable_sxConfig) !=null ? _props$theme$unstable :_defaultSxConfig__WEBPACK_IMPORTED_MODULE_0__ .A;\n Object.keys(props).forEach(prop=>{\n if (config[prop]){\n result.systemProps[prop]=props[prop];\n}else{\n result.otherProps[prop]=props[prop];\n}\n});\n return result;\n};\nfunction extendSxProp(props){\n const{\n sx:inSx\n}=props,\n other=(0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ .A)(props,_excluded);\n const{\n systemProps,\n otherProps\n}=splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)){\n finalSx=[systemProps,...inSx];\n}else if (typeof inSx===\'function\'){\n finalSx=(...args)=>{\n const result=inSx(...args);\n if (!(0,_mui_utils_deepmerge__WEBPACK_IMPORTED_MODULE_2__ .Q)(result)){\n return systemProps;\n},systemProps,result);\n};\n}else{\n finalSx=(0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_3__ .A)({},systemProps,inSx);\n},otherProps,{\n sx:finalSx\n});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU5OS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBEO0FBQzBDO0FBQ3BHO0FBQ3FEO0FBQ0w7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSw2S0FBNkssaUVBQWU7QUFDNUw7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBLE1BQU07QUFDTixZQUFZLDRHQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxXQUFXLDRFQUFhO0FBQ3hCO0FBQ0E7QUFDQSxhQUFhLHVGQUFRLEdBQUc7QUFDeEI7QUFDQSxJQUFJO0FBQ0osY0FBYyx1RkFBUSxHQUFHO0FBQ3pCO0FBQ0EsU0FBUyx1RkFBUSxHQUFHO0FBQ3BCO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9leHRlbmRTeFByb3AuanM/ZDI0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuL2RlZmF1bHRTeENvbmZpZyc7XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogZGVmYXVsdFN4Q29uZmlnO1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuICBpZiAoQXJyYXkuaXNBcnJheShpblN4KSkge1xuICAgIGZpbmFsU3ggPSBbc3lzdGVtUHJvcHMsIC4uLmluU3hdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpblN4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmluYWxTeCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpblN4KC4uLmFyZ3MpO1xuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIGluU3gpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9599\n')},9770:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(__WEBPACK_DEFAULT_EXPORT__)\n});\n var _slotShouldForwardProp__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(4438);\n\nconst rootShouldForwardProp=prop=>(0,_slotShouldForwardProp__WEBPACK_IMPORTED_MODULE_0__ .A)(prop) && prop !=='classes';\n const __WEBPACK_DEFAULT_EXPORT__=(rootShouldForwardProp);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc3MC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTREO0FBQzVELHNDQUFzQywyRUFBcUI7QUFDM0QsaUVBQWUscUJBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYWktY29udGVudC1wbHVnaW4vLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvcm9vdFNob3VsZEZvcndhcmRQcm9wLmpzPzVjY2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCBmcm9tICcuL3Nsb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5jb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgZGVmYXVsdCByb290U2hvdWxkRm9yd2FyZFByb3A7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9770\n")},9781:(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";eval('var __webpack_unused_export__;\n\n"use client";\n\nvar _interopRequireDefault=__webpack_require__(4994);\n__webpack_unused_export__=({\n value:true\n});\nexports.A=void 0;\nvar _createSvgIcon=_interopRequireDefault(__webpack_require__(2032));\nvar _jsxRuntime=__webpack_require__(4848);\nvar _default=exports.A=(0,_createSvgIcon.default)((0,_jsxRuntime.jsx)("path",{\n d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"\n}),\'Close\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc4MS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4QztBQUNuRiw2QkFBNkM7QUFDN0M7QUFDQSxDQUFDLENBQUM7QUFDRixTQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsSUFBdUI7QUFDM0Usa0JBQWtCLG1CQUFPLENBQUMsSUFBbUI7QUFDN0MsZUFBZSxTQUFlO0FBQzlCO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FpLWNvbnRlbnQtcGx1Z2luLy4vbm9kZV9tb2R1bGVzL0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2UuanM/MWZhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblwidXNlIGNsaWVudFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2NyZWF0ZVN2Z0ljb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NyZWF0ZVN2Z0ljb25cIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gKDAsIF9jcmVhdGVTdmdJY29uLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgNi40MSAxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiXG59KSwgJ0Nsb3NlJyk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9781\n')},9888:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval("\n\nif (true){\n module.exports=__webpack_require__(8493);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTg4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDLEVBQUUsMENBQTZFO0FBQy9FLEVBQUUsS0FBSztBQUFBLEVBRU4iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzPzZhZGYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9888\n")},9940:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(" __webpack_require__.d(__webpack_exports__,{\n A:()=>(GlobalStyles)\n});\n var react__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1594);\n var react__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n var _emotion_react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7437);\n var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4848);\n'use client';\n\n\n\n\n\nfunction isEmpty(obj){\n return obj===undefined || obj===null || Object.keys(obj).length===0;\n}\nfunction GlobalStyles(props){\n const{\n styles,\n defaultTheme={}\n}=props;\n const globalStyles=typeof styles==='function' ? themeInput=>styles(isEmpty(themeInput) ? defaultTheme :themeInput) :styles;\n return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_emotion_react__WEBPACK_IMPORTED_MODULE_2__ .mL,{\n styles:globalStyles\n});\n}\n false ? 0:void 0;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk0MC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRStCO0FBQ0k7QUFDSztBQUNRO0FBQ2hEO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0Esc0JBQXNCLHNEQUFJLENBQUMsNERBQU07QUFDakM7QUFDQSxHQUFHO0FBQ0g7QUFDQSxNQUFxQyxHQUFHLENBR3ZDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9haS1jb250ZW50LXBsdWdpbi8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcz9kOTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9940\n")}};function __webpack_require__(n){var c=__webpack_module_cache__[n];if(void 0!==c)return c.exports;var e=__webpack_module_cache__[n]={id:n,exports:{}};return __webpack_modules__[n](e,e.exports,__webpack_require__),e.exports}__webpack_require__.n=n=>{var c=n&&n.__esModule?()=>n.default:()=>n;return __webpack_require__.d(c,{a:c}),c},__webpack_require__.d=(n,c)=>{for(var e in c)__webpack_require__.o(c,e)&&!__webpack_require__.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:c[e]})},__webpack_require__.o=(n,c)=>Object.prototype.hasOwnProperty.call(n,c),__webpack_require__.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},__webpack_require__.nc=void 0;var __webpack_exports__=__webpack_require__(2320)})().navigation li a,.navigation li a:hover,.navigation li.active a,.navigation li.disabled{color:#fff;text-decoration:none}.navigation li{display:inline-block;margin:5px 3px 0}.navigation ul{margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center}.navigation li a,.navigation li a:hover,.navigation li.active a,.navigation li.disabled{background-color:#6FB7E9;border-radius:3px;cursor:pointer;padding:12px;padding:.75rem;display:block}.navigation li a:hover,.navigation li.active a{background-color:#3C8DC5}.error{color:red}/*!
 * Bootstrap v4.5.0 (https://getbootstrap.com/)
 * Copyright 2011-2020 The Bootstrap Authors
 * Copyright 2011-2020 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0%;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]{transform:translate3d(0,100px,0)}[data-aos=fade-down]{transform:translate3d(0,-100px,0)}[data-aos=fade-right]{transform:translate3d(-100px,0,0)}[data-aos=fade-left]{transform:translate3d(100px,0,0)}[data-aos=fade-up-right]{transform:translate3d(-100px,100px,0)}[data-aos=fade-up-left]{transform:translate3d(100px,100px,0)}[data-aos=fade-down-right]{transform:translate3d(-100px,-100px,0)}[data-aos=fade-down-left]{transform:translate3d(100px,-100px,0)}[data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,transform}[data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;transform:translateZ(0) scale(1)}[data-aos=zoom-in]{transform:scale(.6)}[data-aos=zoom-in-up]{transform:translate3d(0,100px,0) scale(.6)}[data-aos=zoom-in-down]{transform:translate3d(0,-100px,0) scale(.6)}[data-aos=zoom-in-right]{transform:translate3d(-100px,0,0) scale(.6)}[data-aos=zoom-in-left]{transform:translate3d(100px,0,0) scale(.6)}[data-aos=zoom-out]{transform:scale(1.2)}[data-aos=zoom-out-up]{transform:translate3d(0,100px,0) scale(1.2)}[data-aos=zoom-out-down]{transform:translate3d(0,-100px,0) scale(1.2)}[data-aos=zoom-out-right]{transform:translate3d(-100px,0,0) scale(1.2)}[data-aos=zoom-out-left]{transform:translate3d(100px,0,0) scale(1.2)}[data-aos^=slide][data-aos^=slide]{transition-property:transform}[data-aos^=slide][data-aos^=slide].aos-animate{transform:translateZ(0)}[data-aos=slide-up]{transform:translate3d(0,100%,0)}[data-aos=slide-down]{transform:translate3d(0,-100%,0)}[data-aos=slide-right]{transform:translate3d(-100%,0,0)}[data-aos=slide-left]{transform:translate3d(100%,0,0)}[data-aos^=flip][data-aos^=flip]{backface-visibility:hidden;transition-property:transform}[data-aos=flip-left]{transform:perspective(2500px) rotateY(-100deg)}[data-aos=flip-left].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-right]{transform:perspective(2500px) rotateY(100deg)}[data-aos=flip-right].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-up]{transform:perspective(2500px) rotateX(-100deg)}[data-aos=flip-up].aos-animate{transform:perspective(2500px) rotateX(0)}[data-aos=flip-down]{transform:perspective(2500px) rotateX(100deg)}[data-aos=flip-down].aos-animate{transform:perspective(2500px) rotateX(0)}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-track,.slick-slider .slick-list{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir='rtl'] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1);animation:fpFadeInDown 300ms cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}*{outline:0;margin:0;padding:0}ul,li,ol{padding:0;margin:0}button:focus,button:active{outline:0;box-shadow:transparent;border:0}body,html{font:400 15px/20px "Lato",sans-serif;color:#000;background:#fff;overflow-x:hidden}body.loaderon{overflow-x:hidden;height:100vh}#preloader{display:block;position:fixed;left:0;top:0;width:100%;height:100%;z-index:9999;background-color:rgba(255,255,255,1)}#preloader img{width:150px}#preloader>div{display:flex;align-items:center;justify-content:center;height:100%}.three-balls{margin:0 auto;width:70px;text-align:center;position:absolute;left:0;right:0;top:57%}.three-balls .ball{position:relative;width:10px;height:10px;border-radius:50%;display:inline-block;-webkit-animation:bouncedelay 2s infinite cubic-bezier(.62,.28,.23,.99) both;animation:bouncedelay 2s infinite cubic-bezier(.62,.28,.23,.99) both}.three-balls .ball1{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}.three-balls .ball2{-webkit-animation-delay:-0.08s;animation-delay:-0.08s}.industry-page-banner{position:relative}.slider-box-custom{width:930px;height:100%;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.slid-box{position:relative;width:100%;height:447px;margin:0 auto;display:flex;justify-content:center;align-items:center}.slid-box .for-desktop{position:absolute;top:50px;overflow:hidden;z-index:9}.slid-box .for-laptop{width:460px;overflow:hidden;position:absolute;left:0;z-index:9;background-repeat:no-repeat;bottom:12px}.slid-box .for-tablate{width:181px;overflow:hidden;background-repeat:no-repeat;right:20%;position:absolute;z-index:9;bottom:35px}.slid-box .for-mobile{width:90px;overflow:hidden;position:absolute;z-index:9;background-repeat:no-repeat;bottom:25px;right:13%}.slid-box .tree-im{width:88px;overflow:hidden;position:absolute;z-index:8;bottom:25px;right:65px}.for-laptop-with{width:288px;margin:20px 95px 43px auto;border-radius:3px;display:block;overflow:hidden}.for-desktop-with{width:415px;height:368px;margin:19px 23px 25px 23px;border-radius:3px;display:block;overflow:hidden}.for-tablate-with{margin:25px 10px 20px 23px;border-radius:3px;display:block;overflow:hidden}.for-mobile-with{margin:7px 9px 13px 7px;border-radius:8px;display:block;overflow:hidden}.slid-box>div.tree-im{left:78%;top:50%;transform:none;z-index:1}.slid-box>div#arrows{position:absolute;left:-5px;top:28%}.slid-box>div#arrows div{width:10px;height:10px;border-radius:100%;border:solid 2px #fff;display:block;cursor:pointer;margin-top:8px;opacity:1;transition:0.5s;cursor:pointer}.slid-box>div#arrows div:hover{width:12px;height:12px}.slid-box:before{position:absolute;top:0;left:0;width:1px;height:230px;content:"";transform:translateY(-50%);background:rgba(255,255,255,.5)}@keyframes bouncedelay{0%{bottom:0;background-color:#03a9f4}16.66%{bottom:20px;background-color:#fb6542}33.33%{bottom:0;background-color:#fb6542}50%{bottom:20px;background-color:#fb0}66.66%{bottom:0;background-color:#fb0}83.33%{bottom:20px;background-color:#03a9f4}100%{bottom:0;background-color:#03a9f4}}@-webkit-keyframes bouncedelay{0%{bottom:0;background-color:#03a9f4}16.66%{bottom:40px;background-color:#fb6542}33.33%{bottom:0;background-color:#fb6542}50%{bottom:40px;background-color:#fb0}66.66%{bottom:0;background-color:#fb0}83.33%{bottom:40px;background-color:#03a9f4}100%{bottom:0;background-color:#03a9f4}}a{text-decoration:none;transition:0.5s;color:#444}a:hover{text-decoration:none}img{max-width:100%;vertical-align:middle}ul li{list-style-type:none}.invoice-box,#invoice_page{background:#fff;box-shadow:0 0 10px 0 rgba(0,0,0,.1);padding:30px;margin:70px 0}.invoice-box h1,#invoice_page h1{font-weight:700;color:rgb(0,174,214)}.banner-text .btn-1{font:700 19px/53px "Lato",sans-serif;padding:0 30px;border-radius:5px;background:#fff;color:#000;box-shadow:0 0 20px 0 rgba(0,0,0,.3);display:inline-block;position:relative;z-index:2}table.table-striped thead{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;border:0}table{border-spacing:0;margin-top:10px;text-align:right;display:flow-root}.table td,.table th{border-top:0;font-size:14px;padding:10px 20px}.table td:first-child,.table th:first-child{width:60%}.table .quantity_column{width:12%;text-align:center}.table thead th+th{border-left:solid 1px rgba(255,255,255,.2)}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.03)}.banner-text .btn-1:hover{color:#fff}.invoice-form .radio label{padding-top:5px}.invoice-form .radio label span{display:block;text-align:center}table thead,table tbody{box-shadow:1px 1px 5px 0 rgba(0,0,0,.1);text-align:left;width:100%;display:block}table thead tr,table tbody tr{display:flex}.table thead th{border-bottom:0}table thead{border-radius:5px 5px 0 0;overflow:hidden}table tfoot{display:inline-block;text-align:left;border:solid 1px rgba(0,0,0,.1);border-radius:0;box-shadow:1px 1px 5px 0 rgba(0,0,0,.1);margin-top:20px;padding:0 5px;width:40%}table tfoot tr+tr{border-top:solid 1px rgba(0,0,0,.1)}table tfoot tr{display:flex;width:100%}table.price-table td{width:47%!important;display:inline-block}table.price-table tbody,table.price-table tr{width:100%;display:block}.invoice-box p,#invoice_page p{color:rgba(0,0,0);font-size:14px}.invoice-box form ul li.wpi_checkout_row{width:32.333%;padding:0 10px;display:inline-block}.invoice-box form ul li.section_title,.invoice-box h5{font-size:18px;font-weight:700;position:relative;padding-left:15px;margin-top:20px;display:inline-block;width:100%}.invoice-box form ul li.section_title:before,.invoice-box h5:before{position:absolute;top:0;left:0;bottom:0;width:3px;background:rgb(0,174,214);content:""}.invoice-box form ul li.section_description p{font-size:14px;padding-top:15px}.invoice-box form ul{padding-left:0}.recur-bill{position:relative;padding-left:10px}.recur-bill:before{position:absolute;top:0;left:0;bottom:0;width:3px;background:red;content:""}.invoice-box form ul li.wpi_checkout_row .control-group .controls .text-input{font-size:14px;height:40px;line-height:40px;border:solid 1px rgba(0,0,0,.1);width:100%;border-radius:5px;padding-left:10px}.invoice-box form ul li.wpi_checkout_row .control-group label{padding-top:15px;font-size:13px;padding-bottom:0;margin-bottom:0;color:rgba(0,0,0,.6)}.invoice-box form ul li .controls .submit_button{font-size:16px;line-height:45px;padding:0 30px;color:#fff;font-weight:700;border-radius:5px;box-shadow:0 0 15px 0 rgba(0,0,0,.2);display:inline-block;margin:10px 0 0;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);border:0}.invoice-border{border-top:solid 1px rgba(0,0,0,.1);margin-top:30px;padding-top:10px}.other-radio-input{display:none}.about-parallax video{box-shadow:0 2px 10px 0 rgba(0,0,0,.4)}.radio{margin:.5rem}.radio input[type="radio"]{position:absolute;opacity:0}.radio input[type="radio"]+label:before{content:"";background:#f4f4f4;border-radius:100%;border:1px solid #b4b4b4;display:inline-block;width:1.4em;height:1.4em;position:relative;top:0;margin-right:8px;vertical-align:top;cursor:pointer;text-align:center;transition:all 250ms ease}.radio input[type="radio"]:checked+.radio-label:before{background-color:#3197ee;box-shadow:inset 0 0 0 4px #f4f4f4}.radio input[type="radio"]:focus+.radio-label:before{outline:none;border-color:#3197ee}.radio input[type="radio"]:disabled+.radio-label:before{box-shadow:inset 0 0 0 4px #f4f4f4;border-color:#b4b4b4;background:#b4b4b4}.radio input[type="radio"]+.radio-label:empty:before{margin-right:0}.tabset{margin-top:-101px}.tabset>input[type="radio"]{position:absolute;left:-200vw}.tabset>label{position:relative;display:inline-block;padding:10px 25px;border:1px solid #fff;cursor:pointer;font-weight:600;border-radius:5px;transition:0.5s;margin-right:5px;color:#fff}.tabset>label:hover,.tabset>input:focus+label{color:#000;background:#fff;transition:0.5s}.tabset>input:checked+label{color:#000;background:#fff;transition:0.5s}.tab-panel{padding:30px 0;border-top:1px solid #ccc}.subscribe-form button{background:#fff;color:#000;padding:10px 30px;border-radius:5px;display:inline-block;border:0;margin-top:25px;font-size:16px;font-weight:700}.map{position:relative}.contact-head{position:absolute;top:80px;left:50%;transform:translateX(-50%)}.contact-head h1{font-weight:700;display:inline-block;background:#fff;padding:10px 20px;box-shadow:0 0 10px 0 rgba(0,0,0,.2)}.subscribe-right{background-size:cover;background-position:center;padding:50px}.subscribe-left .heading1 h1{font-size:35px;font-weight:700}.subscribe-left{padding:50px}.subscribe-form .form-control{margin-top:10px;border:0;background:rgba(255,255,255,.8);color:#000}.subscribe-box{box-shadow:0 0 5px 0 rgba(0,0,0,.1);margin:70px 0 50px}header.sample-header-page .navbar-toggler{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1)}header.sample-header-page{background:#fff;box-shadow:0 0 5px 0 rgba(0,0,0,.2)}header.sample-header-page #navbarSupportedContent .nav-link,.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#666}.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#fff}#navbarSupportedContent ul li:last-child .nav-link{padding-right:0}.sample-header-page .navbar-dark .navbar-nav .active>.nav-link,.sample-header-page .navbar-dark .navbar-nav .nav-link.active,.portfolio-page-banner .navbar-dark .navbar-nav .active>.nav-link,.portfolio-page-banner .navbar-dark .navbar-nav .nav-link.active{font-weight:700!important;color:#02d2d2!important}.portfolio-page-banner .navbar{border-bottom-color:rgba(0,0,0,.1)}header.sample-header-page .top-logo{filter:none}.top-logo{width:180px;filter:brightness(700%)}.portfolio-page-banner .top-logo{filter:brightness(100%)}#banner2.portfolio-page-banner .banner-text{padding:140px 0 190px}#banner2.portfolio-page-banner .banner-text h1:before{background:#08adcb}#contactForm{padding-bottom:80px}.btn-2{font:700 14px/40px "Lato",sans-serif;padding:0 20px;border-radius:5px;color:#000;box-shadow:0 0 15px 0 rgba(0,0,0,.2);display:inline-block;position:relative;margin:10px 0 0;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;position:relative}.btn-2.big-btn{font-size:16px;line-height:45px;padding:0 30px}.btn-2:hover{color:#fff}.btn-2{position:relative;z-index:1}.btn-2:before{position:absolute;transition:0.3s;border-radius:5px;z-index:-1;left:0;top:0;bottom:0;width:0;background:#009483;content:""}.btn-2:hover:before{width:100%}.banner-text .btn-1:before{position:absolute;top:0;left:0;bottom:0;background:#3fd854;content:"";width:0;transition:0.3s;border-radius:5px;z-index:-1}.banner-text .btn-1:hover:before{width:100%}#banner{width:100%;position:relative;background-size:cover;height:765px;background-position:50% 0;background-repeat:no-repeat;clip-path:ellipse(81% 68% at 50% 31%)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#00e4ff!important}.navbar-dark .navbar-nav .nav-link{color:#fff;transition:0.5s}.navbar{border-bottom:solid 1px rgba(255,255,255,.3)}#navbarSupportedContent .nav-link{font:400 15px/20px "Lato",sans-serif;padding:0 17px;color:#fff;text-transform:uppercase}#banner .navbar-nav li:last-child .nav-link{padding-right:0}#banner .banner-text{padding:60px 0}#banner .banner-text h1{font:700 46px/50px "Lato",sans-serif;position:relative}#banner .banner-text h1:before{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:100px;height:3px;background:#fff;content:""}#banner .banner-text h1>span{display:block}#banner .banner-text p>span{display:block}#banner .icon-box ul li a{font-size:15px;color:#fff;display:inline-block;margin:8px 0;text-shadow:1px 0 1px #000}#banner .icon-box{position:absolute;top:60%;right:0;transform:translateY(-50%)}.banner-position{position:relative;padding:0 0 93px;background:#ebf2f3}.banner-slider{position:absolute;bottom:0;display:flex;justify-content:center;align-items:center;width:100%;z-index:99}.icon-position{position:relative}#banner .icon-box ul{position:relative;margin:0;padding:5px 0;text-align:center}#banner .icon-box ul:before{position:absolute;top:100%;left:50%;width:1px;height:80px;background:#fff;content:"";transform:translateX(-50%)}#banner .icon-box ul:after{position:absolute;bottom:100%;left:50%;width:1px;height:80px;background:#fff;content:"";transform:translateX(-50%)}footer{font:400 14px/20px "Open Sans",sans-serif;color:#fff;width:100%;position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding-top:30px}footer.sample-footer-page{background:#fff;border-top:solid 2px #46bbe4;color:rgba(0,0,0,.6);clip-path:none;padding-top:0}footer.sample-footer-page .ft-mail-box a{color:#04a7e0;border-color:#46bbe4;font-weight:400}footer.sample-footer-page .copy-right-sac{border-color:rgba(0,0,0,.1)}footer.sample-footer-page .footer-icon-box ul li a{color:rgba(0,0,0,.6)}footer.sample-footer-page .footer-menu ul li a,footer.sample-footer-page .menu-footer-menus-container ul li a{background:none;color:rgba(0,0,0,.6);padding-left:0}footer.sample-footer-page .footer-menu ul li a:hover{color:#04a7e0}footer.sample-footer-page h2:before{background:#04a7e0}footer.other-footer{padding-top:50px!important}.footer-logo{width:180px;display:block}.footer-logo img{max-width:100%;width:auto}footer h2{font:700 18px/24px "Lato",sans-serif;position:relative;padding-bottom:6px;margin-bottom:.5rem}footer h2:before{position:absolute;bottom:0;left:0;width:30px;height:2px;content:"";background:#fff}.footer-icon-box ul li{float:left;padding-right:24px}.footer-icon-box ul li a{font-size:18px;color:#fff;display:block}.footer-icon-box ul li a:hover{color:#00f6ff}.footer-icon-box ul{display:flex;padding:0;margin-bottom:1rem}.footer-icon-box{position:relative}.footer-menu{position:relative}.footer-menu ul{padding:6px 0 0}.footer-menu ul li a,.menu-footer-menus-container ul li a{font:400 14px/20px "Open Sans",sans-serif;color:#fff;padding-left:28px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/f-menu-bg.png) no-repeat 0 50%;display:inline-block;margin:10px 0 0}.footer-menu ul li a:hover{background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/f-menu-bg2.png) no-repeat 4px 50%;color:#00f6ff}.ft-mail-box a{padding-left:10px;margin-left:10px;border-left:solid 1px #fff;color:#fff}.ft-mail-box a:hover{color:#00f6ff}.copy-right-sac{border-top:solid 1px rgba(255,255,255,.4);padding:15px;font:400 12px/20px "Open Sans",sans-serif}.scroll-animation{position:absolute;bottom:0;left:50%;transform:translateX(-50%);z-index:999}.scroll-animation>div{position:relative}.scroll-animation a{padding-top:70px}.scroll-animation>div a span{position:absolute;top:0;left:50%;width:24px;height:24px;margin-left:-12px;border-left:1px solid #000;border-bottom:1px solid #000;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-animation:sdb05 1.5s infinite;animation:sdb05 1.5s infinite;box-sizing:border-box}@-webkit-keyframes sdb05{0%{-webkit-transform:rotate(-45deg) translate(0,0);opacity:0}50%{opacity:1}100%{-webkit-transform:rotate(-45deg) translate(-20px,20px);opacity:0}}@keyframes sdb05{0%{transform:rotate(-45deg) translate(0,0);opacity:0}50%{opacity:1}100%{transform:rotate(-45deg) translate(-20px,20px);opacity:0}}.heading1 h1,.heading1 h2{position:relative;font:400 30px/35px "Open Sans",sans-serif;color:#000;padding:20px 0 10px}.heading1 h1:before,.heading1 h2:before{position:absolute;bottom:0;left:0;height:2px;width:55px;content:"";background:#1cd4c6}.heading1.text-center h1:before,.heading1.text-center h2:before{left:50%;transform:translateX(-50%)}.heading1.text-center.white,.heading1.text-center.white h1,.heading1.text-center.white h2{color:#fff}.heading1.text-center.white h1:before,.heading1.text-center.white h2:before{background:#fff}#industry-box{background:#ebf2f3;padding:110px 0 130px;clip-path:ellipse(81% 68% at 50% 31%);background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg1.png) no-repeat 5% 0,url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg2.png) no-repeat 95% 75%,#ebf2f3;z-index:3;position:relative}.industry-carousel-box{position:relative;background:#fff;border-radius:10px;padding:45px 30px;color:#000;transition:0.5s;text-align:center;min-height:379px}.industry-carousel-box:before{position:absolute;width:70%;height:30px;border-radius:100%;box-shadow:0 8px 18px 4px rgba(0,0,0,.15);content:"";left:50%;transform:translateX(-50%);bottom:0;z-index:-1;opacity:0;transition:0.5s}.industry-carousel-box:hover:before{opacity:1}.industry-carousel-box:hover{background:#1cd4c6;color:#fff}.industry-icon{width:95px;height:95px;border-radius:100%;display:inline-block;background:#fff;box-shadow:1px 1px 0 2px #61bcb9}.industry-icon img{width:100%;height:100%;border-radius:100%;object-fit:cover}.industry-carousel-box h5{font:700 20px/25px "Lato",sans-serif;padding:10px 0 15px;margin:0}.industry-carousel-box p{font:400 14px/20px "Lato",sans-serif}.industry-carousel-box:hover .btn-2{background:#fff;color:#000}.industry-carousel-box:hover .btn-2:hover{color:#fff}.owl-dots{display:none}#industry-box .owl-carousel{position:relative}#industry-box .owl-carousel .owl-nav{position:absolute;top:50%;transform:translateY(-50%);left:-70px;right:-70px}#industry-box .owl-carousel .owl-nav .owl-prev{width:52px;height:52px;background:#fff;box-shadow:0 0 8px 0 rgba(0,0,0,.1);float:left;display:block;border-radius:100%;font-size:0}#industry-box .owl-carousel .owl-nav .owl-prev span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-left:solid 1px #000;border-top:solid 1px #000;display:flex;margin:0 auto;align-items:center}#industry-box .owl-carousel .owl-nav .owl-next{width:52px;height:52px;background:#fff;box-shadow:0 0 8px 0 rgba(0,0,0,.1);float:right;display:block;border-radius:100%;font-size:0}#industry-box .owl-carousel .owl-nav .owl-next span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-bottom:solid 1px #000;border-right:solid 1px #000;display:flex;margin:0 auto;align-items:center}#industry-box .owl-stage-outer{padding:20px 0 40px}#services{position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding:250px 0;z-index:1;margin-top:-130px}.tab-box{background:#fff;position:relative;padding:50px 50px 50px 190px;height:817px}.tab-slider{padding:0;margin:0;position:relative;padding:26px 0}.tab-slider button.slick-prev{font-size:0;background:none;border:none;position:absolute;top:10px;left:55px;content:"";width:10px;height:10px;border-left:solid 2px #fff;border-bottom:solid 2px #fff;-webkit-transform:rotate(-224deg);transform:rotate(-224deg);padding:0}.tab-slider button.slick-next{font-size:0;background:none;border:none;position:absolute;bottom:40px;left:55px;content:"";width:10px;height:10px;border-right:solid 2px #fff;border-top:solid 2px #fff;-webkit-transform:rotate(-224deg);transform:rotate(-224deg);padding:0}.tab-menu{position:absolute;top:50%;transform:translateY(-50%);left:23px;width:120px;height:882px;background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,204,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cccd',GradientType=1);border-radius:20px;overflow:hidden}.tab-slider li a{font:400 12px/13px "Lato",sans-serif;color:#fff;text-align:center;display:block;padding:46px 20px;justify-content:center}.slick-vertical .slick-slide{border:0}.tab-slider li{position:relative}.tab-slider li:before{position:absolute;left:50%;transform:translateX(-50%);width:60%;top:0;height:1px;background:rgba(255,255,255,.4);content:""}.tab-slider li a:hover,.tab-slider li.active a{background:#006072}.tab-slider li a span{width:50px;height:50px;display:block;overflow:hidden;position:relative;margin:0 auto;margin-bottom:5px;transition:0.5s}.tab-slider li a:hover span,.tab-slider li.active a span{background-position-y:-159px!important}#owlCarousel1.owl-carousel .owl-stage{height:120px}#owlCarousel1.owl-carousel .owl-item{height:120px;display:flex;align-items:center;justify-content:center}#owlCarousel1.owl-carousel{transform:rotate(90deg);width:882px;left:-381px;height:120px;top:317px}#owlCarousel1.owl-carousel .item{transform:rotate(-90deg);width:100%;height:100%;padding:0 26px}#owlCarousel1.owl-carousel .owl-nav .owl-prev,#owlCarousel1.owl-carousel .owl-nav .owl-next{font-size:36px;top:unset;bottom:15px;position:absolute;z-index:999;left:5%;top:3%;color:#fff}#owlCarousel1.owl-carousel .owl-nav .owl-next{right:1%;left:auto}.tab-menu>div{position:relative}#services p{font-size:14px;color:#4c4c4c;transition:0.5s}.services-box{background:#fff;color:#000;padding:24px 15px;border-radius:10px;border:solid 1px #d4d4d4;transition:0.5s}.ser-icon{width:66px;height:66px;box-shadow:1px 1px 0 2px #66b5c3;border-radius:100%;background:#fff}.ser-icon img{width:100%;height:100%;border-radius:100%}#services .services-box:hover{background:#00adbc;color:#fff;border-color:#00adbc}#services .services-box:hover p{color:#fff}#services .services-box p{font-size:12px;line-height:16px;margin-bottom:0}#portfolio{position:relative;background:#fff;clip-path:ellipse(95% 73% at 50% 74%);padding-top:160px;z-index:2;margin-top:-130px;height:925px}section.slider_bg{box-sizing:border-box;background:#fff;background:-moz-linear-gradient(left,#ffffff 50%,#e8e6e9 50%);background:-webkit-linear-gradient(left,#ffffff 50%,#e8e6e9 50%);background:linear-gradient(to right,#ffffff 50%,#e8e6e9 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#e8e6e9',GradientType=1)}section.slider_bg h2.slider_head{position:absolute;width:100%;left:0;top:90px;color:#282828;z-index:90;pointer-events:none}section.slider_bg .slider_para{color:#282828;position:absolute;width:100%;left:0;top:175px;z-index:100;padding:0 250px;line-height:20px;pointer-events:none;z-index:80}section.slider_bg .slider_heads{position:absolute;width:100%;left:0;top:0;color:#282828;z-index:100}ul.index_slider li a.btn_name{width:55px;position:absolute;left:-100%;top:0;height:100%;background:#e0fcfe;font-weight:700;color:#282828;font-size:22px;transition:all 1s}ul.index_slider li.left_pos a.btn_name,ul.index_slider li.right_pos a.btn_name{left:0}ul.index_slider li a.btn_name span{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);transform:rotate(-90deg);position:absolute;display:block;width:790px;height:55px;text-align:center;left:0;line-height:40px;bottom:-40px;transform-origin:left top;line-height:55px}ul.index_slider li:nth-child(2) a.btn_name{background:#cceff2}ul.index_slider li:nth-child(3) a.btn_name{background:#b2e6eb}ul.index_slider li:nth-child(4) a.btn_name{background:#99dee4}ul.index_slider li:nth-child(5) a.btn_name{background:#7fd6dd}ul.index_slider li:nth-child(6) a.btn_name{background:#66ced7}h2.slider_head span{color:#5eae53}ul.index_slider{position:relative;overflow:hidden;height:925px}ul.index_slider li{height:925px;position:absolute;width:100%;top:0;transition:all 800ms;overflow:hidden;transition-timing-function:ease-out}ul.index_slider li:nth-child(1){background:#fff;left:0}ul.index_slider li:nth-child(2){background:#cceff2;left:calc(16.666% - 15px)}ul.index_slider li:nth-child(3){background:#b2e6eb;left:calc(33.332% - 15px)}ul.index_slider li:nth-child(4){background:#99dee4;left:calc(49.998% - 15px)}ul.index_slider li:nth-child(5){background:#7fd6dd;left:calc(66.664% - 15px)}ul.index_slider li:nth-child(6){background:#66ced7;left:calc(83.33% - 15px)}ul.index_slider li:hover{background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg1.png) no-repeat 0 20% #fff}ul.index_slider li img{position:relative;-webkit-transition:all 1s ease-in-out;-moz-transition:all 1s ease-in-out;-o-transition:all 1s ease-in-out;transition:all 1s ease-in-out;margin:0;left:22px;top:100px}ul.index_slider li article{display:block;width:16.666%;padding:100px 0 0 0}ul.index_slider li figure{margin-top:250px;margin-left:20px;display:block}ul.index_slider li.active img{-webkit-transition:all 1s ease-in-out;-moz-transition:all 1s ease-in-out;-o-transition:all 1s ease-in-out;transition:all 1s ease-in-out;margin:0;left:10%;top:50px}ul.index_slider li article h5{font-weight:700;color:#000;font-size:24px;position:relative;line-height:30px}ul.index_slider li article h5:before{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:50px;height:2px;background:#08adcb;content:""}ul.index_slider li article p{line-height:20px;color:#282828}#portfolio .heading1{position:absolute;top:120px;left:50%;transform:translateX(-50%);z-index:999}.portfolio-slider{position:absolute;top:0;left:0;width:100%;height:925px}ul.index_slider li:hover figure img.portfolio-img1{display:none}ul.index_slider li:hover figure .portfolio-img2{display:block}ul.index_slider li figure .portfolio-img2{display:none}ul.index_slider li:hover article{display:none}.portfolio-text h2{font-size:30px;font-weight:700;font-family:"Lato",sans-serif;color:#03a919;position:relative;padding-bottom:10px}.portfolio-text h2:before{position:absolute;left:0;bottom:0;width:30px;height:2px;background:#08adcb;content:""}.portfolio-text h6{font-size:20px;font-weight:700;font-family:"Lato",sans-serif;color:#000;padding-top:10px}.portfolio-text p{font-size:14px;font-family:"Lato",sans-serif;color:#000;padding-top:5px;line-height:22px}ul.index_slider li:nth-child(3) .portfolio-text h2{color:#d25110}ul.index_slider li:nth-child(5) .portfolio-text h2{color:#00adbc}#build-sac{background-size:cover;background-position:50% 0;background-repeat:no-repeat;padding:76px 0 0;color:#fff;margin-bottom:120px;height:820px}.build-text{position:relative;font-size:20px;font-weight:700;font-family:"Lato",sans-serif;line-height:25px;padding:20px 0 20px 75px}.build-text div{position:absolute;top:0;left:0}.build-text div span{position:relative;width:61px;height:61px;display:block}.build-text div span:before{position:absolute;top:-5px;left:-5px;width:66px;height:66px;border:solid 1px rgba(255,255,255,.7);content:""}.build-text div span:after{position:absolute;bottom:-5px;right:-5px;width:66px;height:66px;border:solid 1px rgba(0,71,80,.7);content:""}.build-box p{font-size:14px;line-height:20px;padding-top:10px}.build-box{margin-top:50px}.mobile-box{position:relative;bottom:-50px}#project-sec{padding:50px 0 80px;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg3.png) no-repeat 5% 0,url(https://klizos.com/wp-content/themes/klizos/public/css/../images/in-bg4.png) no-repeat 95% 75%}.project-box{background:#fff;box-shadow:0 0 47px 7px rgba(0,0,0,.1);position:relative;height:656px;width:100%}.project-box .number-list{position:absolute;top:0;left:0;bottom:0;height:100%}.project-box .number-list .list.done{background-color:#11d8cc;color:#000}.project-box .number-list .list2.done{background-color:#20cbd4}.project-box .number-list .list3.done{background-color:#0099a9}.project-box .number-list .list4.done{background-color:#008996}.number-list ul{display:block;padding:0;margin:0;height:100%}.number-list ul li{background:#c8c8c8;padding:72px 44px;font-size:30px;font-weight:700;color:#7e7e7e;display:block;position:relative;display:flex;justify-content:center;align-items:center}.number-list ul li+li:before{position:absolute;top:0;left:0;right:0;width:100%;height:1px;background:#000;content:""}.project-box .slider-default.show{left:0;opacity:1}.project-box .slider-default{padding:0 20px 0 150px;position:absolute;top:0;bottom:0;left:100%;width:100%;opacity:0;transition:0.8s}.pooject-step{position:relative;padding:70px 0}.pooject-step ul li{float:left;text-align:center;background:#fff;box-shadow:0 0 15px 0 rgba(0,0,0,.2);border-radius:5px;margin:10px 1.5%;padding:40px 20px;position:relative;color:#000;transition:0.5s;font-size:16px;font-weight:600;text-transform:uppercase;width:100%}.pooject-step ul li:nth-child(1){margin-left:0}.project-slider{position:relative;display:block;overflow:hidden;width:100%;height:100%}.pooject-step ul li input[type="radio"]{position:absolute;top:0;left:0;right:0;width:100%;height:100%;opacity:0;z-index:999;cursor:pointer}.pooject-step ul li:hover{background:#20cbd4;color:#fff}.pooject-step ul{padding:0;margin-top:0;display:flex;align-items:center;width:100%;padding:20px 0 0}.prject-icon{width:90px;height:90px;border-radius:100%;background:#fff;box-shadow:2px 2px 0 2px rgba(0,131,155,.6);margin:0 auto 20px;display:flex;align-items:center;justify-content:center}.slider-two ul li:last-child,.slider-three ul li:last-child{position:absolute;bottom:0;left:0;background:none;width:auto;box-shadow:none;padding:0;margin:0}.slider-two .pooject-step ul li:last-child{width:auto}button.btn-2.big-btn,[type="submit"].btn-2.big-btn{border:0}.slider-two .pooject-step ul li{width:30%}.pooject-step [type="submit"]{float:right}.pooject-step button{float:left}.pooject-step form{padding-right:30px}.pooject-step form label{font-size:13px;color:#b9b9b9;line-height:15px;margin-top:20px}.pooject-step form .form-control{height:46px;line-height:46px;border:solid 1px #b9b9b9}#blog{background-size:cover;background-repeat:no-repeat;background-position:50% 0;padding:60px 0 80px}.blog-box{background:#fff;transition:0.5s}.blog-box .blog-img img{width:100%;height:100%;object-fit:cover}.blog-box .blog-img{position:relative;height:198px}.blog-img-text{position:absolute;top:50%;left:20px;transform:translateY(-50%)}.blog-img-text img{width:auto}.blog-img-text h6{font-size:18px;color:#fff;font-weight:400;line-height:23px}.blog-text{padding:10px 15px 25px;position:relative;padding-bottom:45px;min-height:217px}.blog-text a.read-btn{position:absolute;bottom:25px;left:15px}.blog-text p small{font-weight:700;font-size:11px;color:#737373;text-transform:uppercase;letter-spacing:1px}.blog-text h2{font-size:18px;color:#000;font-weight:400;line-height:23px;position:relative;padding-bottom:8px}.blog-text h2:before{position:absolute;bottom:0;left:0;height:2px;width:50px;background:#1cd4c6;content:""}.blog-text p{font-size:14px;color:#737373;margin-bottom:10px}a.read-btn{font-weight:700;font-size:14px;color:#000;display:inline-block}a.read-btn:hover{color:#00b09b}a.read-btn:hover .arrow{margin-left:8px;background:#00b09b}a.read-btn:hover .arrow:before,a.read-btn:hover .arrow:after{background:#00b09b}.arrow{background:#000;height:1px;width:10px;position:relative;cursor:pointer;float:right;margin-left:5px;margin-top:10px;transition:0.5s}.arrow:before,.arrow:after{content:"";background:#000;position:absolute;height:1px;width:5px}.arrow:before{right:-2px;bottom:-1px;transform:rotate(-45deg)}.arrow:after{right:-2px;top:-1px;transform:rotate(45deg)}.blog-box:hover{box-shadow:0 0 15px 0 rgba(0,0,0,.5)}.btn-3{display:inline-block;font-size:17px;font-weight:700;color:#fff;background:#00bfc9;box-shadow:0 0 15px 0 rgba(0,0,0,.3);padding:0 30px;line-height:50px;border-radius:5px;position:relative;margin-top:15px}.form-box{position:relative;z-index:999;margin:-160px 0 0}.form-box>div>div{padding:50px 40px;background-size:cover}.form-box>div{background:#fff;box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.form-box form label{padding-top:5px;font-size:14px}textarea.form-control{resize:none;height:150px}.form-box .heading1 h1 small{font-size:70%}ul.location-list{padding:0;margin:0}ul.location-list li{font-weight:400;font-size:14px;line-height:20px;color:#fff;padding:25px 0}ul.location-list li a{color:#fff}ul.location-list li i{display:block;font-size:20px;margin-bottom:10px}.form-box .heading1.white h1{color:#fff}.form-box .heading1 h1{padding-top:0}.form-box .heading1.white h1:before{background:#fff}#contact-form form label{margin-top:20px;font-size:14px;line-height:18px}#contact-form form .btn-2{border:0}.slider-box-custom{width:930px;height:100%;justify-content:center;align-items:center;display:flex;position:relative}.slid-box{position:relative;width:100%;height:447px;margin:0 auto;display:flex;justify-content:center;align-items:center}.slid-box .for-desktop{position:absolute;top:50px;overflow:hidden;z-index:9}.slid-box .for-laptop{width:460px;overflow:hidden;position:absolute;left:0;z-index:9;background-repeat:no-repeat;bottom:12px}.slid-box .for-tablate{width:181px;overflow:hidden;background-repeat:no-repeat;right:20%;position:absolute;z-index:9;bottom:35px}.slid-box .for-mobile{width:90px;overflow:hidden;position:absolute;z-index:9;background-repeat:no-repeat;bottom:25px;right:13%}.slid-box .tree-im{width:88px;overflow:hidden;position:absolute;z-index:8;bottom:25px;right:65px}.for-laptop-with{width:288px;margin:20px 95px 43px auto;border-radius:3px;display:block;overflow:hidden}.for-desktop-with{width:415px;height:368px;margin:19px 23px 25px 23px;border-radius:3px;display:block;overflow:hidden}.for-tablate-with{margin:25px 10px 20px 23px;border-radius:3px;display:block;overflow:hidden}.for-mobile-with{margin:7px 9px 13px 7px;border-radius:8px;display:block;overflow:hidden}.slid-box>div.tree-im{left:78%;top:50%;transform:none;z-index:1}.slid-box>div#arrows{position:absolute;left:-5px;top:28%}.slid-box>div#arrows div{width:10px;height:10px;border-radius:100%;border:solid 2px #fff;display:block;cursor:pointer;margin-top:8px;opacity:1;transition:0.5s;cursor:pointer}.slid-box>div#arrows div:hover{width:12px;height:12px}.slid-box:before{position:absolute;top:0;left:0;width:1px;height:230px;content:"";transform:translateY(-50%);background:rgba(255,255,255,.5)}.portfolio-accordion{display:none}#banner2{width:100%;position:relative;background-size:cover;background-position:50% 0;background-repeat:no-repeat}#banner2 .navbar-nav li:last-child .nav-link{padding-right:0}#banner2 .banner-text{padding:65px 0;width:50%;color:#fff}#banner2 .banner-text h1{font:700 45px/50px "Lato",sans-serif;position:relative;padding-bottom:5px}#banner2 .banner-text h1:before{position:absolute;bottom:0;left:0;width:70px;height:3px;background:#fff;content:""}#banner2 .banner-text h1>span{display:block}#banner2 .icon-box ul li a{font-size:15px;color:#fff;display:inline-block;margin:8px 0;text-shadow:1px 0 1px #000}#banner2 .icon-box{position:absolute;top:60%;right:0;transform:translateY(-50%)}.banner2-position{position:relative;background:#fff}.flo-img{position:absolute;bottom:-20px;right:0;width:42%}.hot-air-balloon4{position:absolute;bottom:2%;left:0}.hot-air-balloon5{position:absolute;bottom:0;right:0}.hot-air-balloon2{position:absolute;top:37px;right:19%}.hot-air-balloon{position:absolute;top:28px;left:126px}.navbar{padding-left:0;padding-right:0}.flo-img-relative{position:relative;height:242px}#banner2 .container{padding:0}.heading-parallax{font-size:24px;position:relative;margin:25px 30px}.heading-parallax:before{position:absolute;bottom:0;top:30px;width:55px;height:3px;background:#fff;content:""}.box-inside .hover-box-small-para{font-size:15px;line-height:22px}.box-inside .btn-2{border:solid 1px #fff;color:#fff;background:none;box-shadow:none}.left-para{float:left}.right-para{float:right}.white{color:#fff}.box-inside{padding:20% 10%;position:absolute;left:0;right:0;bottom:100%;width:100%;height:100%;opacity:0;transition:0.7s;color:#fff;background:-moz-linear-gradient(-45deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);background:-webkit-linear-gradient(-45deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);background:linear-gradient(135deg,rgba(3,154,240,.9) 0%,rgba(0,222,255,.9) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80039af0',endColorstr='#8000deff',GradientType=1)}.display-text{position:relative;display:block;overflow:hidden;background:#fff;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.1);box-shadow:0 0 2px 0 rgba(0,0,0,.1);width:100%;margin-top:20px;transition:0.5s;height:350px}.display-text:hover{-webkit-box-shadow:0 0 15px 0 rgba(0,0,0,.1);box-shadow:0 0 15px 0 rgba(0,0,0,.1)}.display-text:hover .box-inside{opacity:1;bottom:0}.box-inside h3{position:relative;font-size:22px;padding-bottom:8px;font-weight:700}.box-inside h3:before{position:absolute;bottom:0;height:2px;width:40px;content:"";background:#fff}.box-inside-pc{background-color:#fff;display:flex;max-width:100%;max-height:350px;overflow-y:hidden}.box-inside-pc img{width:100%;height:100%;object-fit:cover}.box-inside-pc h3{position:relative;color:#000;font-size:20px;padding-bottom:8px;padding-top:10px}.box-inside-pc h3:before{position:absolute;bottom:0;height:2px;width:60px;content:"";background:#08adcb}.boxes-div{display:flex;margin-top:8%;padding:0 3%;align-items:stretch;margin-bottom:29px}.parallax-one-bold-para{font-size:16px;font-weight:600;padding-top:10px}.cloud-box{position:absolute;left:0;top:0;z-index:1}.cloud-img1{position:relative;-webkit-animation-name:example;-webkit-animation-duration:100s;-webkit-animation-iteration-count:infinite;animation-name:example;animation-duration:100s;animation-iteration-count:infinite;left:0;top:0}@-webkit-keyframes example{0%{left:0}100%{left:100%}}@keyframes example{0%{left:0}100%{left:100%}}.cloud-box div{position:absolute;top:0;left:0}.cloud-img2{position:relative;-webkit-animation-name:example2;-webkit-animation-duration:100s;-webkit-animation-iteration-count:infinite;animation-name:example2;animation-duration:100s;animation-iteration-count:infinite;left:-100%;top:0}@-webkit-keyframes example2{0%{left:-100%}100%{left:0}}@keyframes example2{0%{left:-100%}100%{left:0}}.balloon-img{position:relative;-webkit-animation-name:example5;-webkit-animation-duration:12s;-webkit-animation-iteration-count:infinite;animation-name:example5;animation-duration:12s;animation-iteration-count:infinite;-ms-transform:rotate(30deg);-webkit-transform:rotate(30deg);transform:rotate(30deg)}.balloon-img2{position:relative;-webkit-animation-name:example5;-webkit-animation-duration:15s;-webkit-animation-iteration-count:infinite;animation-name:example5;animation-duration:15s;animation-iteration-count:infinite;-ms-transform:rotate(30deg);-webkit-transform:rotate(30deg);transform:rotate(30deg)}@-webkit-keyframes example5{0%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-ms-transform:rotate(-30deg);-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}100%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}}@keyframes example5{0%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-ms-transform:rotate(-30deg);-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}100%{-ms-transform:rotate(15deg);-webkit-transform:rotate(15deg);transform:rotate(15deg)}}.hot-air-balloon6{position:absolute;bottom:-11px;left:30%;-webkit-animation-name:example3;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;animation-name:example3;animation-duration:3s;animation-iteration-count:infinite;animation-timing-function:linear;z-index:999}@-webkit-keyframes example3{0%{bottom:-11px}50%{bottom:0}100%{bottom:-11px}}@keyframes example3{0%{bottom:-11px}50%{bottom:0}100%{bottom:-11px}}.flo-small-img{position:absolute;top:-24px;right:15%;-webkit-animation-name:example4;-webkit-animation-duration:60s;-webkit-animation-iteration-count:infinite;animation-name:example4;animation-duration:60s;animation-iteration-count:infinite;animation-timing-function:linear;transform:rotateY(0deg)}@-webkit-keyframes example4{0%{right:15%}50%{right:70%;transform:rotateY(0deg)}51%{transform:rotateY(180deg)}100%{right:15%;transform:rotateY(180deg)}}@keyframes example4{0%{right:15%}50%{right:70%;transform:rotateY(0deg)}51%{transform:rotateY(180deg)}100%{right:15%;transform:rotateY(180deg)}}.industry-main-div{background-color:#ecf1f4;padding:70px 0 180px;margin-bottom:-100px}.industry-inside-div{display:flex;align-items:center}.industry-inside-div .industry-carousel-box{margin:17px 0}.heading1 h5{font-size:15px;font-weight:400;padding-top:15px;width:80%;margin:0 auto;line-height:22px}.about-box-inside-pc{background-color:#fff;padding:30px 15px;text-align:center;-webkit-box-shadow:0 0 16px 0 rgba(0,0,0,.2);box-shadow:0 0 16px 0 rgba(0,0,0,.2);margin-bottom:10px;border-radius:8px;margin-top:30px}.about-box-inside-pc h3{position:relative;color:#000;font-size:20px;padding-bottom:10px;padding-top:15px;font-weight:700}.about-box-inside-pc p{font-size:14px;padding-top:10px}.about-box-inside-pc h3:before{position:absolute;bottom:0;height:2px;width:50px;content:"";background:#08adcb;left:50%;transform:translateX(-50%)}.about-page{background-position:0 35%}.about-text-box{padding-right:20px}.about-text-box p.about-two-heading{position:relative;font-size:36px;line-height:40px;font-weight:500;padding-bottom:8px}.about-two-heading::before{position:absolute;bottom:0;left:0;height:2px;width:60px;content:"";background:#08adcb}.about-text-box p.about-two-big-para{font-size:18px;font-weight:400;margin:10px 0 10px;line-height:24px}.about-text-box p{font-size:14px;line-height:20px}.about-small-box{padding:50px 20px;margin:30px 0 0;display:block;background:#fff;border-radius:8px;transition:0.5s;box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.about-small-box-heading{margin-top:6%;font-size:18px;font-weight:600}.about-small-box-para{font-size:14px}.about-tow-right-box-div{margin-top:25%}.about-small-box:hover{color:#fff!important;background:#00c0c0;box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.about-small-box img{background-color:#fff;border-radius:4px;padding:8px 8px}.about-small-box:hover img{background-color:#4dd3d3;border-radius:4px;padding:8px 8px}.about-small-box:hover .about-normal-img{display:none}.about-small-box:hover .about-hover-img{display:block}.about-small-box .about-hover-img{display:none}.about-parallax{margin:30px 0 0;padding:60px 0}.pinfo-img{width:140px;height:140px;border-radius:100%;margin:0 auto;display:block;overflow:hidden}.pinfo-img img{width:100%;height:100%;object-fit:cover}.about-parallax-heading{font-size:32px;position:relative;font-weight:500}.about-parallax-heading::before{position:absolute;bottom:0;top:30px;width:55px;height:3px;background:#fff;content:""}.about-parallax-sub-heading{font-size:20px;margin:40px 0 25px}.about-pinfo{background-color:#fff;display:grid;text-align:center;padding:17% 5%;margin:5px 0}.about-social-icon ul li a{font-size:14px;color:#666!important;display:flex;padding:0 10px}.about-social-link-list{display:inline-flex;margin:0;padding:0}.director-name{margin-top:10px;font-size:20px;font-weight:600}.des{font-size:12px}#testi-box{padding:50px 0 50px;position:relative}.about-testimonial-div{margin-top:30px}#testimonial-box{padding:20px 0;position:relative}.testimonial-carousel-box{background:#fff;border-radius:10px;padding:15px 9px;color:#000;transition:0.5s;text-align:left;position:relative;margin-left:1px}.testimonial-carousel-box-inside{border:solid 1px #e6e6e6;padding:30px 40px 20px;position:relative;transition:0.5s;min-height:185px}.testimonial-carousel-box:hover .testimonial-carousel-box-inside{-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2);border-color:#fff}.testimonial-carousel-box-inside:before{content:"";position:absolute;bottom:0;left:20px;width:25px;height:25px;background:#fff;transform:rotate(45deg);box-shadow:2px 2px 5px 0 rgba(0,0,0,.1);opacity:0;transition:0.5s}.testimonial-carousel-box:hover .testimonial-carousel-box-inside:before{bottom:-11px;opacity:1}.testimonial-icon img{width:auto!important}.testimonial-carousel-box h5{font:700 20px/25px "Lato",sans-serif;padding:10px 0 15px;margin:0}.testimonial-carousel-box p{font:400 14px/20px "Lato",sans-serif}#testimonial-box .testimonial-carousel-box:hover .btn-2{background:#fff;color:#000}#testimonial-box .testimonial-carousel-box:hover .btn-2:hover{color:#fff}#testimonial-box .owl-carousel{position:relative}#testimonial-box .owl-carousel .owl-nav{position:absolute;top:50%;transform:translateY(-50%);left:-70px;right:-70px}#testimonial-box .owl-carousel .owl-nav .owl-prev{width:52px;height:52px;background:#fff;box-shadow:0 0 14px 0 rgba(0,0,0,.2);float:left;display:block;border-radius:100%;font-size:0}#testimonial-box .owl-carousel .owl-nav .owl-prev span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-top:solid 2px #04aaa5;border-left:solid 2px #04aaa5;display:flex;margin:0 auto;align-items:center}#testimonial-box .owl-carousel .owl-nav .owl-next{width:52px;height:52px;background:#fff;box-shadow:0 0 14px 0 rgba(0,0,0,.2);float:right;display:block;border-radius:100%;font-size:0}#testimonial-box .owl-carousel .owl-nav .owl-next span{width:10px;height:10px;background:#fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-bottom:solid 2px #04aaa5;border-right:solid 2px #04aaa5;display:flex;margin:0 auto;align-items:center}#testimonial-box .owl-stage-outer{padding:20px 0 40px}.testi-2nd-div{display:flex;align-items:center;margin:20px 0}.testi-2nd-div-para p{margin-bottom:0px!important;padding-top:3px}.testi-big-para{font-size:16px!important;font-weight:600!important}.testi-small-para{font-size:12px!important}.testimonial-img img{width:67px;height:67px;border-radius:100%;object-fit:cover}.main-service-sec-a{display:flex;margin-top:5%}.service-para{font-size:16px!important;order:1;flex:1;margin-top:5%}.service-para::before{background:#fff!important}.right-top-img{float:right}.service-head{font-size:20px}.service-head{position:relative;padding-bottom:10px;font-weight:700;margin-bottom:10px}.service-head:before{position:absolute;bottom:0;left:15px;height:2px;width:55px;content:"";background:#1cd4c6}.service-row{display:flex;align-items:center;border-bottom:1px solid #ddd;padding:30px 0}.service-row:nth-child(2n+2){flex-direction:row-reverse}.service-row:nth-last-child(1){border-bottom:0}.careear-box:hover{background:#00aad5;transition:0.5s;color:#fff}.careear-box:hover a.btn-2{background:#fff;color:#000}.careear-box:hover a.btn-2:hover{color:#fff}.careear-box:hover h3:before{background:#fff}.careear-box{background:#fff;padding:40px;box-shadow:0 0 15px 0 rgb(0 0 0 / 20%);border-radius:8px;margin-bottom:30px;transition:0.8s;position:relative;padding-bottom:100px}.careear-box a.btn-2{position:absolute;bottom:40px;left:40px}.careear-box h3{position:relative;padding-bottom:10px;font-size:20px;padding-top:15px}.careear-box h3:before{position:absolute;bottom:0;left:0;width:50px;height:2px;content:"";background:#08adcb;transition:0.5s}.careear-box h4{font-size:15px;font-weight:600;padding:5px 0}.careear-box p{font-size:14px;line-height:22px}#inner-form.form-box{margin:40px 0 60px;padding:0}.form-back{background-image:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/form-back-img.png);background-repeat:no-repeat;background-size:cover;color:#fff;padding:50px 30px}#inner-form .heading1 h1{font-size:33px;font-weight:600;color:#fff;line-height:40px}#inner-form p.form-para{font-size:15px;line-height:22px}#inner-form .heading1 h1:before{background-color:#fff}.form-heading-para{padding:0;font-size:18px;font-weight:600}.form-div-box{padding:30px 40px 30px 20px}.form-control{font-size:13px;font-weight:600;line-height:45px;height:45px}.select-css{display:block;width:100%;height:45px;font-size:13px;font-weight:400;line-height:45px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;padding:.375rem .75rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}#inner-form textarea.form-control{line-height:20px}.file-upload .file-select input[type="file"]{z-index:100;cursor:pointer;position:absolute;height:100%;width:100%;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.file-upload .file-select .file-select-name{line-height:40px;display:inline-block;padding:0 10px}.file-upload .file-select .file-select-button{width:40px;padding:0 10px;display:inline-block;height:40px;line-height:40px;float:right;position:relative}.file-upload .file-select .file-select-button:before{content:"\f0ee";position:absolute;top:0;left:0;width:100%;line-height:40px;font-family:"Lato",sans-serif;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center}.file-upload .file-select{display:block;border:1px solid #ddd;color:#34495e;cursor:pointer;height:40px;line-height:40px;text-align:left;background:#fff;overflow:hidden;position:relative;border-radius:.25rem}.file-upload{display:block;text-align:center;font-family:"Lato",sans-serif;font-size:12px}.blog-box-page{background:#fff;margin:15px 0;box-shadow:0 0 4px 0 rgba(0,0,0,.1);padding-bottom:25px;transition:0.5s}.blog-img-box{width:100%;height:200px}.blog-img-box img{height:100%;width:100%;object-fit:cover}.blog-box-page:hover{box-shadow:0 0 15px 0 rgba(0,0,0,.2)}.blog-text-box{padding:20px}.blog-1st-text{font-size:20px;line-height:26px;font-weight:300;color:#000;display:inline-block}.calender-text{font-size:12px;float:left;font-weight:400}.calender-text i,.tag-text i{color:#00c4b8}.tag-text{font-size:12px;float:right;font-weight:400}.newsl-div{position:relative;display:block;background:#fff;width:100%;margin-bottom:40px}.news-para{color:#000;border-radius:4px;top:0;margin-bottom:15px;font-size:18px;font-weight:700}.news-form{position:relative;margin-top:20px}.news-form input[type="text"]{padding-right:45px}.news-form button{position:absolute;top:0;bottom:0;right:0;border:none;background:none}.news-social-list{text-align:center;padding-top:20px;border-top:solid 1px #e3e1e1;margin-top:20px}.news-social-list li a{color:#000;font-weight:100;padding:0 10px;font-size:14px}.news-social-list ul{padding:0;margin:0}.news-social-list li{display:inline-block}.category-img-para ul{padding:10px 0 0 0;margin:0}.category-img-para ul li a{position:relative;font-size:14px;line-height:20px;padding:13px 40px;color:#000;display:block;background:url(https://klizos.com/wp-content/themes/klizos/public/css/../images/s-logo.png);background-repeat:no-repeat;background-position:6px 50%}.category-img-para ul li a span{position:absolute;top:50%;right:0;transform:translateY(-50%);font-size:10px;width:20px;height:20px;line-height:20px;text-align:center;border-radius:100%;opacity:0;background:#666;color:#fff;transition:0.5s}.category-img-para ul li a:hover span{opacity:1}.category-img-para ul li a:hover{background-position:12px 50%}.category-img-para ul li+li{border-top:solid 1px #eee}.bolg-list img{width:100%}.latest-nesw-para{font-weight:600;margin:0 0 5px 0;font-size:14px;line-height:17px}.side-date-para{font-size:12px;font-weight:600;color:#00c4b8;margin:0}.bolg-list{padding:20px 0;margin:0!important}.bolg-list+.bolg-list{border-top:solid 1px #eee}.blog-d-title-para{margin:15px 0;line-height:30px;font-weight:600;font-size:26px}.blog-detail-div p{font-size:16px;color:#444;line-height:1.5}.tag-btn-box{margin-bottom:5px}.tag-btn-box span{color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);font:700 11px/30px "Lato",sans-serif;padding:0 10px;display:inline-block;float:left}.tag-btn-box a{font:400 11px/28px "Lato",sans-serif;color:#a4a3a3;padding:0 10px;display:inline-block;float:left;margin-left:3px;border:solid 1px #a4a3a3;text-transform:capitalize;margin-bottom:3px}.tag-box{display:flex;flex-direction:column}.bloger-name-para span{font-weight:600}.bloger-name-para{font-size:12px;float:none}.bloger-chat-para{font-size:14px;float:right;font-weight:600}.no-padding{padding:0}.bloger-d-para{font-size:14px;margin-top:50px;margin-bottom:0}.bloger-d-para p{font-size:17px}.bloger-d-para a{color:rgba(0,174,214,1)}.bloger-d-para a:hover{background-color:rgba(0,174,214,1);color:#fff;padding:0 5px}.bloger-d-para ul{padding-left:50px}.bloger-d-para li{list-style:disc;margin-bottom:8px;font-size:16px}.bloger-d-para ol{list-style:decimal;margin-bottom:8px;font-size:16px}.bloger-d-para h1,.bloger-d-para h2,.bloger-d-para h3,.bloger-d-para h4,.bloger-d-para h5{font-weight:700}.blog-social-icons{display:flex;padding:0}.blog-social-icon-div p{font-size:14px;font-weight:700}.blog-social-icons li a,.blog-social-icons li button{margin:0 5px;color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);line-height:30px;height:30px;width:30px;border-radius:100%;font-size:12px;text-align:center;display:block;border:0}.facebook-back:hover{background:#3b5998;border-radius:4px}.twitter-back:hover{background:#00acee;border-radius:4px}.insta-back:hover{background:radial-gradient(circle at 30% 107%,#fdf497 0%,#fdf497 5%,#fd5949 45%,#d6249f 60%,#285aeb 90%);border-radius:4px}.behance-back:hover{background:#053eff;border-radius:4px}.blog-social-icon-div{margin:30px 0}.bloger-detail-div{display:flex;border:1px solid #d4d4d4;padding:15px 10px;margin:50px 0}.bloger-profile-img-div img{max-width:100%;width:auto;height:auto}.bloger-name-profile{font-weight:700;font-size:16px}.bloger-link{color:#000;font-style:italic}.bloger-detail-info p{margin-bottom:5px}.bloger-personal-social-link-list{display:flex;padding:0;margin-top:15px;font-size:20px;margin-bottom:0}.bloger-personal-social-link-list li a{color:#000;padding:10px 10px 0 0}.articles-div p{font-size:14px;font-weight:700}.articles-box img{width:100%}.articles-box a{color:#000;font-weight:600}.bloger-comment-div{display:flex;padding:0 0;margin:25px 0}.bloger-reply-link{color:#000;font-size:12px}.bloger-comment-name-div{display:flex}.bloger-time-comment{font-size:10px;color:#4c4c4c;font-weight:700}.l-comment-div{font-size:14px;font-weight:700;margin-top:50px}.comment-form{margin-top:2%!important}.il-m-top{margin-top:-2%!important;margin-bottom:1%!important}.il-box{text-align:center;border:1px solid #e5e5e5;border-radius:8px;padding:40px;margin:40px 0 0}.il-box-icin-img{width:100px;height:100px;border-radius:100%;background:#00cfd9;margin:0 auto;display:flex;align-items:center;justify-content:center}.il-icon-heading{font-size:20px;font-weight:600;margin-top:3%}.parallax-big-para{font-size:30px;line-height:40px;margin:15px 0}.parallax-small-para{font-size:18px;font-weight:400;line-height:24px}.il-parallax-one{padding:60px 0;margin:80px 0}.il-buttom-parallax-head{position:relative;font-size:24px;font-weight:600;line-height:30px;padding-bottom:10px}.il-buttom-parallax-head::before{position:absolute;bottom:0;left:0;width:70px;height:2px;background:#1cd4c6;content:""}.brands-logo{padding:30px}#owlCarousel12 .owl-stage-outer .owl-stage{align-items:center;display:flex;flex-wrap:wrap}.form-control.error{color:red;border-color:red}#invoice_business_info p{margin-bottom:0}#invoice_business_info p{margin-bottom:0}.lightbox-opened{background-color:#333;background-color:rgba(51,51,51,.9);cursor:pointer;height:100%;left:0;overflow-y:scroll;padding:24px;position:fixed;text-align:center;top:0;width:100%;z-index:9999999999}.lightbox-opened:before{background-color:#333;background-color:rgba(51,51,51,.9);color:#eee;content:"x";font-family:"Lato",sans-serif;padding:6px 12px;position:fixed;text-transform:uppercase}.lightbox-opened img{box-shadow:0 0 6px 3px #333}.no-scroll{overflow:hidden}.blog-top-img-div img{height:auto}.comment-details{width:100%}.widget_search .title-with-border{margin-bottom:0;border-bottom:none}.carousel-control-next-icon,.carousel-control-prev-icon{width:40px;height:40px;background-color:#000;background-size:20px,20px;border-radius:100%}.career-body-content p,.career-body-content,.career-body-content ul li,.career-body-content a{font-size:15px}.modal-dialog-scrollable .modal-body::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#f5f5f5}.modal-dialog-scrollable .modal-body::-webkit-scrollbar{width:6px;background-color:#f5f5f5}.modal-dialog-scrollable .modal-body::-webkit-scrollbar-thumb{background-color:#000}.open>.dropdown-menu{display:block!important}.dropdown:hover>.dropdown-menu{display:block}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-menu{top:94%!important}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}input[type="date"]::before{color:#999;content:attr(placeholder)}input[type="date"]{color:#fff}input[type="date"]:focus,input[type="date"]:valid{color:#666}input[type="date"]:focus::before,input[type="date"]:valid::before{content:""!important}.invoice_history thead>tr{background:rgb(0,174,214);background:-moz-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00aed6',endColorstr='#00cbcd',GradientType=1);color:#fff;border:0}.invoice_history tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.03)}.invoice_history td,th{border-top:0;font-size:14px;padding:10px 20px}.invoice_description_custom>ul>li{list-style:disc;margin-bottom:8px}.invoice_description_custom p{font-size:17px}.invoice_description_custom a{border-bottom:2px solid rgba(0,174,214,1);padding:0 5px}.invoice_description_custom a:hover{background-color:rgba(0,174,214,1);color:#fff;padding:0 5px}.invoice_description_custom ul{padding-left:50px}.invoice_description_custom li{list-style:disc;margin-bottom:8px;font-size:16px}.invoice_description_custom ol{list-style:decimal;margin-bottom:8px;font-size:16px}.invoice_description_custom h1,.invoice_description_custom h2,.invoice_description_custom h3,.invoice_description_custom h4,.invoice_description_custom h5{font-weight:700}.errorstyle{position:relative}.errorstyle label.error{position:absolute;right:0;top:0}.fromSubmitMsg{z-index:999;padding:10px;display:inline-block}.portfolio-page-banner .top-logo img{filter:brightness(1000)}.w-100 iframe{max-width:100%}.other-footer .footer-logo img{filter:brightness(1000%)}.mc4wp-response{position:fixed;right:20px;top:20px}.mc4wp-response p{width:300px;text-align:left;font-size:15px;background-color:whitesmoke;color:#000;padding:10px 12px;border-radius:5px;z-index:999}.mc4wp-response>.mc4wp-failure p{color:green}#job-status span{text-transform:uppercase}.btn-hdr{padding-left:10px!important;padding-right:10px!important;padding-top:0;padding-bottom:0;font-size:17px}.we-are-hiring{padding-left:15px;margin-top:-10px}h1.get_quote{margin:13px;text-align:center}h1.ui-ux.aos-init.aos-animate{padding-top:20px}h2.looking{color:#fff}.widget_nav_menu div ul,.widget_recent_entries ul,.widget_categories ul,.widget_recent_comments ul,.widget_pages ul,.widget_meta ul,.widget_archive ul,.widget_archives ul,.widget_recent-posts ul,.widget_rss ul,#recentcomments{list-style:none;padding:0;margin:0;vertical-align:bottom}.widget_nav_menu div ul>li,.widget_recent_entries ul li,.widget_categories ul li,.widget_recent_comments ul li,.widget_pages ul li,.widget_meta ul li,.widget_archive ul li,.widget_archives ul li,.widget_recent-posts ul li,.widget_rss ul li,.recentcomments{position:relative;padding:0 0 12px 0;margin:0 0 12px 0;border-bottom:1px solid rgba(0,0,0,.075)}.title-with-border{position:relative;padding-bottom:15px;display:flex;align-items:center;margin-bottom:25px;flex-wrap:wrap;border-bottom:2px solid #0000003d}.magine-widget{position:relative;display:inline-block;width:100%}.title-with-border span{background:#fff;padding-right:1rem}.title-with-border span:before{position:absolute;top:50%;left:0;content:"";width:100%;height:6px;background:rgba(0,0,0,.65);z-index:-1;transform:translateY(-50%)}.widget_categories ul li{position:relative}.magine-widget a:not(.btn),[class*="elementor-widget-wp-widget-"] a{color:inherit;-webkit-transition:color .2s ease-in-out;-moz-transition:color .2s ease-in-out;-ms-transition:color .2s ease-in-out;transition:color .2s ease-in-out}.widget_nav_menu div ul>li>a,.widget_recent_entries ul li a,.widget_categories ul li a,.widget_recent_comments ul li a,.widget_pages ul li a,.widget_meta ul li a,.widget_recent-posts ul li a{font-weight:600}.widget_categories ul li span.badge{text-align:center;display:inline-block;position:absolute;top:.3rem;right:0;font-size:.7rem;font-weight:700;line-height:1em;padding:6px 8px 6px 8px;border-radius:20px}.widget_recent_entries ul li span.post-date{display:block;margin:.2rem 0 0 0;position:relative;font-size:.8rem;text-transform:uppercase}.widget_recent_entries ul li span.post-date:before{font-family:'Font Awesome 5 Free';content:"\f017";padding-right:.3rem;font-weight:400}.widget_recent_comments ul li span{position:relative;display:inline-block}#recentcomments a{display:block!important}.magine-widget:last-child{margin-bottom:0!important}.tagcloud{position:relative;display:inline-block;margin-bottom:-5px}.tagcloud .tag-link-count{padding-left:3px;margin-right:15px;display:inline-block;font-weight:700}.widget_search.magine-widget .search-form>label>span{display:none}.widget_search.magine-widget .search-form>label{width:100%}.widget_search.magine-widget .search-form .search-field{display:block;width:100%;height:auto;padding:.75rem 1rem;font-size:1rem;font-weight:400;line-height:1.7;color:#344055;background-color:#fff;background-clip:padding-box;border:.0625rem solid rgba(0,0,0,.1);border-radius:.125rem;box-shadow:none;transition:all .3s ease-in-out}.widget_search.magine-widget .search-form .search-submit{width:100%;color:#fff;background:-webkit-linear-gradient(left,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);background:linear-gradient(to right,rgba(0,174,214,1) 0%,rgba(0,203,205,1) 100%);padding:10px 25px}.magine-widget:first-child{padding-top:45px}@media (max-width:1441px){#banner .banner-text{padding:50px 0}ul.index_slider li img{left:0}#banner{clip-path:ellipse(100% 72% at 50% 31%);height:765px}footer{padding-top:115px;clip-path:ellipse(100% 73% at 50% 74%)}footer.other-footer{padding-top:40px!important}#industry-box{clip-path:ellipse(100% 68% at 50% 31%);padding:110px 0 84px;background-size:7%}#portfolio{clip-path:ellipse(126% 73% at 50% 79%)}.index_slider li img.portfolio-img1{left:-15px!important;width:16%}.container-fluid{top:67px;position:relative}ul.index_slider{margin:0;padding:0}#portfolio,.portfolio-slider,ul.index_slider{height:850px}ul.index_slider li figure{margin-top:200px}.slid-box>div.tree-im{top:49%}.flo-img{right:0}.hot-air-balloon2{right:10px}}@media (max-width:1200px){ul.index_slider li article h5{font-size:18px;line-height:20px;padding-bottom:8px!important}.portfolio-text h6{font-size:16px;line-height:18px}#portfolio,.portfolio-slider,ul.index_slider{height:763px}.portfolio-text h2{font-size:22px}#industry-box .owl-carousel .owl-nav{left:0;right:0}#industry-box .owl-carousel .owl-nav .owl-prev,#industry-box .owl-carousel .owl-nav .owl-next{box-shadow:0 0 8px 0 rgba(0,0,0,.3);width:35px;height:35px}#industry-box .owl-carousel .owl-nav .owl-next span,#industry-box .owl-carousel .owl-nav .owl-prev span{width:5px;height:5px}.tabset>label{padding:7px 15px}#testimonial-box .owl-carousel .owl-nav .owl-next{margin-right:40px}#testimonial-box .owl-carousel .owl-nav .owl-prev{margin-left:40px}}@media (max-width:1024px){#industry-box{padding:70px 0 84px}.industry-carousel-box{padding:15px 26px 3px}.mobile-box{bottom:-69px}#build-sac{margin-bottom:49px}.form-box{margin-top:49px}#navbarSupportedContent .nav-link{font-size:14px;padding:0 30px}.tab-menu{transform:rotate(-90deg);left:45%;top:-321px;height:743px;width:71px}.tab-slider li a span{display:none}.tab-slider li a{padding:60px 0;width:106px}.tab-slider li{width:212px;transform:rotate(90deg)}.tab-slider button.slick-prev,.tab-slider button.slick-next{left:31px}.tab-box{padding:87px 21px 20px 19px;height:auto}#services{padding:162px 0 130px}}@media (max-width:991px){.tabset{margin-top:-91px}}@media (max-width:801px){.portfolio-page-banner header #navbarSupportedContent .nav-link{color:#333}header.sample-header-page .navbar-collapse{box-shadow:0 0 5px 0 rgba(0,0,0,.1)}#banner .banner-text h1{font-size:30px;line-height:34px;padding-bottom:10px!important}#banner .banner-text{padding:32px 0}.navbar-dark .navbar-toggler{border:0}#banner .banner-text p>span{display:inline}.build-box{width:65%;margin:20px auto 0}#build-sac{height:auto;padding:30px 0;margin-bottom:0}.mobile-box{bottom:auto;text-align:center;padding:20px 0 0}#blog{padding:21px 0 15px}footer{font-size:11px;line-height:15px}#contact-form .heading1{margin-top:20px}#contact-form .form-box{padding:5px 35px 35px}.slid-box:before{top:48px;height:77px;transform:none}.navbar-collapse{background:#fff;position:absolute;top:100%;right:0;left:0;padding:20px;transition:0.5s;width:100%}#navbarSupportedContent .nav-link{color:#333;font-weight:600}.navbar-collapse ul li+li{border-top:solid 1px #ccc}#navbarSupportedContent .nav-link{padding:10px 20px}.navbar-toggler-icon{cursor:pointer}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:#006072!important}.collapse.show{right:0}.index_slider{display:none}#portfolio{height:auto;padding:67px 0}#portfolio .heading1{position:inherit;top:0;left:0;transform:inherit}.portfolio-slider{position:inherit;height:auto}.portfolio-accordion{display:block}.card button.btn-2{display:block;width:100%;text-align:left;margin:0;position:relative}.card .collapse:after{position:absolute;top:14px;right:20px;transform:rotate(44deg);width:12px;height:12px;border-right:solid 2px rgb(153,153,153);border-bottom:solid 2px rgb(153,153,153);content:"";transform:rotate(44deg);z-index:999}.collapse:not(.show){height:0}.card .collapse.show:after{transform:rotate(-133deg);top:19px}.card .collapse:not(.show){height:0;display:block}.card-header{padding:0;border-bottom:0}.card{margin-top:15px}.accordion>.card:first-of-type,.accordion>.card:not(:first-of-type):not(:last-of-type){border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.btn-link.focus,.btn-link:focus{text-decoration:none}.project-box .number-list{right:0;width:100%;bottom:auto;height:auto;z-index:999}.number-list ul li{width:25%;float:left;font-size:20px;padding:10px 0}.number-list ul li span{display:none}.number-list ul li+li:before{right:auto;width:1px;height:100%;bottom:0}.project-box .slider-default{padding:0 20px 20px;position:relative;height:0;left:0;right:0;width:100%;display:none}.project-box .slider-default.show{height:auto;opacity:1;display:block}.project-box{height:auto}.pooject-step{padding:20px 0 0}.project-box .slider-default .pooject-step{padding-bottom:50px}.project-box .slider-default:first-child .pooject-step,.project-box .slider-default:last-child .pooject-step{padding-bottom:0}.pooject-step h5{padding-top:20px!important}.flo-img{width:61%}.pinfo-img{width:100px;height:100px}#banner{clip-path:inherit}}@media (max-width:768px){.slid-box>div{background-size:100%;background-repeat:no-repeat}.for-desktop,.for-tablate,.for-mobile{display:none}.slid-box .for-laptop{margin:0 auto}#banner{height:545px}.slid-box{height:320px}.slid-box:before{display:none}.services-box{margin-top:8px}#banner2 .banner-text{padding:20px 0 200px;text-align:center!important}#banner2 .banner-text h1{font-size:20px;line-height:24px;margin-bottom:0}#banner2 .banner-text h1:before{height:1px;width:30px;left:50%;transform:translateX(-50%)}#banner2 .banner-text p{padding-top:10px!important}.flo-img{width:100%}.flo-img-relative{height:346px}.hot-air-balloon{left:20px}.hot-air-balloon6{left:50%;transform:translateX(-50%);width:43%}table.price-table{width:100%}.invoice-box form ul li.wpi_checkout_row{width:100%}.flo-img-relative{height:346px}.hot-air-balloon{left:20px}.hot-air-balloon6{left:50%;transform:translateX(-50%);width:43%}table.price-table{width:100%}.invoice-box form ul li.wpi_checkout_row{width:100%}table tfoot{width:auto}#banner2.portfolio-page-banner .banner-text{padding:36px 15px 111px;text-align:left!important;width:100%}}@media (max-width:600px){#banner{height:565px;clip-path:none}.scroll-animation>div a span{width:14px;height:14px}.banner-slider{bottom:52px}#banner p{margin-bottom:0!important}#industry-box{clip-path:none;padding:5px 0 20px}#industry-box .owl-stage-outer{padding:20px 0 17px}.tab-box{height:auto}#services{margin-top:0;padding:50px 0}#portfolio{clip-path:none;margin-top:0}.pooject-step ul li{padding:15px 10px}.slid-box .tree-im{right:0}.slid-box .for-laptop{left:auto}.slider-two .pooject-step ul li{width:100%}.tab-menu{left:237px;top:-233px;height:569px}.tab-slider li a{padding:59px 0}#banner2 .banner-text{padding:20px 0 163px}.flo-img-relative{height:310px}.about-text-box p.about-two-heading{font-size:30px}.tab-box{padding:0 20px 15px}.tab-menu{position:inherit;top:0;left:0;height:auto;transform:none;width:auto}.tab-slider li{transform:none;width:20%!important}.tab-slider li a span{display:block}.tab-slider li a{font-size:0;line-height:0;display:block;padding:10px}.slick-track,.slick-list{height:auto!important}.tab-slider button.slick-prev,.tab-slider button.slick-next{display:none!important}.tab-slider li:before{left:0;transform:translateY(-50%);height:60%;top:50%;width:1px;background:rgba(255,255,255,.4)}.tab-slider li:nth-child(6):before{display:none}.tab-slider li:nth-child(1),.tab-slider li:nth-child(2),.tab-slider li:nth-child(3),.tab-slider li:nth-child(4),.tab-slider li:nth-child(5),.tab-slider li:nth-child(11),.tab-slider li:nth-child(12),.tab-slider li:nth-child(13),.tab-slider li:nth-child(14),.tab-slider li:nth-child(15),.tab-slider li:nth-child(16),.tab-slider li:nth-child(17){display:none!important}.tab-slider{padding:0}.tab-menu{margin:0 -20px;border-radius:0}.tab-slider li a{padding:15px 0;width:86px}#testimonial-box .owl-carousel .owl-nav .owl-next{margin-right:0}#testimonial-box .owl-carousel .owl-nav .owl-prev{margin-left:0}}@media (max-width:480px){#banner .banner-text{padding:30px 20px}.invoice-box h2{font-size:22px}#banner .banner-text h1{font-size:18px;line-height:20px}#banner p{font-size:12px;line-height:15px;padding-top:10px!important;z-index:999;position:relative}.banner-text .btn-1{font:700 14px/39px "Lato",sans-serif;padding:0 13px;margin-top:15px}#industry-box .owl-carousel .owl-nav{top:45%!important;left:0px!important;right:0px!important}#industry-box .owl-carousel .owl-nav .owl-next{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-prev{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-next span{background:#28a5c5;border-bottom:solid 2px #ebf2f3;border-right:solid 2px #ebf2f3}#industry-box .owl-carousel .owl-nav .owl-prev span{background:#28a5c5;border-left:solid 2px #fff;border-top:solid 2px #fff}#banner{height:485px}.slid-box>div#arrows{top:40%}#banner .icon-box{top:89%;right:7px;z-index:999}#banner .icon-box ul:before,#banner .icon-box ul:after{height:35px}.navbar-brand{width:27%}.slid-box>div:nth-child(3){left:74%}.heading1 h1{font-size:20px;line-height:24px}.pooject-step ul{flex-wrap:wrap}.btn-2.big-btn{font-size:15px;line-height:39px;padding:0 15px}#build-sac{margin-bottom:0}#project-sec{padding:30px 0}.hot-air-balloon2,.hot-air-balloon{display:none}#banner2 .banner-text{padding:20px 0 139px}.hot-air-balloon6{width:54%}.flo-small-img{top:-16px;width:35px}.slid-box .for-laptop{width:350px;background-size:100%}.for-laptop-with{width:232px;margin:14px 58px 43px auto}.top-logo{width:110px}.tabset>label{padding:4px 8px;font-size:13px}.tab-slider li a{padding:15px 0;width:68px}.smFont{font-size:9px!important}}@media (max-width:375px){.navbar-brand{width:40%}.banner-slider{bottom:0}#banner{height:427px}.slid-box>div.tree-im{width:56px;top:25%}.slid-box>div#arrows{top:47%;left:5px}.slid-box:before{top:-9%;left:5px}.slid-box>div,.slid-box>div:nth-child(2){top:0}.banner-position{padding-bottom:25px}#industry-box{padding:55px 0 20px}.heading1 h1{font-size:21px;line-height:26px}.heading1 h1:before{width:35px}.heading1 p{font-size:12px}.btn-2{font-size:12px;line-height:30px;padding:0 15px}footer{clip-path:none;padding-top:50px}footer.other-footer{padding-top:0!important}#contact-form .form-box{margin-bottom:-60px;padding:5px 20px 10px}.build-box{width:100%}#industry-box .owl-carousel .owl-nav{top:45%!important;left:0px!important;right:0px!important}#industry-box .owl-carousel .owl-nav .owl-next{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-prev{width:32px;height:32px;background:#239ec0}#industry-box .owl-carousel .owl-nav .owl-next span{background:#28a5c5;border-bottom:solid 2px #ebf2f3;border-right:solid 2px #ebf2f3}#industry-box .owl-carousel .owl-nav .owl-prev span{background:#28a5c5;border-left:solid 2px #fff;border-top:solid 2px #fff}.slid-box{overflow-x:hidden}.for-laptop-with{width:196px;margin:13px 51px 25px auto}.slid-box .for-laptop{width:298px;background-size:100%;bottom:0}.slid-box .tree-im{display:none}#banner2 .banner-text p>span{display:inline}.hot-air-balloon6{width:66%}#inner-form .heading1 h1{font-size:20px;line-height:25px}.form-back{padding:25px}.form-div-box{padding:10px}.tabset{margin-top:-114px}}@media (max-width:375px){.tab-slider li a{width:58px}}@media (max-width:345px){.smFont{font-size:8px!important}}@media screen and (max-width:767px){.boxes-div{display:block;margin-top:16%}.heading-parallax{margin:25px 17px}#testimonial-box .owl-carousel .owl-nav{left:0;right:0;top:31%}#testimonial-box .owl-carousel .owl-nav .owl-prev,#testimonial-box .owl-carousel .owl-nav .owl-next{width:38px;height:38px}}@media only screen and (max-width:1024px) and (min-width:768px){.display-text{height:320px}.box-inside-pc h3{font-size:18px}.box-inside{padding:5% 5%}.box-inside h3{font-size:18px}.hover-box-small-para{font-size:14px}.parallax-one-bold-para{margin-bottom:5px}.btn-2{font:700 14px/36px "Lato",sans-serif}.boxes-div{margin-top:12%}}@media only screen and (max-width:1199px) and (min-width:1025px){.boxes-div{margin-top:9%}.display-text{height:360px}}@media only screen and (max-width:1024px) and (min-width:1024px){.boxes-div{margin-top:9%!important}}@media screen and (max-width:767px){.industry-inside-div{display:block}.industry-carousel-box{padding:15px 36px;margin:0 0 10px 0px!important}}@media only screen and (max-width:1024px) and (min-width:992px){.industry-carousel-box{padding:15px 10px}}@media only screen and (max-width:992px) and (min-width:768px){.industry-carousel-box{padding:10px 10px}}