@openmrs/esm-app-shell 5.3.3-pre.1360 → 5.3.3-pre.1372

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/.turbo/turbo-build.log +99 -99
  2. package/dist/{08a99d285a4ddb28.js → af34d1307807a2df.js} +1 -1
  3. package/dist/{08a99d285a4ddb28.js.map → af34d1307807a2df.js.map} +1 -1
  4. package/dist/index.html +1 -1
  5. package/dist/openmrs.f14e1f70b893a177.js +2 -0
  6. package/dist/openmrs.f14e1f70b893a177.js.map +1 -0
  7. package/dist/service-worker.js +1 -1
  8. package/lib/{736e7a40c44070fc.js → 6f0f30ccf4baaf92.js} +1 -1
  9. package/lib/esm-devtools-app/889.js +1 -1
  10. package/lib/esm-devtools-app/889.js.map +1 -1
  11. package/lib/esm-devtools-app/main.js +1 -1
  12. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
  13. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +5 -5
  14. package/lib/esm-devtools-app/routes.json +1 -1
  15. package/lib/esm-implementer-tools-app/889.js +1 -1
  16. package/lib/esm-implementer-tools-app/889.js.map +1 -1
  17. package/lib/esm-implementer-tools-app/main.js +1 -1
  18. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
  19. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +5 -5
  20. package/lib/esm-implementer-tools-app/routes.json +1 -1
  21. package/lib/esm-login-app/363.js +1 -1
  22. package/lib/esm-login-app/363.js.map +1 -1
  23. package/lib/esm-login-app/889.js +1 -1
  24. package/lib/esm-login-app/889.js.map +1 -1
  25. package/lib/esm-login-app/main.js +1 -1
  26. package/lib/esm-login-app/main.js.map +1 -1
  27. package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
  28. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +15 -15
  29. package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
  30. package/lib/esm-login-app/routes.json +1 -1
  31. package/lib/esm-offline-tools-app/889.js +1 -1
  32. package/lib/esm-offline-tools-app/889.js.map +1 -1
  33. package/lib/esm-offline-tools-app/main.js +1 -1
  34. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
  35. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +5 -5
  36. package/lib/esm-offline-tools-app/routes.json +1 -1
  37. package/lib/esm-primary-navigation-app/889.js +1 -1
  38. package/lib/esm-primary-navigation-app/889.js.map +1 -1
  39. package/lib/esm-primary-navigation-app/main.js +1 -1
  40. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  41. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +5 -5
  42. package/lib/esm-primary-navigation-app/routes.json +1 -1
  43. package/lib/index.html +1 -1
  44. package/lib/openmrs.js +98 -76
  45. package/lib/service-worker.js +2 -2
  46. package/package.json +3 -3
  47. package/src/run.ts +2 -0
  48. package/dist/openmrs.06472a8ef909bec6.js +0 -2
  49. package/dist/openmrs.06472a8ef909bec6.js.map +0 -1
  50. /package/dist/{openmrs.06472a8ef909bec6.js.LICENSE.txt → openmrs.f14e1f70b893a177.js.LICENSE.txt} +0 -0
@@ -45,7 +45,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
45
45
  \********************/
46
46
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
47
47
 
48
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! single-spa */ \"webpack/sharing/consume/default/single-spa/single-spa\");\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(single_spa__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-framework/src/internal */ \"webpack/sharing/consume/default/@openmrs/esm-framework/src/internal/@openmrs/esm-framework/src/internal\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _apps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./apps */ \"./src/apps.ts\");\n/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./locale */ \"./src/locale.ts\");\n/* harmony import */ var _ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui */ \"./src/ui/index.ts\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return(g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g);\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\n\n\n// @internal\n// used to track when the window.installedModules global is finalised\n// so we can pre-load all modules\nvar REGISTRATION_PROMISES = Symbol(\"openmrs_registration_promises\");\nfunction setupApps() {\n return _setupApps.apply(this, arguments);\n}\nfunction _setupApps() {\n _setupApps = /**\n * Sets up the frontend modules (apps). Uses the defined export\n * from the root modules of the apps. This is done by reading the\n * list of apps from the routes.registry.json file, which serves\n * as the registry of all apps in the application.\n */ _async_to_generator(function() {\n var scriptTags, promises, i, _loop, localStorage1, i1, routes, modules, registrationPromises;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n scriptTags = document.querySelectorAll(\"script[type='openmrs-routes']\");\n promises = [];\n for(i = 0; i < scriptTags.length; i++){\n promises.push((function() {\n var _ref = _async_to_generator(function(scriptTag) {\n var routes, e, _scriptTag_src;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n routes = undefined;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 5,\n ,\n 6\n ]);\n if (!scriptTag.textContent) return [\n 3,\n 2\n ];\n routes = JSON.parse(scriptTag.textContent);\n return [\n 3,\n 4\n ];\n case 2:\n if (!scriptTag.src) return [\n 3,\n 4\n ];\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(scriptTag.src)\n ];\n case 3:\n routes = _state.sent().data;\n _state.label = 4;\n case 4:\n return [\n 3,\n 6\n ];\n case 5:\n e = _state.sent();\n console.error(\"Caught error while loading routes from \".concat((_scriptTag_src = scriptTag.src) !== null && _scriptTag_src !== void 0 ? _scriptTag_src : \"JSON script tag content\"), e);\n return [\n 2,\n {}\n ];\n case 6:\n return [\n 2,\n Promise.resolve(routes !== null && routes !== void 0 ? routes : {})\n ];\n }\n });\n });\n return function(scriptTag) {\n return _ref.apply(this, arguments);\n };\n })()(scriptTags.item(i)));\n }\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.canAccessStorage)()) {\n _loop = function(i1) {\n var key = localStorage1.key(i1);\n if (key === null || key === void 0 ? void 0 : key.startsWith(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix)) {\n var localOverride = localStorage1.getItem(key);\n if (localOverride) {\n try {\n var maybeOpenmrsRoutes = JSON.parse(localOverride);\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsAppRoutes)(maybeOpenmrsRoutes)) {\n promises.push(Promise.resolve(_define_property({}, key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), maybeOpenmrsRoutes)));\n } else if (typeof maybeOpenmrsRoutes === \"string\" && maybeOpenmrsRoutes.startsWith(\"http\")) {\n promises.push((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(maybeOpenmrsRoutes).then(function(response) {\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsAppRoutes)(response.data)) {\n return Promise.resolve(_define_property({}, key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), response.data));\n }\n return Promise.reject(\"\".concat(maybeOpenmrsRoutes, \" did not resolve to a valid OpenmrsAppRoutes JSON object\"));\n }).catch(function(reason) {\n console.warn(\"Failed to fetch route overrides for \".concat(key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length)), reason);\n // still fail the promise\n throw reason;\n }));\n } else {\n console.warn(\"Route override for \".concat(key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), \" could not be handled as it was neither a JSON object nor a URL string\"), localOverride);\n }\n } catch (e) {\n console.error(\"Error parsing local route override for \".concat(key), e);\n }\n }\n }\n };\n localStorage1 = window.localStorage;\n for(i1 = 0; i1 < localStorage1.length; i1++)_loop(i1);\n }\n return [\n 4,\n Promise.allSettled(promises)\n ];\n case 1:\n routes = _state.sent().filter(function(p) {\n return p.status === \"fulfilled\";\n }).map(function(p) {\n return p.value;\n }).filter(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsRoutes).reduce(function(accumulatedRoutes, routes) {\n return _object_spread({}, accumulatedRoutes, routes);\n }, {});\n modules = [];\n registrationPromises = Object.entries(routes).map(function() {\n var _ref = _async_to_generator(function(param) {\n var _param, module, routes;\n return _ts_generator(this, function(_state) {\n _param = _sliced_to_array(param, 2), module = _param[0], routes = _param[1];\n modules.push([\n module,\n routes\n ]);\n (0,_apps__WEBPACK_IMPORTED_MODULE_2__.registerApp)(module, routes);\n return [\n 2\n ];\n });\n });\n return function(_) {\n return _ref.apply(this, arguments);\n };\n }());\n window[REGISTRATION_PROMISES] = Promise.all(registrationPromises);\n window.installedModules = modules;\n return [\n 2\n ];\n }\n });\n });\n return _setupApps.apply(this, arguments);\n}\nfunction loadConfigs(configs) {\n return _loadConfigs.apply(this, arguments);\n}\nfunction _loadConfigs() {\n _loadConfigs = /**\n * Loads the provided configurations and sets them in the system.\n */ _async_to_generator(function(configs) {\n var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, config;\n return _ts_generator(this, function(_state) {\n _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(_iterator = configs[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n config = _step.value;\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.provide)(config.value, config.name);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return [\n 2\n ];\n });\n });\n return _loadConfigs.apply(this, arguments);\n}\n/**\n * Invoked when the connectivity is changed.\n */ function connectivityChanged() {\n var online = navigator.onLine;\n // NB We do not wait for this to be done; it is simply scheduled\n (0,single_spa__WEBPACK_IMPORTED_MODULE_0__.triggerAppChange)();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.dispatchConnectivityChanged)(online);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showToast)({\n critical: true,\n description: \"Connection: \".concat(online ? \"online\" : \"offline\"),\n title: \"App\",\n kind: online ? \"success\" : \"warning\"\n });\n}\n/**\n * Runs the shell by importing the translations and starting single SPA.\n */ function runShell() {\n window.addEventListener(\"offline\", connectivityChanged);\n window.addEventListener(\"online\", connectivityChanged);\n return (0,_locale__WEBPACK_IMPORTED_MODULE_3__.setupI18n)().catch(function(err) {\n return console.error(\"Failed to initialize translations\", err);\n }).then(function() {\n return (0,single_spa__WEBPACK_IMPORTED_MODULE_0__.start)();\n });\n}\nfunction preloadScripts() {\n return _preloadScripts.apply(this, arguments);\n}\nfunction _preloadScripts() {\n _preloadScripts = _async_to_generator(function() {\n var _ref, importMap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n Promise.all([\n window[REGISTRATION_PROMISES],\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.getCurrentImportMap)()\n ])\n ];\n case 1:\n _ref = _sliced_to_array.apply(void 0, [\n _state.sent(),\n 2\n ]), importMap = _ref[1];\n window.installedModules.map(function() {\n var _ref = _async_to_generator(function(param) {\n var _param, module;\n return _ts_generator(this, function(_state) {\n _param = _sliced_to_array(param, 1), module = _param[0];\n // we simply swallow the error here since this is only a preload\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.importDynamic)(module, undefined, {\n importMap: importMap\n }).catch();\n return [\n 2\n ];\n });\n });\n return function(_) {\n return _ref.apply(this, arguments);\n };\n }());\n return [\n 2\n ];\n }\n });\n });\n return _preloadScripts.apply(this, arguments);\n}\nfunction handleInitFailure(e) {\n console.error(e);\n renderFatalErrorPage(e);\n}\nfunction renderFatalErrorPage(e) {\n var template = document.querySelector(\"#app-error\");\n if (template) {\n var fragment = template.content.cloneNode(true);\n var messageContainer = fragment.querySelector('[data-var=\"message\"]');\n if (messageContainer) {\n messageContainer.textContent = (e === null || e === void 0 ? void 0 : e.message) || \"No additional information available.\";\n }\n if (localStorage.getItem(\"openmrs:devtools\") && Object.keys(localStorage).some(function(k) {\n return k.startsWith(\"import-map-override:\");\n })) {\n var appErrorActionButtons = fragment === null || fragment === void 0 ? void 0 : fragment.querySelector(\"#buttons\");\n if (appErrorActionButtons) {\n var clearDevOverridesButton = document.createElement(\"button\");\n clearDevOverridesButton.className = \"cds--btn\";\n clearDevOverridesButton.innerHTML = \"Clear dev overrides\";\n clearDevOverridesButton.onclick = clearDevOverrides;\n appErrorActionButtons.appendChild(clearDevOverridesButton);\n }\n }\n document.body.appendChild(fragment);\n }\n}\nfunction clearDevOverrides() {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(localStorage)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n if (key.startsWith(\"import-map-override:\") && ![\n \"import-map-override:react\",\n \"import-map-override:react-dom\"\n ].includes(key)) {\n localStorage.removeItem(key);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n location.reload();\n}\nfunction createConfigLoader(configUrls) {\n var loadingConfigs = Promise.all(configUrls.map(function(configUrl) {\n var interpolatedUrl = (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.interpolateUrl)(configUrl);\n return fetch(interpolatedUrl).then(function(res) {\n return res.json();\n }).then(function(config) {\n return {\n name: configUrl,\n value: config\n };\n }).catch(function(err) {\n console.error('Loading the config from \"'.concat(configUrl, '\" failed.'), err);\n return {\n name: configUrl,\n value: {}\n };\n });\n }));\n return function() {\n return loadingConfigs.then(loadConfigs);\n };\n}\nfunction showNotifications() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderInlineNotifications)(document.querySelector(\".omrs-inline-notifications-container\"));\n return;\n}\nfunction showActionableNotifications() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderActionableNotifications)(document.querySelector(\".omrs-actionable-notifications-container\"));\n}\nfunction showToasts() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderToasts)(document.querySelector(\".omrs-toasts-container\"));\n}\nfunction showSnackbars() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderSnackbars)(document.querySelector(\".omrs-snackbars-container\"));\n}\nfunction showModals() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderModals)(document.querySelector(\".omrs-modals-container\"));\n}\nfunction showLoadingSpinner() {\n return (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderLoadingSpinner)(document.body);\n}\n/**\n * Registers the extensions coming from the app shell itself.\n */ function registerCoreExtensions() {\n var extensions = (0,_ui__WEBPACK_IMPORTED_MODULE_4__.getCoreExtensions)();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = extensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n (0,_apps__WEBPACK_IMPORTED_MODULE_2__.tryRegisterExtension)(_ui__WEBPACK_IMPORTED_MODULE_4__.appName, extension);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction setupOffline() {\n return _setupOffline.apply(this, arguments);\n}\nfunction _setupOffline() {\n _setupOffline = _async_to_generator(function() {\n var error;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _state.trys.push([\n 0,\n 3,\n ,\n 4\n ]);\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.registerOmrsServiceWorker)(\"\".concat(window.getOpenmrsSpaBase(), \"service-worker.js\"))\n ];\n case 1:\n _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.activateOfflineCapability)()\n ];\n case 2:\n _state.sent();\n setupOfflineStaticDependencyPrecaching();\n return [\n 3,\n 4\n ];\n case 3:\n error = _state.sent();\n console.error(\"Error while setting up offline mode.\", error);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showNotification)({\n kind: \"error\",\n title: \"Offline Setup Error\",\n description: error.message\n });\n return [\n 3,\n 4\n ];\n case 4:\n return [\n 2\n ];\n }\n });\n });\n return _setupOffline.apply(this, arguments);\n}\nfunction setupOfflineStaticDependencyPrecaching() {\n var precacheDelay = 1000 * 60 * 5;\n var lastPrecache = null;\n subscribeOnlineAndLoginChange(function(online, hasLoggedInUser) {\n var hasExceededPrecacheDelay = !lastPrecache || new Date().getTime() - lastPrecache.getTime() > precacheDelay;\n if (hasLoggedInUser && online && hasExceededPrecacheDelay) {\n lastPrecache = new Date();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.dispatchPrecacheStaticDependencies)();\n }\n });\n}\nfunction subscribeOnlineAndLoginChange(cb) {\n var isOnline = false;\n var hasLoggedInUser = false;\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)({\n includeAuthStatus: false\n }).subscribe(function(user) {\n hasLoggedInUser = !!user;\n cb(isOnline, hasLoggedInUser);\n });\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeConnectivity)(function(param) {\n var online = param.online;\n isOnline = online;\n cb(online, hasLoggedInUser);\n });\n}\nfunction precacheGlobalStaticDependencies() {\n return _precacheGlobalStaticDependencies.apply(this, arguments);\n}\nfunction _precacheGlobalStaticDependencies() {\n _precacheGlobalStaticDependencies = _async_to_generator(function() {\n var sessionPathUrl;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n precacheImportMap()\n ];\n case 1:\n _state.sent();\n sessionPathUrl = new URL(\"\".concat(window.openmrsBase, \"/ws/rest/v1/session\"), window.location.origin).href;\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.messageOmrsServiceWorker)({\n type: \"registerDynamicRoute\",\n url: sessionPathUrl,\n strategy: \"network-first\"\n })\n ];\n case 2:\n _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(\"/ws/rest/v1/session\").catch(function(e) {\n return console.warn(\"Failed to precache the user session data from the app shell. MFs depending on this data may run into problems while offline.\", e);\n })\n ];\n case 3:\n _state.sent();\n return [\n 2\n ];\n }\n });\n });\n return _precacheGlobalStaticDependencies.apply(this, arguments);\n}\nfunction precacheImportMap() {\n return _precacheImportMap.apply(this, arguments);\n}\nfunction _precacheImportMap() {\n _precacheImportMap = _async_to_generator(function() {\n var importMap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n window.importMapOverrides.getCurrentPageMap()\n ];\n case 1:\n importMap = _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.messageOmrsServiceWorker)({\n type: \"onImportMapChanged\",\n importMap: importMap\n })\n ];\n case 2:\n _state.sent();\n return [\n 2\n ];\n }\n });\n });\n return _precacheImportMap.apply(this, arguments);\n}\nfunction setupOfflineCssClasses() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeConnectivity)(function(param) {\n var online = param.online;\n var body = document.querySelector(\"body\");\n if (online) {\n body.classList.remove(\"omrs-offline\");\n } else {\n body.classList.add(\"omrs-offline\");\n }\n });\n}\nfunction run(configUrls, offline) {\n var closeLoading = showLoadingSpinner();\n var provideConfigs = createConfigLoader(configUrls);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.integrateBreakpoints)();\n showToasts();\n showModals();\n showNotifications();\n showActionableNotifications();\n showSnackbars();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeNotificationShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showNotification);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeActionableNotificationShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showActionableNotification);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeToastShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showToast);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeSnackbarShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showSnackbar);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribePrecacheStaticDependencies)(precacheGlobalStaticDependencies);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.setupApiModule)();\n registerCoreExtensions();\n return setupApps().then(_apps__WEBPACK_IMPORTED_MODULE_2__.finishRegisteringAllApps).then(setupOfflineCssClasses).then(provideConfigs).then(runShell).catch(handleInitFailure).then(closeLoading).then(offline ? setupOffline : undefined).then(preloadScripts);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvcnVuLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXFEO0FBc0NSO0FBQ3dDO0FBQ2hEO0FBQ2E7QUFFbEQsWUFBWTtBQUNaLHFFQUFxRTtBQUNyRSxpQ0FBaUM7QUFDakMsSUFBTXlDLHdCQUF3QkMsT0FBTztTQVF0QkM7V0FBQUE7O1NBQUFBO0lBQUFBLGFBTmY7Ozs7O0NBS0MsR0FDRCwrQkFBMkI7WUFDbkJDLFlBRUFDLFVBQ0dDLFVBdUJEQyxlQUNHRCxJQXFETEUsUUFZQUMsU0FDQUM7Ozs7b0JBN0ZBTixhQUFhTyxTQUFTQyxnQkFBZ0IsQ0FBb0I7b0JBRTFEUDtvQkFDTixJQUFTQyxJQUFJLEdBQUdBLElBQUlGLFdBQVdTLE1BQU0sRUFBRVAsSUFBSzt3QkFDMUNELFNBQVNTLElBQUksQ0FDWDt1Q0FBQyw2QkFBT0MsV0FBYztvQ0FDaEJQLFFBT0tRLEdBQ2lERDs7Ozs0Q0FSdERQLFNBQW9DUzs7Ozs7Ozs7O2lEQUVsQ0YsVUFBVUcsV0FBVyxFQUFyQkg7Ozs7NENBQ0ZQLFNBQVNXLEtBQUtDLEtBQUssQ0FBQ0wsVUFBVUcsV0FBVzs7Ozs7O2lEQUNoQ0gsVUFBVU0sR0FBRyxFQUFiTjs7Ozs0Q0FDQzs7Z0RBQU01QixpRkFBWUEsQ0FBZ0I0QixVQUFVTSxHQUFHOzs7NENBQXpEYixTQUFTLGNBQW1EYyxJQUFJOzs7Ozs7Ozs0Q0FFM0ROOzRDQUNQTyxRQUFRQyxLQUFLLENBQUMsMENBQXFGLE9BQTNDVCxDQUFBQSxpQkFBQUEsVUFBVU0sR0FBRyxjQUFiTiw0QkFBQUEsaUJBQWlCLHlCQUF5QixHQUFJQzs0Q0FFdEc7O2dEQUFPLENBQUM7Ozs0Q0FHVjs7Z0RBQU9TLFFBQVFDLE9BQU8sQ0FBQ2xCLG1CQUFBQSxvQkFBQUEsU0FBVSxDQUFDLENBQUM7Ozs7NEJBQ3JDOzRDQWZRTzs7OzZCQWVMWCxXQUFXdUIsSUFBSSxDQUFDckI7b0JBRXZCO29CQUVBLElBQUlmLHFGQUFnQkEsSUFBSTs2Q0FHd0I7NEJBQzVDLElBQU1xQyxNQUFNckIsY0FBYXFCLEdBQUcsQ0FBQ3RCOzRCQUM3QixJQUFJc0IsZ0JBQUFBLGlCQUFBQSxLQUFBQSxJQUFBQSxJQUFLQyxVQUFVLENBQUNyQyx5RkFBd0JBLEdBQUc7Z0NBQzdDLElBQU1zQyxnQkFBZ0J2QixjQUFhd0IsT0FBTyxDQUFDSDtnQ0FDM0MsSUFBSUUsZUFBZTtvQ0FDakIsSUFBSTt3Q0FDRixJQUFNRSxxQkFBcUJiLEtBQUtDLEtBQUssQ0FBQ1U7d0NBQ3RDLElBQUlyQyx1RkFBa0JBLENBQUN1QyxxQkFBcUI7NENBQzFDM0IsU0FBU1MsSUFBSSxDQUNYVyxRQUFRQyxPQUFPLENBQ2IscUJBQUNFLElBQUlLLEtBQUssQ0FBQ3pDLHlGQUF3QkEsQ0FBQ3FCLE1BQU0sR0FBSW1CO3dDQUdwRCxPQUFPLElBQUksT0FBT0EsdUJBQXVCLFlBQVlBLG1CQUFtQkgsVUFBVSxDQUFDLFNBQVM7NENBQzFGeEIsU0FBU1MsSUFBSSxDQUNYM0IsaUZBQVlBLENBQW1CNkMsb0JBQzVCRSxJQUFJLENBQUMsU0FBQ0MsVUFBYTtnREFDbEIsSUFBSTFDLHVGQUFrQkEsQ0FBQzBDLFNBQVNiLElBQUksR0FBRztvREFDckMsT0FBT0csUUFBUUMsT0FBTyxDQUNwQixxQkFBQ0UsSUFBSUssS0FBSyxDQUFDekMseUZBQXdCQSxDQUFDcUIsTUFBTSxHQUFJc0IsU0FBU2IsSUFBSTtnREFFL0QsQ0FBQztnREFFRCxPQUFPRyxRQUFRVyxNQUFNLENBQ25CLEdBQXNCLE9BQW5CSixvQkFBbUI7NENBRTFCLEdBQ0NLLEtBQUssQ0FBQyxTQUFDQyxRQUFXO2dEQUNqQmYsUUFBUWdCLElBQUksQ0FDVix1Q0FBa0YsT0FBM0NYLElBQUlLLEtBQUssQ0FBQ3pDLHlGQUF3QkEsQ0FBQ3FCLE1BQU0sSUFDaEZ5QjtnREFHRix5QkFBeUI7Z0RBQ3pCLE1BQU1BLE9BQU87NENBQ2Y7d0NBRU4sT0FBTzs0Q0FDTGYsUUFBUWdCLElBQUksQ0FDVixzQkFFRSxPQUZvQlgsSUFBSUssS0FBSyxDQUM3QnpDLHlGQUF3QkEsQ0FBQ3FCLE1BQU0sR0FDL0IsMkVBQ0ZpQjt3Q0FFSixDQUFDO29DQUNILEVBQUUsT0FBT2QsR0FBRzt3Q0FDVk8sUUFBUUMsS0FBSyxDQUFDLDBDQUE4QyxPQUFKSSxNQUFPWjtvQ0FDakU7Z0NBQ0YsQ0FBQzs0QkFDSCxDQUFDO3dCQUNIO3dCQW5ETVQsZ0JBQWVpQyxPQUFPakMsWUFBWTt3QkFDeEMsSUFBU0QsS0FBSSxHQUFHQSxLQUFJQyxjQUFhTSxNQUFNLEVBQUVQO29CQW1EM0MsQ0FBQztvQkFFOEI7O3dCQUFNbUIsUUFBUWdCLFVBQVUsQ0FBQ3BDOzs7b0JBQWxERyxTQUF3QixjQUMzQmtDLE1BQU0sQ0FBQyxTQUFDQzsrQkFBTUEsRUFBRUMsTUFBTSxLQUFLO3VCQUMzQkMsR0FBRyxDQUFDLFNBQUNGOytCQUFNLEVBQTZDRyxLQUFLO3VCQUM3REosTUFBTSxDQUFDaEQsZ0ZBQWVBLEVBQ3RCcUQsTUFBTSxDQUNMLFNBQUNDLG1CQUFtQnhDOytCQUFZLG1CQUMzQndDLG1CQUNBeEM7dUJBRUwsQ0FBQztvQkFHQ0M7b0JBQ0FDLHVCQUF1QnVDLE9BQU9DLE9BQU8sQ0FBQzFDLFFBQVFxQyxHQUFHO21DQUFDLG9DQUE0Qjt3Q0FBcEJNLFFBQVEzQzs7cUVBQVIyQyxvQkFBUTNDO2dDQUN0RUMsUUFBUUssSUFBSTtvQ0FBRXFDO29DQUFRM0M7O2dDQUN0Qlosa0RBQVdBLENBQUN1RCxRQUFRM0M7Ozs7O3dCQUN0Qjs7Ozs7b0JBRUFnQyxNQUFNLENBQUN2QyxzQkFBc0IsR0FBR3dCLFFBQVEyQixHQUFHLENBQUMxQztvQkFDNUM4QixPQUFPYSxnQkFBZ0IsR0FBRzVDOzs7Ozs7SUFDNUI7V0FyR2VOOztTQTBHQW1ELFlBQVlDLE9BQStDO1dBQTNERDs7U0FBQUE7SUFBQUEsZUFIZjs7Q0FFQyxHQUNELDZCQUEyQkMsT0FBK0MsRUFBRTtZQUNyRSxnRkFBTUM7O1lBQU47O2dCQUFMLElBQUssWUFBZ0JELDhCQUFoQiwrRkFBeUI7b0JBQW5CQyxTQUFOO29CQUNINUYsNEVBQU9BLENBQUM0RixPQUFPVixLQUFLLEVBQUVVLE9BQU9DLElBQUk7Z0JBQ25DOztnQkFGSztnQkFBQTs7O3lCQUFBO3dCQUFBOzs7d0JBQUE7OEJBQUE7Ozs7Ozs7O0lBR1A7V0FKZUg7O0FBTWY7O0NBRUMsR0FDRCxTQUFTSSxzQkFBc0I7SUFDN0IsSUFBTUMsU0FBU0MsVUFBVUMsTUFBTTtJQUMvQixnRUFBZ0U7SUFDaEVwRyw0REFBZ0JBO0lBRWhCYSxnR0FBMkJBLENBQUNxRjtJQUM1QjVGLDhFQUFTQSxDQUFDO1FBQ1IrRixVQUFVLElBQUk7UUFDZEMsYUFBYSxlQUE2QyxPQUE5QkosU0FBUyxXQUFXLFNBQVM7UUFDekRLLE9BQU87UUFDUEMsTUFBTU4sU0FBUyxZQUFZLFNBQVM7SUFDdEM7QUFDRjtBQUVBOztDQUVDLEdBQ0QsU0FBU08sV0FBVztJQUNsQjFCLE9BQU8yQixnQkFBZ0IsQ0FBQyxXQUFXVDtJQUNuQ2xCLE9BQU8yQixnQkFBZ0IsQ0FBQyxVQUFVVDtJQUNsQyxPQUFPNUQsa0RBQVNBLEdBQ2J1QyxLQUFLLENBQUMsU0FBQytCO2VBQVE3QyxRQUFRQyxLQUFLLENBQUUscUNBQW9DNEM7T0FDbEVsQyxJQUFJLENBQUM7ZUFBTTFFLGlEQUFLQTs7QUFDckI7U0FFZTZHO1dBQUFBOztTQUFBQTtJQUFBQSxrQkFBZiwrQkFBZ0M7WUFDUixNQUFiQzs7OztvQkFBYTs7d0JBQU03QyxRQUFRMkIsR0FBRzs0QkFBRVosTUFBTSxDQUFDdkMsc0JBQXNCOzRCQUFFWix3RkFBbUJBOzs7O29CQUFyRTt3QkFBQTs7d0JBQWJpRixZQUFhO29CQUV0QjlCLE9BQU9hLGdCQUFnQixDQUFDUixHQUFHO21DQUFDLG9DQUFvQjt3Q0FBWk07O3FFQUFBQTtnQ0FDbEMsZ0VBQWdFO2dDQUNoRTdELGtGQUFhQSxDQUFDNkQsUUFBUWxDLFdBQVc7b0NBQUVxRCxXQUFBQTtnQ0FBVSxHQUFHakMsS0FBSzs7Ozs7d0JBQ3ZEOzs7Ozs7Ozs7O0lBQ0Y7V0FQZWdDOztBQVNmLFNBQVNFLGtCQUFrQnZELENBQVEsRUFBRTtJQUNuQ08sUUFBUUMsS0FBSyxDQUFDUjtJQUNkd0QscUJBQXFCeEQ7QUFDdkI7QUFFQSxTQUFTd0QscUJBQXFCeEQsQ0FBUyxFQUFFO0lBQ3ZDLElBQU15RCxXQUFXOUQsU0FBUytELGFBQWEsQ0FBc0I7SUFFN0QsSUFBSUQsVUFBVTtRQUNaLElBQU1FLFdBQVdGLFNBQVNHLE9BQU8sQ0FBQ0MsU0FBUyxDQUFDLElBQUk7UUFDaEQsSUFBTUMsbUJBQW1CSCxTQUFTRCxhQUFhLENBQUM7UUFFaEQsSUFBSUksa0JBQWtCO1lBQ3BCQSxpQkFBaUI1RCxXQUFXLEdBQUdGLENBQUFBLGNBQUFBLGVBQUFBLEtBQUFBLElBQUFBLEVBQUcrRCxPQUFPLEtBQUk7UUFDL0MsQ0FBQztRQUVELElBQ0V4RSxhQUFhd0IsT0FBTyxDQUFDLHVCQUNyQmtCLE9BQU8rQixJQUFJLENBQUN6RSxjQUFjMEUsSUFBSSxDQUFDLFNBQUNDO21CQUFNQSxFQUFFckQsVUFBVSxDQUFDO1lBQ25EO1lBQ0EsSUFBTXNELHdCQUF3QlIscUJBQUFBLHNCQUFBQSxLQUFBQSxJQUFBQSxTQUFVRCxhQUFhLENBQUM7WUFDdEQsSUFBSVMsdUJBQXVCO2dCQUN6QixJQUFNQywwQkFBMEJ6RSxTQUFTMEUsYUFBYSxDQUFDO2dCQUN2REQsd0JBQXdCRSxTQUFTLEdBQUc7Z0JBQ3BDRix3QkFBd0JHLFNBQVMsR0FBRztnQkFDcENILHdCQUF3QkksT0FBTyxHQUFHQztnQkFDbENOLHNCQUFzQk8sV0FBVyxDQUFDTjtZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVEekUsU0FBU2dGLElBQUksQ0FBQ0QsV0FBVyxDQUFDZjtJQUM1QixDQUFDO0FBQ0g7QUFFQSxTQUFTYyxvQkFBb0I7UUFDdEI7O1FBQUwsUUFBSyxZQUFheEMsT0FBTytCLElBQUksQ0FBQ3pFLGtDQUF6Qix3R0FBd0M7WUFBeEMsSUFBTXFCLE1BQU47WUFDSCxJQUNFQSxJQUFJQyxVQUFVLENBQUMsMkJBQ2YsQ0FBQztnQkFBQztnQkFBNkI7YUFBZ0MsQ0FBQytELFFBQVEsQ0FBQ2hFLE1BQ3pFO2dCQUNBckIsYUFBYXNGLFVBQVUsQ0FBQ2pFO1lBQzFCLENBQUM7UUFDSDs7UUFQSztRQUFBOzs7aUJBQUE7Z0JBQUE7OztnQkFBQTtzQkFBQTs7OztJQVFMa0UsU0FBU0MsTUFBTTtBQUNqQjtBQUVBLFNBQVNDLG1CQUFtQkMsVUFBeUIsRUFBRTtJQUNyRCxJQUFNQyxpQkFBaUJ6RSxRQUFRMkIsR0FBRyxDQUNoQzZDLFdBQVdwRCxHQUFHLENBQUMsU0FBQ3NELFdBQWM7UUFDNUIsSUFBTUMsa0JBQWtCaEgsbUZBQWNBLENBQUMrRztRQUN2QyxPQUFPRSxNQUFNRCxpQkFDVmxFLElBQUksQ0FBQyxTQUFDb0U7bUJBQVFBLElBQUlDLElBQUk7V0FDdEJyRSxJQUFJLENBQUMsU0FBQ3NCO21CQUFZO2dCQUNqQkMsTUFBTTBDO2dCQUNOckQsT0FBT1U7WUFDVDtXQUNDbkIsS0FBSyxDQUFDLFNBQUMrQixLQUFRO1lBQ2Q3QyxRQUFRQyxLQUFLLENBQUMsNEJBQXNDLE9BQVYyRSxXQUFVLGNBQVkvQjtZQUNoRSxPQUFPO2dCQUNMWCxNQUFNMEM7Z0JBQ05yRCxPQUFPLENBQUM7WUFDVjtRQUNGO0lBQ0o7SUFFRixPQUFPO2VBQU1vRCxlQUFlaEUsSUFBSSxDQUFDb0I7O0FBQ25DO0FBRUEsU0FBU2tELG9CQUFvQjtJQUMzQnZJLDhGQUF5QkEsQ0FBQzBDLFNBQVMrRCxhQUFhLENBQUM7SUFDakQ7QUFDRjtBQUVBLFNBQVMrQiw4QkFBOEI7SUFDckN2SSxrR0FBNkJBLENBQUN5QyxTQUFTK0QsYUFBYSxDQUFDO0FBQ3ZEO0FBRUEsU0FBU2dDLGFBQWE7SUFDcEJ2SSxpRkFBWUEsQ0FBQ3dDLFNBQVMrRCxhQUFhLENBQUM7QUFDdEM7QUFFQSxTQUFTaUMsZ0JBQWdCO0lBQ3ZCdkksb0ZBQWVBLENBQUN1QyxTQUFTK0QsYUFBYSxDQUFDO0FBQ3pDO0FBRUEsU0FBU2tDLGFBQWE7SUFDcEI3SCxpRkFBWUEsQ0FBQzRCLFNBQVMrRCxhQUFhLENBQUM7QUFDdEM7QUFFQSxTQUFTbUMscUJBQXFCO0lBQzVCLE9BQU9sSix5RkFBb0JBLENBQUNnRCxTQUFTZ0YsSUFBSTtBQUMzQztBQUVBOztDQUVDLEdBQ0QsU0FBU21CLHlCQUF5QjtJQUNoQyxJQUFNQyxhQUFhL0csc0RBQWlCQTtRQUMvQjs7UUFBTCxRQUFLLFlBQW1CK0csK0JBQW5CLHdHQUErQjtZQUEvQixJQUFNQyxZQUFOO1lBQ0huSCwyREFBb0JBLENBQUNFLHdDQUFPQSxFQUFFaUg7UUFDaEM7O1FBRks7UUFBQTs7O2lCQUFBO2dCQUFBOzs7Z0JBQUE7c0JBQUE7Ozs7QUFHUDtTQUVlQztXQUFBQTs7U0FBQUE7SUFBQUEsZ0JBQWYsK0JBQThCO1lBS25CekY7Ozs7Ozs7Ozs7b0JBSFA7O3dCQUFNN0MsOEZBQXlCQSxDQUFDLEdBQThCLE9BQTNCNkQsT0FBTzBFLGlCQUFpQixJQUFHOzs7b0JBQTlEO29CQUNBOzt3QkFBTWpJLDhGQUF5QkE7OztvQkFBL0I7b0JBQ0FrSTs7Ozs7O29CQUNPM0Y7b0JBQ1BELFFBQVFDLEtBQUssQ0FBQyx3Q0FBd0NBO29CQUN0RDNELHFGQUFnQkEsQ0FBQzt3QkFDZm9HLE1BQU07d0JBQ05ELE9BQU87d0JBQ1BELGFBQWF2QyxNQUFNdUQsT0FBTztvQkFDNUI7Ozs7Ozs7Ozs7O0lBRUo7V0FiZWtDOztBQWVmLFNBQVNFLHlDQUF5QztJQUNoRCxJQUFNQyxnQkFBZ0IsT0FBTyxLQUFLO0lBQ2xDLElBQUlDLGVBQTRCLElBQUk7SUFFcENDLDhCQUE4QixTQUFDM0QsUUFBUTRELGlCQUFvQjtRQUN6RCxJQUFNQywyQkFBMkIsQ0FBQ0gsZ0JBQWdCLElBQUlJLE9BQU9DLE9BQU8sS0FBS0wsYUFBYUssT0FBTyxLQUFLTjtRQUVsRyxJQUFJRyxtQkFBbUI1RCxVQUFVNkQsMEJBQTBCO1lBQ3pESCxlQUFlLElBQUlJO1lBQ25CekksdUdBQWtDQTtRQUNwQyxDQUFDO0lBQ0g7QUFDRjtBQUVBLFNBQVNzSSw4QkFBOEJLLEVBQXVELEVBQUU7SUFDOUYsSUFBSUMsV0FBVyxLQUFLO0lBQ3BCLElBQUlMLGtCQUFrQixLQUFLO0lBRTNCekksbUZBQWNBLENBQUM7UUFBRStJLG1CQUFtQixLQUFLO0lBQUMsR0FBR0MsU0FBUyxDQUFDLFNBQUNDLE1BQVM7UUFDL0RSLGtCQUFrQixDQUFDLENBQUNRO1FBQ3BCSixHQUFHQyxVQUFVTDtJQUNmO0lBRUExSSwwRkFBcUJBLENBQUMsZ0JBQWdCO1lBQWI4RSxlQUFBQTtRQUN2QmlFLFdBQVdqRTtRQUNYZ0UsR0FBR2hFLFFBQVE0RDtJQUNiO0FBQ0Y7U0FFZVM7V0FBQUE7O1NBQUFBO0lBQUFBLG9DQUFmLCtCQUFrRDtZQUsxQ0M7Ozs7b0JBSk47O3dCQUFNQzs7O29CQUFOO29CQUlNRCxpQkFBaUIsSUFBSUUsSUFBSSxHQUFzQixPQUFuQjNGLE9BQU80RixXQUFXLEVBQUMsd0JBQXNCNUYsT0FBT3NELFFBQVEsQ0FBQ3VDLE1BQU0sRUFBRUMsSUFBSTtvQkFFdkc7O3dCQUFNMUosNkZBQXdCQSxDQUFDOzRCQUM3QjJKLE1BQU07NEJBQ05DLEtBQUtQOzRCQUNMUSxVQUFVO3dCQUNaOzs7b0JBSkE7b0JBTUE7O3dCQUFNdEosaUZBQVlBLENBQUMsdUJBQXVCa0QsS0FBSyxDQUFDLFNBQUNyQjttQ0FDL0NPLFFBQVFnQixJQUFJLENBQ1YsZ0lBQ0F2Qjs7OztvQkFISjs7Ozs7O0lBTUY7V0FuQmVnSDs7U0FxQkFFO1dBQUFBOztTQUFBQTtJQUFBQSxxQkFBZiwrQkFBbUM7WUFDM0I1RDs7OztvQkFBWTs7d0JBQU05QixPQUFPa0csa0JBQWtCLENBQUNDLGlCQUFpQjs7O29CQUE3RHJFLFlBQVk7b0JBQ2xCOzt3QkFBTTFGLDZGQUF3QkEsQ0FBQzs0QkFDN0IySixNQUFNOzRCQUNOakUsV0FBQUE7d0JBQ0Y7OztvQkFIQTs7Ozs7O0lBSUY7V0FOZTREOztBQVFmLFNBQVNVLHlCQUF5QjtJQUNoQy9KLDBGQUFxQkEsQ0FBQyxnQkFBZ0I7WUFBYjhFLGVBQUFBO1FBQ3ZCLElBQU1nQyxPQUFPaEYsU0FBUytELGFBQWEsQ0FBQztRQUNwQyxJQUFJZixRQUFRO1lBQ1ZnQyxLQUFLa0QsU0FBUyxDQUFDQyxNQUFNLENBQUM7UUFDeEIsT0FBTztZQUNMbkQsS0FBS2tELFNBQVMsQ0FBQ0UsR0FBRyxDQUFDO1FBQ3JCLENBQUM7SUFDSDtBQUNGO0FBRU8sU0FBU0MsSUFBSS9DLFVBQXlCLEVBQUVnRCxPQUFnQixFQUFFO0lBQy9ELElBQU1DLGVBQWVyQztJQUNyQixJQUFNc0MsaUJBQWlCbkQsbUJBQW1CQztJQUUxQzVILHlGQUFvQkE7SUFDcEJxSTtJQUNBRTtJQUNBSjtJQUNBQztJQUNBRTtJQUNBcEksK0ZBQTBCQSxDQUFDVixpRkFBZ0JBO0lBQzNDVyx5R0FBb0NBLENBQUNWLDJGQUEwQkE7SUFDL0RXLHdGQUFtQkEsQ0FBQ1YsMEVBQVNBO0lBQzdCVywyRkFBc0JBLENBQUNWLDZFQUFZQTtJQUNuQ2tCLHdHQUFtQ0EsQ0FBQzhJO0lBQ3BDdEssbUZBQWNBO0lBQ2RvSjtJQUVBLE9BQU8zRyxZQUNKK0IsSUFBSSxDQUFDdkMsMkRBQXdCQSxFQUM3QnVDLElBQUksQ0FBQzBHLHdCQUNMMUcsSUFBSSxDQUFDaUgsZ0JBQ0xqSCxJQUFJLENBQUNnQyxVQUNMN0IsS0FBSyxDQUFDa0MsbUJBQ05yQyxJQUFJLENBQUNnSCxjQUNMaEgsSUFBSSxDQUFDK0csVUFBVWhDLGVBQWVoRyxTQUFTLEVBQ3ZDaUIsSUFBSSxDQUFDbUM7QUFDVixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9ydW4udHM/YmMyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdGFydCwgdHJpZ2dlckFwcENoYW5nZSB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHR5cGUgeyBPcGVubXJzQXBwUm91dGVzIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuaW1wb3J0IHtcbiAgc2V0dXBBcGlNb2R1bGUsXG4gIHJlbmRlckxvYWRpbmdTcGlubmVyLFxuICB0eXBlIENvbmZpZyxcbiAgcHJvdmlkZSxcbiAgc2hvd05vdGlmaWNhdGlvbixcbiAgc2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb24sXG4gIHNob3dUb2FzdCxcbiAgc2hvd1NuYWNrYmFyLFxuICByZW5kZXJJbmxpbmVOb3RpZmljYXRpb25zLFxuICByZW5kZXJBY3Rpb25hYmxlTm90aWZpY2F0aW9ucyxcbiAgcmVuZGVyVG9hc3RzLFxuICByZW5kZXJTbmFja2JhcnMsXG4gIGludGVncmF0ZUJyZWFrcG9pbnRzLFxuICBkaXNwYXRjaENvbm5lY3Rpdml0eUNoYW5nZWQsXG4gIHN1YnNjcmliZU5vdGlmaWNhdGlvblNob3duLFxuICBzdWJzY3JpYmVBY3Rpb25hYmxlTm90aWZpY2F0aW9uU2hvd24sXG4gIHN1YnNjcmliZVRvYXN0U2hvd24sXG4gIHN1YnNjcmliZVNuYWNrYmFyU2hvd24sXG4gIHJlZ2lzdGVyT21yc1NlcnZpY2VXb3JrZXIsXG4gIG1lc3NhZ2VPbXJzU2VydmljZVdvcmtlcixcbiAgc3Vic2NyaWJlQ29ubmVjdGl2aXR5LFxuICBnZXRDdXJyZW50VXNlcixcbiAgcmVuZGVyTW9kYWxzLFxuICBkaXNwYXRjaFByZWNhY2hlU3RhdGljRGVwZW5kZW5jaWVzLFxuICBhY3RpdmF0ZU9mZmxpbmVDYXBhYmlsaXR5LFxuICBzdWJzY3JpYmVQcmVjYWNoZVN0YXRpY0RlcGVuZGVuY2llcyxcbiAgb3Blbm1yc0ZldGNoLFxuICBpbnRlcnBvbGF0ZVVybCxcbiAgdHlwZSBPcGVubXJzUm91dGVzLFxuICBnZXRDdXJyZW50SW1wb3J0TWFwLFxuICBpbXBvcnREeW5hbWljLFxuICBjYW5BY2Nlc3NTdG9yYWdlLFxuICBsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgsXG4gIGlzT3Blbm1yc0FwcFJvdXRlcyxcbiAgaXNPcGVubXJzUm91dGVzLFxufSBmcm9tICdAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbCc7XG5pbXBvcnQgeyBmaW5pc2hSZWdpc3RlcmluZ0FsbEFwcHMsIHJlZ2lzdGVyQXBwLCB0cnlSZWdpc3RlckV4dGVuc2lvbiB9IGZyb20gJy4vYXBwcyc7XG5pbXBvcnQgeyBzZXR1cEkxOG4gfSBmcm9tICcuL2xvY2FsZSc7XG5pbXBvcnQgeyBhcHBOYW1lLCBnZXRDb3JlRXh0ZW5zaW9ucyB9IGZyb20gJy4vdWknO1xuXG4vLyBAaW50ZXJuYWxcbi8vIHVzZWQgdG8gdHJhY2sgd2hlbiB0aGUgd2luZG93Lmluc3RhbGxlZE1vZHVsZXMgZ2xvYmFsIGlzIGZpbmFsaXNlZFxuLy8gc28gd2UgY2FuIHByZS1sb2FkIGFsbCBtb2R1bGVzXG5jb25zdCBSRUdJU1RSQVRJT05fUFJPTUlTRVMgPSBTeW1ib2woJ29wZW5tcnNfcmVnaXN0cmF0aW9uX3Byb21pc2VzJyk7XG5cbi8qKlxuICogU2V0cyB1cCB0aGUgZnJvbnRlbmQgbW9kdWxlcyAoYXBwcykuIFVzZXMgdGhlIGRlZmluZWQgZXhwb3J0XG4gKiBmcm9tIHRoZSByb290IG1vZHVsZXMgb2YgdGhlIGFwcHMuIFRoaXMgaXMgZG9uZSBieSByZWFkaW5nIHRoZVxuICogbGlzdCBvZiBhcHBzIGZyb20gdGhlIHJvdXRlcy5yZWdpc3RyeS5qc29uIGZpbGUsIHdoaWNoIHNlcnZlc1xuICogYXMgdGhlIHJlZ2lzdHJ5IG9mIGFsbCBhcHBzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0dXBBcHBzKCkge1xuICBjb25zdCBzY3JpcHRUYWdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MU2NyaXB0RWxlbWVudD4oXCJzY3JpcHRbdHlwZT0nb3Blbm1ycy1yb3V0ZXMnXVwiKTtcblxuICBjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxPcGVubXJzUm91dGVzPj4gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY3JpcHRUYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIChhc3luYyAoc2NyaXB0VGFnKSA9PiB7XG4gICAgICAgIGxldCByb3V0ZXM6IE9wZW5tcnNSb3V0ZXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHNjcmlwdFRhZy50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgcm91dGVzID0gSlNPTi5wYXJzZShzY3JpcHRUYWcudGV4dENvbnRlbnQpIGFzIE9wZW5tcnNSb3V0ZXM7XG4gICAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRUYWcuc3JjKSB7XG4gICAgICAgICAgICByb3V0ZXMgPSAoYXdhaXQgb3Blbm1yc0ZldGNoPE9wZW5tcnNSb3V0ZXM+KHNjcmlwdFRhZy5zcmMpKS5kYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhdWdodCBlcnJvciB3aGlsZSBsb2FkaW5nIHJvdXRlcyBmcm9tICR7c2NyaXB0VGFnLnNyYyA/PyAnSlNPTiBzY3JpcHQgdGFnIGNvbnRlbnQnfWAsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyb3V0ZXMgPz8ge30pO1xuICAgICAgfSkoc2NyaXB0VGFncy5pdGVtKGkpKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGNhbkFjY2Vzc1N0b3JhZ2UoKSkge1xuICAgIC8vIGxvYWQgcm91dGVzIG92ZXJyaWRlcyBmcm9tIGxvY2FsU3RvcmFnZSBpZiBhbnlcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuICAgICAgaWYgKGtleT8uc3RhcnRzV2l0aChsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsT3ZlcnJpZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICBpZiAobG9jYWxPdmVycmlkZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZU9wZW5tcnNSb3V0ZXMgPSBKU09OLnBhcnNlKGxvY2FsT3ZlcnJpZGUpO1xuICAgICAgICAgICAgaWYgKGlzT3Blbm1yc0FwcFJvdXRlcyhtYXliZU9wZW5tcnNSb3V0ZXMpKSB7XG4gICAgICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlPE9wZW5tcnNSb3V0ZXM+KHtcbiAgICAgICAgICAgICAgICAgIFtrZXkuc2xpY2UobG9jYWxTdG9yYWdlUm91dGVzUHJlZml4Lmxlbmd0aCldOiBtYXliZU9wZW5tcnNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXliZU9wZW5tcnNSb3V0ZXMgPT09ICdzdHJpbmcnICYmIG1heWJlT3Blbm1yc1JvdXRlcy5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICBvcGVubXJzRmV0Y2g8T3Blbm1yc0FwcFJvdXRlcz4obWF5YmVPcGVubXJzUm91dGVzKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09wZW5tcnNBcHBSb3V0ZXMocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZXkuc2xpY2UobG9jYWxTdG9yYWdlUm91dGVzUHJlZml4Lmxlbmd0aCldOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgIGAke21heWJlT3Blbm1yc1JvdXRlc30gZGlkIG5vdCByZXNvbHZlIHRvIGEgdmFsaWQgT3Blbm1yc0FwcFJvdXRlcyBKU09OIG9iamVjdGAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChyZWFzb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggcm91dGUgb3ZlcnJpZGVzIGZvciAke2tleS5zbGljZShsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgubGVuZ3RoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCBmYWlsIHRoZSBwcm9taXNlXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBSb3V0ZSBvdmVycmlkZSBmb3IgJHtrZXkuc2xpY2UoXG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICl9IGNvdWxkIG5vdCBiZSBoYW5kbGVkIGFzIGl0IHdhcyBuZWl0aGVyIGEgSlNPTiBvYmplY3Qgbm9yIGEgVVJMIHN0cmluZ2AsXG4gICAgICAgICAgICAgICAgbG9jYWxPdmVycmlkZSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBwYXJzaW5nIGxvY2FsIHJvdXRlIG92ZXJyaWRlIGZvciAke2tleX1gLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByb3V0ZXM6IE9wZW5tcnNSb3V0ZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKSlcbiAgICAuZmlsdGVyKChwKSA9PiBwLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpXG4gICAgLm1hcCgocCkgPT4gKHAgYXMgUHJvbWlzZUZ1bGZpbGxlZFJlc3VsdDxPcGVubXJzUm91dGVzPikudmFsdWUpXG4gICAgLmZpbHRlcihpc09wZW5tcnNSb3V0ZXMpXG4gICAgLnJlZHVjZShcbiAgICAgIChhY2N1bXVsYXRlZFJvdXRlcywgcm91dGVzKSA9PiAoe1xuICAgICAgICAuLi5hY2N1bXVsYXRlZFJvdXRlcyxcbiAgICAgICAgLi4ucm91dGVzLFxuICAgICAgfSksXG4gICAgICB7fSxcbiAgICApO1xuXG4gIGNvbnN0IG1vZHVsZXM6IHR5cGVvZiB3aW5kb3cuaW5zdGFsbGVkTW9kdWxlcyA9IFtdO1xuICBjb25zdCByZWdpc3RyYXRpb25Qcm9taXNlcyA9IE9iamVjdC5lbnRyaWVzKHJvdXRlcykubWFwKGFzeW5jIChbbW9kdWxlLCByb3V0ZXNdKSA9PiB7XG4gICAgbW9kdWxlcy5wdXNoKFttb2R1bGUsIHJvdXRlc10pO1xuICAgIHJlZ2lzdGVyQXBwKG1vZHVsZSwgcm91dGVzKTtcbiAgfSk7XG5cbiAgd2luZG93W1JFR0lTVFJBVElPTl9QUk9NSVNFU10gPSBQcm9taXNlLmFsbChyZWdpc3RyYXRpb25Qcm9taXNlcyk7XG4gIHdpbmRvdy5pbnN0YWxsZWRNb2R1bGVzID0gbW9kdWxlcztcbn1cblxuLyoqXG4gKiBMb2FkcyB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbnMgYW5kIHNldHMgdGhlbSBpbiB0aGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlncyhjb25maWdzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IENvbmZpZyB9Pikge1xuICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgcHJvdmlkZShjb25maWcudmFsdWUsIGNvbmZpZy5uYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZWQgd2hlbiB0aGUgY29ubmVjdGl2aXR5IGlzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbm5lY3Rpdml0eUNoYW5nZWQoKSB7XG4gIGNvbnN0IG9ubGluZSA9IG5hdmlnYXRvci5vbkxpbmU7XG4gIC8vIE5CIFdlIGRvIG5vdCB3YWl0IGZvciB0aGlzIHRvIGJlIGRvbmU7IGl0IGlzIHNpbXBseSBzY2hlZHVsZWRcbiAgdHJpZ2dlckFwcENoYW5nZSgpO1xuXG4gIGRpc3BhdGNoQ29ubmVjdGl2aXR5Q2hhbmdlZChvbmxpbmUpO1xuICBzaG93VG9hc3Qoe1xuICAgIGNyaXRpY2FsOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOiBgQ29ubmVjdGlvbjogJHtvbmxpbmUgPyAnb25saW5lJyA6ICdvZmZsaW5lJ31gLFxuICAgIHRpdGxlOiAnQXBwJyxcbiAgICBraW5kOiBvbmxpbmUgPyAnc3VjY2VzcycgOiAnd2FybmluZycsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHNoZWxsIGJ5IGltcG9ydGluZyB0aGUgdHJhbnNsYXRpb25zIGFuZCBzdGFydGluZyBzaW5nbGUgU1BBLlxuICovXG5mdW5jdGlvbiBydW5TaGVsbCgpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBjb25uZWN0aXZpdHlDaGFuZ2VkKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGNvbm5lY3Rpdml0eUNoYW5nZWQpO1xuICByZXR1cm4gc2V0dXBJMThuKClcbiAgICAuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgdHJhbnNsYXRpb25zYCwgZXJyKSlcbiAgICAudGhlbigoKSA9PiBzdGFydCgpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlbG9hZFNjcmlwdHMoKSB7XG4gIGNvbnN0IFssIGltcG9ydE1hcF0gPSBhd2FpdCBQcm9taXNlLmFsbChbd2luZG93W1JFR0lTVFJBVElPTl9QUk9NSVNFU10sIGdldEN1cnJlbnRJbXBvcnRNYXAoKV0pO1xuXG4gIHdpbmRvdy5pbnN0YWxsZWRNb2R1bGVzLm1hcChhc3luYyAoW21vZHVsZV0pID0+IHtcbiAgICAvLyB3ZSBzaW1wbHkgc3dhbGxvdyB0aGUgZXJyb3IgaGVyZSBzaW5jZSB0aGlzIGlzIG9ubHkgYSBwcmVsb2FkXG4gICAgaW1wb3J0RHluYW1pYyhtb2R1bGUsIHVuZGVmaW5lZCwgeyBpbXBvcnRNYXAgfSkuY2F0Y2goKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUluaXRGYWlsdXJlKGU6IEVycm9yKSB7XG4gIGNvbnNvbGUuZXJyb3IoZSk7XG4gIHJlbmRlckZhdGFsRXJyb3JQYWdlKGUpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGYXRhbEVycm9yUGFnZShlPzogRXJyb3IpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxUZW1wbGF0ZUVsZW1lbnQ+KCcjYXBwLWVycm9yJyk7XG5cbiAgaWYgKHRlbXBsYXRlKSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKSBhcyBEb2N1bWVudEZyYWdtZW50O1xuICAgIGNvbnN0IG1lc3NhZ2VDb250YWluZXIgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS12YXI9XCJtZXNzYWdlXCJdJyk7XG5cbiAgICBpZiAobWVzc2FnZUNvbnRhaW5lcikge1xuICAgICAgbWVzc2FnZUNvbnRhaW5lci50ZXh0Q29udGVudCA9IGU/Lm1lc3NhZ2UgfHwgJ05vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYXZhaWxhYmxlLic7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29wZW5tcnM6ZGV2dG9vbHMnKSAmJlxuICAgICAgT2JqZWN0LmtleXMobG9jYWxTdG9yYWdlKS5zb21lKChrKSA9PiBrLnN0YXJ0c1dpdGgoJ2ltcG9ydC1tYXAtb3ZlcnJpZGU6JykpXG4gICAgKSB7XG4gICAgICBjb25zdCBhcHBFcnJvckFjdGlvbkJ1dHRvbnMgPSBmcmFnbWVudD8ucXVlcnlTZWxlY3RvcignI2J1dHRvbnMnKTtcbiAgICAgIGlmIChhcHBFcnJvckFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgICAgY29uc3QgY2xlYXJEZXZPdmVycmlkZXNCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgY2xlYXJEZXZPdmVycmlkZXNCdXR0b24uY2xhc3NOYW1lID0gJ2Nkcy0tYnRuJztcbiAgICAgICAgY2xlYXJEZXZPdmVycmlkZXNCdXR0b24uaW5uZXJIVE1MID0gJ0NsZWFyIGRldiBvdmVycmlkZXMnO1xuICAgICAgICBjbGVhckRldk92ZXJyaWRlc0J1dHRvbi5vbmNsaWNrID0gY2xlYXJEZXZPdmVycmlkZXM7XG4gICAgICAgIGFwcEVycm9yQWN0aW9uQnV0dG9ucy5hcHBlbmRDaGlsZChjbGVhckRldk92ZXJyaWRlc0J1dHRvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJEZXZPdmVycmlkZXMoKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSkpIHtcbiAgICBpZiAoXG4gICAgICBrZXkuc3RhcnRzV2l0aCgnaW1wb3J0LW1hcC1vdmVycmlkZTonKSAmJlxuICAgICAgIVsnaW1wb3J0LW1hcC1vdmVycmlkZTpyZWFjdCcsICdpbXBvcnQtbWFwLW92ZXJyaWRlOnJlYWN0LWRvbSddLmluY2x1ZGVzKGtleSlcbiAgICApIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxuICB9XG4gIGxvY2F0aW9uLnJlbG9hZCgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb25maWdMb2FkZXIoY29uZmlnVXJsczogQXJyYXk8c3RyaW5nPikge1xuICBjb25zdCBsb2FkaW5nQ29uZmlncyA9IFByb21pc2UuYWxsKFxuICAgIGNvbmZpZ1VybHMubWFwKChjb25maWdVcmwpID0+IHtcbiAgICAgIGNvbnN0IGludGVycG9sYXRlZFVybCA9IGludGVycG9sYXRlVXJsKGNvbmZpZ1VybCk7XG4gICAgICByZXR1cm4gZmV0Y2goaW50ZXJwb2xhdGVkVXJsKVxuICAgICAgICAudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuICAgICAgICAudGhlbigoY29uZmlnKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGNvbmZpZ1VybCxcbiAgICAgICAgICB2YWx1ZTogY29uZmlnLFxuICAgICAgICB9KSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBMb2FkaW5nIHRoZSBjb25maWcgZnJvbSBcIiR7Y29uZmlnVXJsfVwiIGZhaWxlZC5gLCBlcnIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBjb25maWdVcmwsXG4gICAgICAgICAgICB2YWx1ZToge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSksXG4gICk7XG4gIHJldHVybiAoKSA9PiBsb2FkaW5nQ29uZmlncy50aGVuKGxvYWRDb25maWdzKTtcbn1cblxuZnVuY3Rpb24gc2hvd05vdGlmaWNhdGlvbnMoKSB7XG4gIHJlbmRlcklubGluZU5vdGlmaWNhdGlvbnMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9tcnMtaW5saW5lLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyJykpO1xuICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIHNob3dBY3Rpb25hYmxlTm90aWZpY2F0aW9ucygpIHtcbiAgcmVuZGVyQWN0aW9uYWJsZU5vdGlmaWNhdGlvbnMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9tcnMtYWN0aW9uYWJsZS1ub3RpZmljYXRpb25zLWNvbnRhaW5lcicpKTtcbn1cblxuZnVuY3Rpb24gc2hvd1RvYXN0cygpIHtcbiAgcmVuZGVyVG9hc3RzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbXJzLXRvYXN0cy1jb250YWluZXInKSk7XG59XG5cbmZ1bmN0aW9uIHNob3dTbmFja2JhcnMoKSB7XG4gIHJlbmRlclNuYWNrYmFycyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub21ycy1zbmFja2JhcnMtY29udGFpbmVyJykpO1xufVxuXG5mdW5jdGlvbiBzaG93TW9kYWxzKCkge1xuICByZW5kZXJNb2RhbHMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9tcnMtbW9kYWxzLWNvbnRhaW5lcicpKTtcbn1cblxuZnVuY3Rpb24gc2hvd0xvYWRpbmdTcGlubmVyKCkge1xuICByZXR1cm4gcmVuZGVyTG9hZGluZ1NwaW5uZXIoZG9jdW1lbnQuYm9keSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBleHRlbnNpb25zIGNvbWluZyBmcm9tIHRoZSBhcHAgc2hlbGwgaXRzZWxmLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckNvcmVFeHRlbnNpb25zKCkge1xuICBjb25zdCBleHRlbnNpb25zID0gZ2V0Q29yZUV4dGVuc2lvbnMoKTtcbiAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgZXh0ZW5zaW9ucykge1xuICAgIHRyeVJlZ2lzdGVyRXh0ZW5zaW9uKGFwcE5hbWUsIGV4dGVuc2lvbik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBPZmZsaW5lKCkge1xuICB0cnkge1xuICAgIGF3YWl0IHJlZ2lzdGVyT21yc1NlcnZpY2VXb3JrZXIoYCR7d2luZG93LmdldE9wZW5tcnNTcGFCYXNlKCl9c2VydmljZS13b3JrZXIuanNgKTtcbiAgICBhd2FpdCBhY3RpdmF0ZU9mZmxpbmVDYXBhYmlsaXR5KCk7XG4gICAgc2V0dXBPZmZsaW5lU3RhdGljRGVwZW5kZW5jeVByZWNhY2hpbmcoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIHVwIG9mZmxpbmUgbW9kZS4nLCBlcnJvcik7XG4gICAgc2hvd05vdGlmaWNhdGlvbih7XG4gICAgICBraW5kOiAnZXJyb3InLFxuICAgICAgdGl0bGU6ICdPZmZsaW5lIFNldHVwIEVycm9yJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwT2ZmbGluZVN0YXRpY0RlcGVuZGVuY3lQcmVjYWNoaW5nKCkge1xuICBjb25zdCBwcmVjYWNoZURlbGF5ID0gMTAwMCAqIDYwICogNTtcbiAgbGV0IGxhc3RQcmVjYWNoZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHN1YnNjcmliZU9ubGluZUFuZExvZ2luQ2hhbmdlKChvbmxpbmUsIGhhc0xvZ2dlZEluVXNlcikgPT4ge1xuICAgIGNvbnN0IGhhc0V4Y2VlZGVkUHJlY2FjaGVEZWxheSA9ICFsYXN0UHJlY2FjaGUgfHwgbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsYXN0UHJlY2FjaGUuZ2V0VGltZSgpID4gcHJlY2FjaGVEZWxheTtcblxuICAgIGlmIChoYXNMb2dnZWRJblVzZXIgJiYgb25saW5lICYmIGhhc0V4Y2VlZGVkUHJlY2FjaGVEZWxheSkge1xuICAgICAgbGFzdFByZWNhY2hlID0gbmV3IERhdGUoKTtcbiAgICAgIGRpc3BhdGNoUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMoKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmVPbmxpbmVBbmRMb2dpbkNoYW5nZShjYjogKG9ubGluZTogYm9vbGVhbiwgaGFzTG9nZ2VkSW5Vc2VyOiBib29sZWFuKSA9PiB2b2lkKSB7XG4gIGxldCBpc09ubGluZSA9IGZhbHNlO1xuICBsZXQgaGFzTG9nZ2VkSW5Vc2VyID0gZmFsc2U7XG5cbiAgZ2V0Q3VycmVudFVzZXIoeyBpbmNsdWRlQXV0aFN0YXR1czogZmFsc2UgfSkuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XG4gICAgaGFzTG9nZ2VkSW5Vc2VyID0gISF1c2VyO1xuICAgIGNiKGlzT25saW5lLCBoYXNMb2dnZWRJblVzZXIpO1xuICB9KTtcblxuICBzdWJzY3JpYmVDb25uZWN0aXZpdHkoKHsgb25saW5lIH0pID0+IHtcbiAgICBpc09ubGluZSA9IG9ubGluZTtcbiAgICBjYihvbmxpbmUsIGhhc0xvZ2dlZEluVXNlcik7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVjYWNoZUdsb2JhbFN0YXRpY0RlcGVuZGVuY2llcygpIHtcbiAgYXdhaXQgcHJlY2FjaGVJbXBvcnRNYXAoKTtcblxuICAvLyBCeSBkZWZhdWx0LCBjYWNoZSB0aGUgc2Vzc2lvbiBlbmRwb2ludC5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgYSBsb3Qgb2YgdXNlci9zZXNzaW9uIHJlbGF0ZWQgZnVuY3Rpb25zIGFsc28gd29yayBvZmZsaW5lLlxuICBjb25zdCBzZXNzaW9uUGF0aFVybCA9IG5ldyBVUkwoYCR7d2luZG93Lm9wZW5tcnNCYXNlfS93cy9yZXN0L3YxL3Nlc3Npb25gLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKS5ocmVmO1xuXG4gIGF3YWl0IG1lc3NhZ2VPbXJzU2VydmljZVdvcmtlcih7XG4gICAgdHlwZTogJ3JlZ2lzdGVyRHluYW1pY1JvdXRlJyxcbiAgICB1cmw6IHNlc3Npb25QYXRoVXJsLFxuICAgIHN0cmF0ZWd5OiAnbmV0d29yay1maXJzdCcsXG4gIH0pO1xuXG4gIGF3YWl0IG9wZW5tcnNGZXRjaCgnL3dzL3Jlc3QvdjEvc2Vzc2lvbicpLmNhdGNoKChlKSA9PlxuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdGYWlsZWQgdG8gcHJlY2FjaGUgdGhlIHVzZXIgc2Vzc2lvbiBkYXRhIGZyb20gdGhlIGFwcCBzaGVsbC4gTUZzIGRlcGVuZGluZyBvbiB0aGlzIGRhdGEgbWF5IHJ1biBpbnRvIHByb2JsZW1zIHdoaWxlIG9mZmxpbmUuJyxcbiAgICAgIGUsXG4gICAgKSxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlY2FjaGVJbXBvcnRNYXAoKSB7XG4gIGNvbnN0IGltcG9ydE1hcCA9IGF3YWl0IHdpbmRvdy5pbXBvcnRNYXBPdmVycmlkZXMuZ2V0Q3VycmVudFBhZ2VNYXAoKTtcbiAgYXdhaXQgbWVzc2FnZU9tcnNTZXJ2aWNlV29ya2VyKHtcbiAgICB0eXBlOiAnb25JbXBvcnRNYXBDaGFuZ2VkJyxcbiAgICBpbXBvcnRNYXAsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXR1cE9mZmxpbmVDc3NDbGFzc2VzKCkge1xuICBzdWJzY3JpYmVDb25uZWN0aXZpdHkoKHsgb25saW5lIH0pID0+IHtcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpITtcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ29tcnMtb2ZmbGluZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5LmNsYXNzTGlzdC5hZGQoJ29tcnMtb2ZmbGluZScpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW4oY29uZmlnVXJsczogQXJyYXk8c3RyaW5nPiwgb2ZmbGluZTogYm9vbGVhbikge1xuICBjb25zdCBjbG9zZUxvYWRpbmcgPSBzaG93TG9hZGluZ1NwaW5uZXIoKTtcbiAgY29uc3QgcHJvdmlkZUNvbmZpZ3MgPSBjcmVhdGVDb25maWdMb2FkZXIoY29uZmlnVXJscyk7XG5cbiAgaW50ZWdyYXRlQnJlYWtwb2ludHMoKTtcbiAgc2hvd1RvYXN0cygpO1xuICBzaG93TW9kYWxzKCk7XG4gIHNob3dOb3RpZmljYXRpb25zKCk7XG4gIHNob3dBY3Rpb25hYmxlTm90aWZpY2F0aW9ucygpO1xuICBzaG93U25hY2tiYXJzKCk7XG4gIHN1YnNjcmliZU5vdGlmaWNhdGlvblNob3duKHNob3dOb3RpZmljYXRpb24pO1xuICBzdWJzY3JpYmVBY3Rpb25hYmxlTm90aWZpY2F0aW9uU2hvd24oc2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb24pO1xuICBzdWJzY3JpYmVUb2FzdFNob3duKHNob3dUb2FzdCk7XG4gIHN1YnNjcmliZVNuYWNrYmFyU2hvd24oc2hvd1NuYWNrYmFyKTtcbiAgc3Vic2NyaWJlUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMocHJlY2FjaGVHbG9iYWxTdGF0aWNEZXBlbmRlbmNpZXMpO1xuICBzZXR1cEFwaU1vZHVsZSgpO1xuICByZWdpc3RlckNvcmVFeHRlbnNpb25zKCk7XG5cbiAgcmV0dXJuIHNldHVwQXBwcygpXG4gICAgLnRoZW4oZmluaXNoUmVnaXN0ZXJpbmdBbGxBcHBzKVxuICAgIC50aGVuKHNldHVwT2ZmbGluZUNzc0NsYXNzZXMpXG4gICAgLnRoZW4ocHJvdmlkZUNvbmZpZ3MpXG4gICAgLnRoZW4ocnVuU2hlbGwpXG4gICAgLmNhdGNoKGhhbmRsZUluaXRGYWlsdXJlKVxuICAgIC50aGVuKGNsb3NlTG9hZGluZylcbiAgICAudGhlbihvZmZsaW5lID8gc2V0dXBPZmZsaW5lIDogdW5kZWZpbmVkKVxuICAgIC50aGVuKHByZWxvYWRTY3JpcHRzKTtcbn1cbiJdLCJuYW1lcyI6WyJzdGFydCIsInRyaWdnZXJBcHBDaGFuZ2UiLCJzZXR1cEFwaU1vZHVsZSIsInJlbmRlckxvYWRpbmdTcGlubmVyIiwicHJvdmlkZSIsInNob3dOb3RpZmljYXRpb24iLCJzaG93QWN0aW9uYWJsZU5vdGlmaWNhdGlvbiIsInNob3dUb2FzdCIsInNob3dTbmFja2JhciIsInJlbmRlcklubGluZU5vdGlmaWNhdGlvbnMiLCJyZW5kZXJBY3Rpb25hYmxlTm90aWZpY2F0aW9ucyIsInJlbmRlclRvYXN0cyIsInJlbmRlclNuYWNrYmFycyIsImludGVncmF0ZUJyZWFrcG9pbnRzIiwiZGlzcGF0Y2hDb25uZWN0aXZpdHlDaGFuZ2VkIiwic3Vic2NyaWJlTm90aWZpY2F0aW9uU2hvd24iLCJzdWJzY3JpYmVBY3Rpb25hYmxlTm90aWZpY2F0aW9uU2hvd24iLCJzdWJzY3JpYmVUb2FzdFNob3duIiwic3Vic2NyaWJlU25hY2tiYXJTaG93biIsInJlZ2lzdGVyT21yc1NlcnZpY2VXb3JrZXIiLCJtZXNzYWdlT21yc1NlcnZpY2VXb3JrZXIiLCJzdWJzY3JpYmVDb25uZWN0aXZpdHkiLCJnZXRDdXJyZW50VXNlciIsInJlbmRlck1vZGFscyIsImRpc3BhdGNoUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMiLCJhY3RpdmF0ZU9mZmxpbmVDYXBhYmlsaXR5Iiwic3Vic2NyaWJlUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMiLCJvcGVubXJzRmV0Y2giLCJpbnRlcnBvbGF0ZVVybCIsImdldEN1cnJlbnRJbXBvcnRNYXAiLCJpbXBvcnREeW5hbWljIiwiY2FuQWNjZXNzU3RvcmFnZSIsImxvY2FsU3RvcmFnZVJvdXRlc1ByZWZpeCIsImlzT3Blbm1yc0FwcFJvdXRlcyIsImlzT3Blbm1yc1JvdXRlcyIsImZpbmlzaFJlZ2lzdGVyaW5nQWxsQXBwcyIsInJlZ2lzdGVyQXBwIiwidHJ5UmVnaXN0ZXJFeHRlbnNpb24iLCJzZXR1cEkxOG4iLCJhcHBOYW1lIiwiZ2V0Q29yZUV4dGVuc2lvbnMiLCJSRUdJU1RSQVRJT05fUFJPTUlTRVMiLCJTeW1ib2wiLCJzZXR1cEFwcHMiLCJzY3JpcHRUYWdzIiwicHJvbWlzZXMiLCJpIiwibG9jYWxTdG9yYWdlIiwicm91dGVzIiwibW9kdWxlcyIsInJlZ2lzdHJhdGlvblByb21pc2VzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicHVzaCIsInNjcmlwdFRhZyIsImUiLCJ1bmRlZmluZWQiLCJ0ZXh0Q29udGVudCIsIkpTT04iLCJwYXJzZSIsInNyYyIsImRhdGEiLCJjb25zb2xlIiwiZXJyb3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsIml0ZW0iLCJrZXkiLCJzdGFydHNXaXRoIiwibG9jYWxPdmVycmlkZSIsImdldEl0ZW0iLCJtYXliZU9wZW5tcnNSb3V0ZXMiLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsInJlamVjdCIsImNhdGNoIiwicmVhc29uIiwid2FybiIsIndpbmRvdyIsImFsbFNldHRsZWQiLCJmaWx0ZXIiLCJwIiwic3RhdHVzIiwibWFwIiwidmFsdWUiLCJyZWR1Y2UiLCJhY2N1bXVsYXRlZFJvdXRlcyIsIk9iamVjdCIsImVudHJpZXMiLCJtb2R1bGUiLCJhbGwiLCJpbnN0YWxsZWRNb2R1bGVzIiwibG9hZENvbmZpZ3MiLCJjb25maWdzIiwiY29uZmlnIiwibmFtZSIsImNvbm5lY3Rpdml0eUNoYW5nZWQiLCJvbmxpbmUiLCJuYXZpZ2F0b3IiLCJvbkxpbmUiLCJjcml0aWNhbCIsImRlc2NyaXB0aW9uIiwidGl0bGUiLCJraW5kIiwicnVuU2hlbGwiLCJhZGRFdmVudExpc3RlbmVyIiwiZXJyIiwicHJlbG9hZFNjcmlwdHMiLCJpbXBvcnRNYXAiLCJoYW5kbGVJbml0RmFpbHVyZSIsInJlbmRlckZhdGFsRXJyb3JQYWdlIiwidGVtcGxhdGUiLCJxdWVyeVNlbGVjdG9yIiwiZnJhZ21lbnQiLCJjb250ZW50IiwiY2xvbmVOb2RlIiwibWVzc2FnZUNvbnRhaW5lciIsIm1lc3NhZ2UiLCJrZXlzIiwic29tZSIsImsiLCJhcHBFcnJvckFjdGlvbkJ1dHRvbnMiLCJjbGVhckRldk92ZXJyaWRlc0J1dHRvbiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbm5lckhUTUwiLCJvbmNsaWNrIiwiY2xlYXJEZXZPdmVycmlkZXMiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJpbmNsdWRlcyIsInJlbW92ZUl0ZW0iLCJsb2NhdGlvbiIsInJlbG9hZCIsImNyZWF0ZUNvbmZpZ0xvYWRlciIsImNvbmZpZ1VybHMiLCJsb2FkaW5nQ29uZmlncyIsImNvbmZpZ1VybCIsImludGVycG9sYXRlZFVybCIsImZldGNoIiwicmVzIiwianNvbiIsInNob3dOb3RpZmljYXRpb25zIiwic2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb25zIiwic2hvd1RvYXN0cyIsInNob3dTbmFja2JhcnMiLCJzaG93TW9kYWxzIiwic2hvd0xvYWRpbmdTcGlubmVyIiwicmVnaXN0ZXJDb3JlRXh0ZW5zaW9ucyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzZXR1cE9mZmxpbmUiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwT2ZmbGluZVN0YXRpY0RlcGVuZGVuY3lQcmVjYWNoaW5nIiwicHJlY2FjaGVEZWxheSIsImxhc3RQcmVjYWNoZSIsInN1YnNjcmliZU9ubGluZUFuZExvZ2luQ2hhbmdlIiwiaGFzTG9nZ2VkSW5Vc2VyIiwiaGFzRXhjZWVkZWRQcmVjYWNoZURlbGF5IiwiRGF0ZSIsImdldFRpbWUiLCJjYiIsImlzT25saW5lIiwiaW5jbHVkZUF1dGhTdGF0dXMiLCJzdWJzY3JpYmUiLCJ1c2VyIiwicHJlY2FjaGVHbG9iYWxTdGF0aWNEZXBlbmRlbmNpZXMiLCJzZXNzaW9uUGF0aFVybCIsInByZWNhY2hlSW1wb3J0TWFwIiwiVVJMIiwib3Blbm1yc0Jhc2UiLCJvcmlnaW4iLCJocmVmIiwidHlwZSIsInVybCIsInN0cmF0ZWd5IiwiaW1wb3J0TWFwT3ZlcnJpZGVzIiwiZ2V0Q3VycmVudFBhZ2VNYXAiLCJzZXR1cE9mZmxpbmVDc3NDbGFzc2VzIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYWRkIiwicnVuIiwib2ZmbGluZSIsImNsb3NlTG9hZGluZyIsInByb3ZpZGVDb25maWdzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/run.ts\n");
48
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! single-spa */ \"webpack/sharing/consume/default/single-spa/single-spa\");\n/* harmony import */ var single_spa__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(single_spa__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-framework/src/internal */ \"webpack/sharing/consume/default/@openmrs/esm-framework/src/internal/@openmrs/esm-framework/src/internal\");\n/* harmony import */ var _openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _apps__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./apps */ \"./src/apps.ts\");\n/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./locale */ \"./src/locale.ts\");\n/* harmony import */ var _ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui */ \"./src/ui/index.ts\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return(g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g);\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\n\n\n// @internal\n// used to track when the window.installedModules global is finalised\n// so we can pre-load all modules\nvar REGISTRATION_PROMISES = Symbol(\"openmrs_registration_promises\");\nfunction setupApps() {\n return _setupApps.apply(this, arguments);\n}\nfunction _setupApps() {\n _setupApps = /**\n * Sets up the frontend modules (apps). Uses the defined export\n * from the root modules of the apps. This is done by reading the\n * list of apps from the routes.registry.json file, which serves\n * as the registry of all apps in the application.\n */ _async_to_generator(function() {\n var scriptTags, promises, i, _loop, localStorage1, i1, routes, modules, registrationPromises;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n scriptTags = document.querySelectorAll(\"script[type='openmrs-routes']\");\n promises = [];\n for(i = 0; i < scriptTags.length; i++){\n promises.push((function() {\n var _ref = _async_to_generator(function(scriptTag) {\n var routes, e, _scriptTag_src;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n routes = undefined;\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 5,\n ,\n 6\n ]);\n if (!scriptTag.textContent) return [\n 3,\n 2\n ];\n routes = JSON.parse(scriptTag.textContent);\n return [\n 3,\n 4\n ];\n case 2:\n if (!scriptTag.src) return [\n 3,\n 4\n ];\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(scriptTag.src)\n ];\n case 3:\n routes = _state.sent().data;\n _state.label = 4;\n case 4:\n return [\n 3,\n 6\n ];\n case 5:\n e = _state.sent();\n console.error(\"Caught error while loading routes from \".concat((_scriptTag_src = scriptTag.src) !== null && _scriptTag_src !== void 0 ? _scriptTag_src : \"JSON script tag content\"), e);\n return [\n 2,\n {}\n ];\n case 6:\n return [\n 2,\n Promise.resolve(routes !== null && routes !== void 0 ? routes : {})\n ];\n }\n });\n });\n return function(scriptTag) {\n return _ref.apply(this, arguments);\n };\n })()(scriptTags.item(i)));\n }\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.canAccessStorage)()) {\n _loop = function(i1) {\n var key = localStorage1.key(i1);\n if (key === null || key === void 0 ? void 0 : key.startsWith(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix)) {\n var localOverride = localStorage1.getItem(key);\n if (localOverride) {\n try {\n var maybeOpenmrsRoutes = JSON.parse(localOverride);\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsAppRoutes)(maybeOpenmrsRoutes)) {\n promises.push(Promise.resolve(_define_property({}, key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), maybeOpenmrsRoutes)));\n } else if (typeof maybeOpenmrsRoutes === \"string\" && maybeOpenmrsRoutes.startsWith(\"http\")) {\n promises.push((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(maybeOpenmrsRoutes).then(function(response) {\n if ((0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsAppRoutes)(response.data)) {\n return Promise.resolve(_define_property({}, key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), response.data));\n }\n return Promise.reject(\"\".concat(maybeOpenmrsRoutes, \" did not resolve to a valid OpenmrsAppRoutes JSON object\"));\n }).catch(function(reason) {\n console.warn(\"Failed to fetch route overrides for \".concat(key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length)), reason);\n // still fail the promise\n throw reason;\n }));\n } else {\n console.warn(\"Route override for \".concat(key.slice(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.localStorageRoutesPrefix.length), \" could not be handled as it was neither a JSON object nor a URL string\"), localOverride);\n }\n } catch (e) {\n console.error(\"Error parsing local route override for \".concat(key), e);\n }\n }\n }\n };\n localStorage1 = window.localStorage;\n for(i1 = 0; i1 < localStorage1.length; i1++)_loop(i1);\n }\n return [\n 4,\n Promise.allSettled(promises)\n ];\n case 1:\n routes = _state.sent().filter(function(p) {\n return p.status === \"fulfilled\";\n }).map(function(p) {\n return p.value;\n }).filter(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.isOpenmrsRoutes).reduce(function(accumulatedRoutes, routes) {\n return _object_spread({}, accumulatedRoutes, routes);\n }, {});\n modules = [];\n registrationPromises = Object.entries(routes).map(function() {\n var _ref = _async_to_generator(function(param) {\n var _param, module, routes;\n return _ts_generator(this, function(_state) {\n _param = _sliced_to_array(param, 2), module = _param[0], routes = _param[1];\n modules.push([\n module,\n routes\n ]);\n (0,_apps__WEBPACK_IMPORTED_MODULE_2__.registerApp)(module, routes);\n return [\n 2\n ];\n });\n });\n return function(_) {\n return _ref.apply(this, arguments);\n };\n }());\n window[REGISTRATION_PROMISES] = Promise.all(registrationPromises);\n window.installedModules = modules;\n return [\n 2\n ];\n }\n });\n });\n return _setupApps.apply(this, arguments);\n}\nfunction loadConfigs(configs) {\n return _loadConfigs.apply(this, arguments);\n}\nfunction _loadConfigs() {\n _loadConfigs = /**\n * Loads the provided configurations and sets them in the system.\n */ _async_to_generator(function(configs) {\n var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, config;\n return _ts_generator(this, function(_state) {\n _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(_iterator = configs[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n config = _step.value;\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.provide)(config.value, config.name);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n return [\n 2\n ];\n });\n });\n return _loadConfigs.apply(this, arguments);\n}\n/**\n * Invoked when the connectivity is changed.\n */ function connectivityChanged() {\n var online = navigator.onLine;\n // NB We do not wait for this to be done; it is simply scheduled\n (0,single_spa__WEBPACK_IMPORTED_MODULE_0__.triggerAppChange)();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.dispatchConnectivityChanged)(online);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showToast)({\n critical: true,\n description: \"Connection: \".concat(online ? \"online\" : \"offline\"),\n title: \"App\",\n kind: online ? \"success\" : \"warning\"\n });\n}\n/**\n * Runs the shell by importing the translations and starting single SPA.\n */ function runShell() {\n window.addEventListener(\"offline\", connectivityChanged);\n window.addEventListener(\"online\", connectivityChanged);\n return (0,_locale__WEBPACK_IMPORTED_MODULE_3__.setupI18n)().catch(function(err) {\n return console.error(\"Failed to initialize translations\", err);\n }).then(function() {\n return (0,single_spa__WEBPACK_IMPORTED_MODULE_0__.start)();\n });\n}\nfunction preloadScripts() {\n return _preloadScripts.apply(this, arguments);\n}\nfunction _preloadScripts() {\n _preloadScripts = _async_to_generator(function() {\n var _ref, importMap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n Promise.all([\n window[REGISTRATION_PROMISES],\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.getCurrentImportMap)()\n ])\n ];\n case 1:\n _ref = _sliced_to_array.apply(void 0, [\n _state.sent(),\n 2\n ]), importMap = _ref[1];\n window.installedModules.map(function() {\n var _ref = _async_to_generator(function(param) {\n var _param, module;\n return _ts_generator(this, function(_state) {\n _param = _sliced_to_array(param, 1), module = _param[0];\n // we simply swallow the error here since this is only a preload\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.importDynamic)(module, undefined, {\n importMap: importMap\n }).catch();\n return [\n 2\n ];\n });\n });\n return function(_) {\n return _ref.apply(this, arguments);\n };\n }());\n return [\n 2\n ];\n }\n });\n });\n return _preloadScripts.apply(this, arguments);\n}\nfunction handleInitFailure(e) {\n console.error(e);\n renderFatalErrorPage(e);\n}\nfunction renderFatalErrorPage(e) {\n var template = document.querySelector(\"#app-error\");\n if (template) {\n var fragment = template.content.cloneNode(true);\n var messageContainer = fragment.querySelector('[data-var=\"message\"]');\n if (messageContainer) {\n messageContainer.textContent = (e === null || e === void 0 ? void 0 : e.message) || \"No additional information available.\";\n }\n if (localStorage.getItem(\"openmrs:devtools\") && Object.keys(localStorage).some(function(k) {\n return k.startsWith(\"import-map-override:\");\n })) {\n var appErrorActionButtons = fragment === null || fragment === void 0 ? void 0 : fragment.querySelector(\"#buttons\");\n if (appErrorActionButtons) {\n var clearDevOverridesButton = document.createElement(\"button\");\n clearDevOverridesButton.className = \"cds--btn\";\n clearDevOverridesButton.innerHTML = \"Clear dev overrides\";\n clearDevOverridesButton.onclick = clearDevOverrides;\n appErrorActionButtons.appendChild(clearDevOverridesButton);\n }\n }\n document.body.appendChild(fragment);\n }\n}\nfunction clearDevOverrides() {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = Object.keys(localStorage)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var key = _step.value;\n if (key.startsWith(\"import-map-override:\") && ![\n \"import-map-override:react\",\n \"import-map-override:react-dom\"\n ].includes(key)) {\n localStorage.removeItem(key);\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n location.reload();\n}\nfunction createConfigLoader(configUrls) {\n var loadingConfigs = Promise.all(configUrls.map(function(configUrl) {\n var interpolatedUrl = (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.interpolateUrl)(configUrl);\n return fetch(interpolatedUrl).then(function(res) {\n return res.json();\n }).then(function(config) {\n return {\n name: configUrl,\n value: config\n };\n }).catch(function(err) {\n console.error('Loading the config from \"'.concat(configUrl, '\" failed.'), err);\n return {\n name: configUrl,\n value: {}\n };\n });\n }));\n return function() {\n return loadingConfigs.then(loadConfigs);\n };\n}\nfunction showNotifications() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderInlineNotifications)(document.querySelector(\".omrs-inline-notifications-container\"));\n return;\n}\nfunction showActionableNotifications() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderActionableNotifications)(document.querySelector(\".omrs-actionable-notifications-container\"));\n}\nfunction showToasts() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderToasts)(document.querySelector(\".omrs-toasts-container\"));\n}\nfunction showSnackbars() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderSnackbars)(document.querySelector(\".omrs-snackbars-container\"));\n}\nfunction showModals() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderModals)(document.querySelector(\".omrs-modals-container\"));\n}\nfunction showLoadingSpinner() {\n return (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.renderLoadingSpinner)(document.body);\n}\n/**\n * Registers the extensions coming from the app shell itself.\n */ function registerCoreExtensions() {\n var extensions = (0,_ui__WEBPACK_IMPORTED_MODULE_4__.getCoreExtensions)();\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;\n try {\n for(var _iterator = extensions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){\n var extension = _step.value;\n (0,_apps__WEBPACK_IMPORTED_MODULE_2__.tryRegisterExtension)(_ui__WEBPACK_IMPORTED_MODULE_4__.appName, extension);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally{\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally{\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\nfunction setupOffline() {\n return _setupOffline.apply(this, arguments);\n}\nfunction _setupOffline() {\n _setupOffline = _async_to_generator(function() {\n var error;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _state.trys.push([\n 0,\n 3,\n ,\n 4\n ]);\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.registerOmrsServiceWorker)(\"\".concat(window.getOpenmrsSpaBase(), \"service-worker.js\"))\n ];\n case 1:\n _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.activateOfflineCapability)()\n ];\n case 2:\n _state.sent();\n setupOfflineStaticDependencyPrecaching();\n return [\n 3,\n 4\n ];\n case 3:\n error = _state.sent();\n console.error(\"Error while setting up offline mode.\", error);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showNotification)({\n kind: \"error\",\n title: \"Offline Setup Error\",\n description: error.message\n });\n return [\n 3,\n 4\n ];\n case 4:\n return [\n 2\n ];\n }\n });\n });\n return _setupOffline.apply(this, arguments);\n}\nfunction setupOfflineStaticDependencyPrecaching() {\n var precacheDelay = 1000 * 60 * 5;\n var lastPrecache = null;\n subscribeOnlineAndLoginChange(function(online, hasLoggedInUser) {\n var hasExceededPrecacheDelay = !lastPrecache || new Date().getTime() - lastPrecache.getTime() > precacheDelay;\n if (hasLoggedInUser && online && hasExceededPrecacheDelay) {\n lastPrecache = new Date();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.dispatchPrecacheStaticDependencies)();\n }\n });\n}\nfunction subscribeOnlineAndLoginChange(cb) {\n var isOnline = false;\n var hasLoggedInUser = false;\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)({\n includeAuthStatus: false\n }).subscribe(function(user) {\n hasLoggedInUser = !!user;\n cb(isOnline, hasLoggedInUser);\n });\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeConnectivity)(function(param) {\n var online = param.online;\n isOnline = online;\n cb(online, hasLoggedInUser);\n });\n}\nfunction precacheGlobalStaticDependencies() {\n return _precacheGlobalStaticDependencies.apply(this, arguments);\n}\nfunction _precacheGlobalStaticDependencies() {\n _precacheGlobalStaticDependencies = _async_to_generator(function() {\n var sessionPathUrl;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n precacheImportMap()\n ];\n case 1:\n _state.sent();\n sessionPathUrl = new URL(\"\".concat(window.openmrsBase, \"/ws/rest/v1/session\"), window.location.origin).href;\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.messageOmrsServiceWorker)({\n type: \"registerDynamicRoute\",\n url: sessionPathUrl,\n strategy: \"network-first\"\n })\n ];\n case 2:\n _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.openmrsFetch)(\"/ws/rest/v1/session\").catch(function(e) {\n return console.warn(\"Failed to precache the user session data from the app shell. MFs depending on this data may run into problems while offline.\", e);\n })\n ];\n case 3:\n _state.sent();\n return [\n 2\n ];\n }\n });\n });\n return _precacheGlobalStaticDependencies.apply(this, arguments);\n}\nfunction precacheImportMap() {\n return _precacheImportMap.apply(this, arguments);\n}\nfunction _precacheImportMap() {\n _precacheImportMap = _async_to_generator(function() {\n var importMap;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n window.importMapOverrides.getCurrentPageMap()\n ];\n case 1:\n importMap = _state.sent();\n return [\n 4,\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.messageOmrsServiceWorker)({\n type: \"onImportMapChanged\",\n importMap: importMap\n })\n ];\n case 2:\n _state.sent();\n return [\n 2\n ];\n }\n });\n });\n return _precacheImportMap.apply(this, arguments);\n}\nfunction setupOfflineCssClasses() {\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeConnectivity)(function(param) {\n var online = param.online;\n var body = document.querySelector(\"body\");\n if (online) {\n body.classList.remove(\"omrs-offline\");\n } else {\n body.classList.add(\"omrs-offline\");\n }\n });\n}\nfunction run(configUrls, offline) {\n var closeLoading = showLoadingSpinner();\n var provideConfigs = createConfigLoader(configUrls);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.integrateBreakpoints)();\n showToasts();\n showModals();\n showNotifications();\n showActionableNotifications();\n showSnackbars();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeNotificationShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showNotification);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeActionableNotificationShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showActionableNotification);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeToastShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showToast);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribeSnackbarShown)(_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.showSnackbar);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.subscribePrecacheStaticDependencies)(precacheGlobalStaticDependencies);\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.setupApiModule)();\n (0,_openmrs_esm_framework_src_internal__WEBPACK_IMPORTED_MODULE_1__.setupHistory)();\n registerCoreExtensions();\n return setupApps().then(_apps__WEBPACK_IMPORTED_MODULE_2__.finishRegisteringAllApps).then(setupOfflineCssClasses).then(provideConfigs).then(runShell).catch(handleInitFailure).then(closeLoading).then(offline ? setupOffline : undefined).then(preloadScripts);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFBTTs0QkFDTmpFLFdBQUFBO3dCQUNGOzs7b0JBSEE7Ozs7OztJQUlGO1dBTmU0RDs7QUFRZixTQUFTVSx5QkFBeUI7SUFDaENoSywwRkFBcUJBLENBQUMsZ0JBQWdCO1lBQWIrRSxlQUFBQTtRQUN2QixJQUFNZ0MsT0FBT2hGLFNBQVMrRCxhQUFhLENBQUM7UUFDcEMsSUFBSWYsUUFBUTtZQUNWZ0MsS0FBS2tELFNBQVMsQ0FBQ0MsTUFBTSxDQUFDO1FBQ3hCLE9BQU87WUFDTG5ELEtBQUtrRCxTQUFTLENBQUNFLEdBQUcsQ0FBQztRQUNyQixDQUFDO0lBQ0g7QUFDRjtBQUVPLFNBQVNDLElBQUkvQyxVQUF5QixFQUFFZ0QsT0FBZ0IsRUFBRTtJQUMvRCxJQUFNQyxlQUFlckM7SUFDckIsSUFBTXNDLGlCQUFpQm5ELG1CQUFtQkM7SUFFMUM3SCx5RkFBb0JBO0lBQ3BCc0k7SUFDQUU7SUFDQUo7SUFDQUM7SUFDQUU7SUFDQXJJLCtGQUEwQkEsQ0FBQ1YsaUZBQWdCQTtJQUMzQ1cseUdBQW9DQSxDQUFDViwyRkFBMEJBO0lBQy9EVyx3RkFBbUJBLENBQUNWLDBFQUFTQTtJQUM3QlcsMkZBQXNCQSxDQUFDViw2RUFBWUE7SUFDbkNrQix3R0FBbUNBLENBQUMrSTtJQUNwQ3ZLLG1GQUFjQTtJQUNkaUMsaUZBQVlBO0lBQ1pvSDtJQUVBLE9BQU8zRyxZQUNKK0IsSUFBSSxDQUFDdkMsMkRBQXdCQSxFQUM3QnVDLElBQUksQ0FBQzBHLHdCQUNMMUcsSUFBSSxDQUFDaUgsZ0JBQ0xqSCxJQUFJLENBQUNnQyxVQUNMN0IsS0FBSyxDQUFDa0MsbUJBQ05yQyxJQUFJLENBQUNnSCxjQUNMaEgsSUFBSSxDQUFDK0csVUFBVWhDLGVBQWVoRyxTQUFTLEVBQ3ZDaUIsSUFBSSxDQUFDbUM7QUFDVixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9ydW4udHM/YmMyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdGFydCwgdHJpZ2dlckFwcENoYW5nZSB9IGZyb20gJ3NpbmdsZS1zcGEnO1xuaW1wb3J0IHR5cGUgeyBPcGVubXJzQXBwUm91dGVzIH0gZnJvbSAnQG9wZW5tcnMvZXNtLWZyYW1ld29yay9zcmMvaW50ZXJuYWwnO1xuaW1wb3J0IHtcbiAgc2V0dXBBcGlNb2R1bGUsXG4gIHJlbmRlckxvYWRpbmdTcGlubmVyLFxuICB0eXBlIENvbmZpZyxcbiAgcHJvdmlkZSxcbiAgc2hvd05vdGlmaWNhdGlvbixcbiAgc2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb24sXG4gIHNob3dUb2FzdCxcbiAgc2hvd1NuYWNrYmFyLFxuICByZW5kZXJJbmxpbmVOb3RpZmljYXRpb25zLFxuICByZW5kZXJBY3Rpb25hYmxlTm90aWZpY2F0aW9ucyxcbiAgcmVuZGVyVG9hc3RzLFxuICByZW5kZXJTbmFja2JhcnMsXG4gIGludGVncmF0ZUJyZWFrcG9pbnRzLFxuICBkaXNwYXRjaENvbm5lY3Rpdml0eUNoYW5nZWQsXG4gIHN1YnNjcmliZU5vdGlmaWNhdGlvblNob3duLFxuICBzdWJzY3JpYmVBY3Rpb25hYmxlTm90aWZpY2F0aW9uU2hvd24sXG4gIHN1YnNjcmliZVRvYXN0U2hvd24sXG4gIHN1YnNjcmliZVNuYWNrYmFyU2hvd24sXG4gIHJlZ2lzdGVyT21yc1NlcnZpY2VXb3JrZXIsXG4gIG1lc3NhZ2VPbXJzU2VydmljZVdvcmtlcixcbiAgc3Vic2NyaWJlQ29ubmVjdGl2aXR5LFxuICBnZXRDdXJyZW50VXNlcixcbiAgcmVuZGVyTW9kYWxzLFxuICBkaXNwYXRjaFByZWNhY2hlU3RhdGljRGVwZW5kZW5jaWVzLFxuICBhY3RpdmF0ZU9mZmxpbmVDYXBhYmlsaXR5LFxuICBzdWJzY3JpYmVQcmVjYWNoZVN0YXRpY0RlcGVuZGVuY2llcyxcbiAgb3Blbm1yc0ZldGNoLFxuICBpbnRlcnBvbGF0ZVVybCxcbiAgdHlwZSBPcGVubXJzUm91dGVzLFxuICBnZXRDdXJyZW50SW1wb3J0TWFwLFxuICBpbXBvcnREeW5hbWljLFxuICBjYW5BY2Nlc3NTdG9yYWdlLFxuICBsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgsXG4gIGlzT3Blbm1yc0FwcFJvdXRlcyxcbiAgaXNPcGVubXJzUm91dGVzLFxuICBzZXR1cEhpc3RvcnksXG59IGZyb20gJ0BvcGVubXJzL2VzbS1mcmFtZXdvcmsvc3JjL2ludGVybmFsJztcbmltcG9ydCB7IGZpbmlzaFJlZ2lzdGVyaW5nQWxsQXBwcywgcmVnaXN0ZXJBcHAsIHRyeVJlZ2lzdGVyRXh0ZW5zaW9uIH0gZnJvbSAnLi9hcHBzJztcbmltcG9ydCB7IHNldHVwSTE4biB9IGZyb20gJy4vbG9jYWxlJztcbmltcG9ydCB7IGFwcE5hbWUsIGdldENvcmVFeHRlbnNpb25zIH0gZnJvbSAnLi91aSc7XG5cbi8vIEBpbnRlcm5hbFxuLy8gdXNlZCB0byB0cmFjayB3aGVuIHRoZSB3aW5kb3cuaW5zdGFsbGVkTW9kdWxlcyBnbG9iYWwgaXMgZmluYWxpc2VkXG4vLyBzbyB3ZSBjYW4gcHJlLWxvYWQgYWxsIG1vZHVsZXNcbmNvbnN0IFJFR0lTVFJBVElPTl9QUk9NSVNFUyA9IFN5bWJvbCgnb3Blbm1yc19yZWdpc3RyYXRpb25fcHJvbWlzZXMnKTtcblxuLyoqXG4gKiBTZXRzIHVwIHRoZSBmcm9udGVuZCBtb2R1bGVzIChhcHBzKS4gVXNlcyB0aGUgZGVmaW5lZCBleHBvcnRcbiAqIGZyb20gdGhlIHJvb3QgbW9kdWxlcyBvZiB0aGUgYXBwcy4gVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgdGhlXG4gKiBsaXN0IG9mIGFwcHMgZnJvbSB0aGUgcm91dGVzLnJlZ2lzdHJ5Lmpzb24gZmlsZSwgd2hpY2ggc2VydmVzXG4gKiBhcyB0aGUgcmVnaXN0cnkgb2YgYWxsIGFwcHMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBzZXR1cEFwcHMoKSB7XG4gIGNvbnN0IHNjcmlwdFRhZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxTY3JpcHRFbGVtZW50PihcInNjcmlwdFt0eXBlPSdvcGVubXJzLXJvdXRlcyddXCIpO1xuXG4gIGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPE9wZW5tcnNSb3V0ZXM+PiA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdFRhZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgKGFzeW5jIChzY3JpcHRUYWcpID0+IHtcbiAgICAgICAgbGV0IHJvdXRlczogT3Blbm1yc1JvdXRlcyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc2NyaXB0VGFnLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICByb3V0ZXMgPSBKU09OLnBhcnNlKHNjcmlwdFRhZy50ZXh0Q29udGVudCkgYXMgT3Blbm1yc1JvdXRlcztcbiAgICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFRhZy5zcmMpIHtcbiAgICAgICAgICAgIHJvdXRlcyA9IChhd2FpdCBvcGVubXJzRmV0Y2g8T3Blbm1yc1JvdXRlcz4oc2NyaXB0VGFnLnNyYykpLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgQ2F1Z2h0IGVycm9yIHdoaWxlIGxvYWRpbmcgcm91dGVzIGZyb20gJHtzY3JpcHRUYWcuc3JjID8/ICdKU09OIHNjcmlwdCB0YWcgY29udGVudCd9YCwgZSk7XG5cbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJvdXRlcyA/PyB7fSk7XG4gICAgICB9KShzY3JpcHRUYWdzLml0ZW0oaSkpLFxuICAgICk7XG4gIH1cblxuICBpZiAoY2FuQWNjZXNzU3RvcmFnZSgpKSB7XG4gICAgLy8gbG9hZCByb3V0ZXMgb3ZlcnJpZGVzIGZyb20gbG9jYWxTdG9yYWdlIGlmIGFueVxuICAgIGNvbnN0IGxvY2FsU3RvcmFnZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XG4gICAgICBpZiAoa2V5Py5zdGFydHNXaXRoKGxvY2FsU3RvcmFnZVJvdXRlc1ByZWZpeCkpIHtcbiAgICAgICAgY29uc3QgbG9jYWxPdmVycmlkZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmIChsb2NhbE92ZXJyaWRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlT3Blbm1yc1JvdXRlcyA9IEpTT04ucGFyc2UobG9jYWxPdmVycmlkZSk7XG4gICAgICAgICAgICBpZiAoaXNPcGVubXJzQXBwUm91dGVzKG1heWJlT3Blbm1yc1JvdXRlcykpIHtcbiAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmU8T3Blbm1yc1JvdXRlcz4oe1xuICAgICAgICAgICAgICAgICAgW2tleS5zbGljZShsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgubGVuZ3RoKV06IG1heWJlT3Blbm1yc1JvdXRlcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG1heWJlT3Blbm1yc1JvdXRlcyA9PT0gJ3N0cmluZycgJiYgbWF5YmVPcGVubXJzUm91dGVzLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG9wZW5tcnNGZXRjaDxPcGVubXJzQXBwUm91dGVzPihtYXliZU9wZW5tcnNSb3V0ZXMpXG4gICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3Blbm1yc0FwcFJvdXRlcyhyZXNwb25zZS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW2tleS5zbGljZShsb2NhbFN0b3JhZ2VSb3V0ZXNQcmVmaXgubGVuZ3RoKV06IHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bWF5YmVPcGVubXJzUm91dGVzfSBkaWQgbm90IHJlc29sdmUgdG8gYSB2YWxpZCBPcGVubXJzQXBwUm91dGVzIEpTT04gb2JqZWN0YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCByb3V0ZSBvdmVycmlkZXMgZm9yICR7a2V5LnNsaWNlKGxvY2FsU3RvcmFnZVJvdXRlc1ByZWZpeC5sZW5ndGgpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIGZhaWwgdGhlIHByb21pc2VcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFJvdXRlIG92ZXJyaWRlIGZvciAke2tleS5zbGljZShcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZVJvdXRlc1ByZWZpeC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKX0gY291bGQgbm90IGJlIGhhbmRsZWQgYXMgaXQgd2FzIG5laXRoZXIgYSBKU09OIG9iamVjdCBub3IgYSBVUkwgc3RyaW5nYCxcbiAgICAgICAgICAgICAgICBsb2NhbE92ZXJyaWRlLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHBhcnNpbmcgbG9jYWwgcm91dGUgb3ZlcnJpZGUgZm9yICR7a2V5fWAsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJvdXRlczogT3Blbm1yc1JvdXRlcyA9IChhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpKVxuICAgIC5maWx0ZXIoKHApID0+IHAuc3RhdHVzID09PSAnZnVsZmlsbGVkJylcbiAgICAubWFwKChwKSA9PiAocCBhcyBQcm9taXNlRnVsZmlsbGVkUmVzdWx0PE9wZW5tcnNSb3V0ZXM+KS52YWx1ZSlcbiAgICAuZmlsdGVyKGlzT3Blbm1yc1JvdXRlcylcbiAgICAucmVkdWNlKFxuICAgICAgKGFjY3VtdWxhdGVkUm91dGVzLCByb3V0ZXMpID0+ICh7XG4gICAgICAgIC4uLmFjY3VtdWxhdGVkUm91dGVzLFxuICAgICAgICAuLi5yb3V0ZXMsXG4gICAgICB9KSxcbiAgICAgIHt9LFxuICAgICk7XG5cbiAgY29uc3QgbW9kdWxlczogdHlwZW9mIHdpbmRvdy5pbnN0YWxsZWRNb2R1bGVzID0gW107XG4gIGNvbnN0IHJlZ2lzdHJhdGlvblByb21pc2VzID0gT2JqZWN0LmVudHJpZXMocm91dGVzKS5tYXAoYXN5bmMgKFttb2R1bGUsIHJvdXRlc10pID0+IHtcbiAgICBtb2R1bGVzLnB1c2goW21vZHVsZSwgcm91dGVzXSk7XG4gICAgcmVnaXN0ZXJBcHAobW9kdWxlLCByb3V0ZXMpO1xuICB9KTtcblxuICB3aW5kb3dbUkVHSVNUUkFUSU9OX1BST01JU0VTXSA9IFByb21pc2UuYWxsKHJlZ2lzdHJhdGlvblByb21pc2VzKTtcbiAgd2luZG93Lmluc3RhbGxlZE1vZHVsZXMgPSBtb2R1bGVzO1xufVxuXG4vKipcbiAqIExvYWRzIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9ucyBhbmQgc2V0cyB0aGVtIGluIHRoZSBzeXN0ZW0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWdzKGNvbmZpZ3M6IEFycmF5PHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogQ29uZmlnIH0+KSB7XG4gIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICBwcm92aWRlKGNvbmZpZy52YWx1ZSwgY29uZmlnLm5hbWUpO1xuICB9XG59XG5cbi8qKlxuICogSW52b2tlZCB3aGVuIHRoZSBjb25uZWN0aXZpdHkgaXMgY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdGl2aXR5Q2hhbmdlZCgpIHtcbiAgY29uc3Qgb25saW5lID0gbmF2aWdhdG9yLm9uTGluZTtcbiAgLy8gTkIgV2UgZG8gbm90IHdhaXQgZm9yIHRoaXMgdG8gYmUgZG9uZTsgaXQgaXMgc2ltcGx5IHNjaGVkdWxlZFxuICB0cmlnZ2VyQXBwQ2hhbmdlKCk7XG5cbiAgZGlzcGF0Y2hDb25uZWN0aXZpdHlDaGFuZ2VkKG9ubGluZSk7XG4gIHNob3dUb2FzdCh7XG4gICAgY3JpdGljYWw6IHRydWUsXG4gICAgZGVzY3JpcHRpb246IGBDb25uZWN0aW9uOiAke29ubGluZSA/ICdvbmxpbmUnIDogJ29mZmxpbmUnfWAsXG4gICAgdGl0bGU6ICdBcHAnLFxuICAgIGtpbmQ6IG9ubGluZSA/ICdzdWNjZXNzJyA6ICd3YXJuaW5nJyxcbiAgfSk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgc2hlbGwgYnkgaW1wb3J0aW5nIHRoZSB0cmFuc2xhdGlvbnMgYW5kIHN0YXJ0aW5nIHNpbmdsZSBTUEEuXG4gKi9cbmZ1bmN0aW9uIHJ1blNoZWxsKCkge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGNvbm5lY3Rpdml0eUNoYW5nZWQpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgY29ubmVjdGl2aXR5Q2hhbmdlZCk7XG4gIHJldHVybiBzZXR1cEkxOG4oKVxuICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmFuc2xhdGlvbnNgLCBlcnIpKVxuICAgIC50aGVuKCgpID0+IHN0YXJ0KCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVsb2FkU2NyaXB0cygpIHtcbiAgY29uc3QgWywgaW1wb3J0TWFwXSA9IGF3YWl0IFByb21pc2UuYWxsKFt3aW5kb3dbUkVHSVNUUkFUSU9OX1BST01JU0VTXSwgZ2V0Q3VycmVudEltcG9ydE1hcCgpXSk7XG5cbiAgd2luZG93Lmluc3RhbGxlZE1vZHVsZXMubWFwKGFzeW5jIChbbW9kdWxlXSkgPT4ge1xuICAgIC8vIHdlIHNpbXBseSBzd2FsbG93IHRoZSBlcnJvciBoZXJlIHNpbmNlIHRoaXMgaXMgb25seSBhIHByZWxvYWRcbiAgICBpbXBvcnREeW5hbWljKG1vZHVsZSwgdW5kZWZpbmVkLCB7IGltcG9ydE1hcCB9KS5jYXRjaCgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW5pdEZhaWx1cmUoZTogRXJyb3IpIHtcbiAgY29uc29sZS5lcnJvcihlKTtcbiAgcmVuZGVyRmF0YWxFcnJvclBhZ2UoZSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZhdGFsRXJyb3JQYWdlKGU/OiBFcnJvcikge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFRlbXBsYXRlRWxlbWVudD4oJyNhcHAtZXJyb3InKTtcblxuICBpZiAodGVtcGxhdGUpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpIGFzIERvY3VtZW50RnJhZ21lbnQ7XG4gICAgY29uc3QgbWVzc2FnZUNvbnRhaW5lciA9IGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXZhcj1cIm1lc3NhZ2VcIl0nKTtcblxuICAgIGlmIChtZXNzYWdlQ29udGFpbmVyKSB7XG4gICAgICBtZXNzYWdlQ29udGFpbmVyLnRleHRDb250ZW50ID0gZT8ubWVzc2FnZSB8fCAnTm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhdmFpbGFibGUuJztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3Blbm1yczpkZXZ0b29scycpICYmXG4gICAgICBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpLnNvbWUoKGspID0+IGsuc3RhcnRzV2l0aCgnaW1wb3J0LW1hcC1vdmVycmlkZTonKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGFwcEVycm9yQWN0aW9uQnV0dG9ucyA9IGZyYWdtZW50Py5xdWVyeVNlbGVjdG9yKCcjYnV0dG9ucycpO1xuICAgICAgaWYgKGFwcEVycm9yQWN0aW9uQnV0dG9ucykge1xuICAgICAgICBjb25zdCBjbGVhckRldk92ZXJyaWRlc0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbGVhckRldk92ZXJyaWRlc0J1dHRvbi5jbGFzc05hbWUgPSAnY2RzLS1idG4nO1xuICAgICAgICBjbGVhckRldk92ZXJyaWRlc0J1dHRvbi5pbm5lckhUTUwgPSAnQ2xlYXIgZGV2IG92ZXJyaWRlcyc7XG4gICAgICAgIGNsZWFyRGV2T3ZlcnJpZGVzQnV0dG9uLm9uY2xpY2sgPSBjbGVhckRldk92ZXJyaWRlcztcbiAgICAgICAgYXBwRXJyb3JBY3Rpb25CdXR0b25zLmFwcGVuZENoaWxkKGNsZWFyRGV2T3ZlcnJpZGVzQnV0dG9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhckRldk92ZXJyaWRlcygpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobG9jYWxTdG9yYWdlKSkge1xuICAgIGlmIChcbiAgICAgIGtleS5zdGFydHNXaXRoKCdpbXBvcnQtbWFwLW92ZXJyaWRlOicpICYmXG4gICAgICAhWydpbXBvcnQtbWFwLW92ZXJyaWRlOnJlYWN0JywgJ2ltcG9ydC1tYXAtb3ZlcnJpZGU6cmVhY3QtZG9tJ10uaW5jbHVkZXMoa2V5KVxuICAgICkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG4gIH1cbiAgbG9jYXRpb24ucmVsb2FkKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ0xvYWRlcihjb25maWdVcmxzOiBBcnJheTxzdHJpbmc+KSB7XG4gIGNvbnN0IGxvYWRpbmdDb25maWdzID0gUHJvbWlzZS5hbGwoXG4gICAgY29uZmlnVXJscy5tYXAoKGNvbmZpZ1VybCkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJwb2xhdGVkVXJsID0gaW50ZXJwb2xhdGVVcmwoY29uZmlnVXJsKTtcbiAgICAgIHJldHVybiBmZXRjaChpbnRlcnBvbGF0ZWRVcmwpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAgIC50aGVuKChjb25maWcpID0+ICh7XG4gICAgICAgICAgbmFtZTogY29uZmlnVXJsLFxuICAgICAgICAgIHZhbHVlOiBjb25maWcsXG4gICAgICAgIH0pKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYExvYWRpbmcgdGhlIGNvbmZpZyBmcm9tIFwiJHtjb25maWdVcmx9XCIgZmFpbGVkLmAsIGVycik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbmZpZ1VybCxcbiAgICAgICAgICAgIHZhbHVlOiB7fSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9KSxcbiAgKTtcbiAgcmV0dXJuICgpID0+IGxvYWRpbmdDb25maWdzLnRoZW4obG9hZENvbmZpZ3MpO1xufVxuXG5mdW5jdGlvbiBzaG93Tm90aWZpY2F0aW9ucygpIHtcbiAgcmVuZGVySW5saW5lTm90aWZpY2F0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub21ycy1pbmxpbmUtbm90aWZpY2F0aW9ucy1jb250YWluZXInKSk7XG4gIHJldHVybjtcbn1cblxuZnVuY3Rpb24gc2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb25zKCkge1xuICByZW5kZXJBY3Rpb25hYmxlTm90aWZpY2F0aW9ucyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub21ycy1hY3Rpb25hYmxlLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyJykpO1xufVxuXG5mdW5jdGlvbiBzaG93VG9hc3RzKCkge1xuICByZW5kZXJUb2FzdHMoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm9tcnMtdG9hc3RzLWNvbnRhaW5lcicpKTtcbn1cblxuZnVuY3Rpb24gc2hvd1NuYWNrYmFycygpIHtcbiAgcmVuZGVyU25hY2tiYXJzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vbXJzLXNuYWNrYmFycy1jb250YWluZXInKSk7XG59XG5cbmZ1bmN0aW9uIHNob3dNb2RhbHMoKSB7XG4gIHJlbmRlck1vZGFscyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcub21ycy1tb2RhbHMtY29udGFpbmVyJykpO1xufVxuXG5mdW5jdGlvbiBzaG93TG9hZGluZ1NwaW5uZXIoKSB7XG4gIHJldHVybiByZW5kZXJMb2FkaW5nU3Bpbm5lcihkb2N1bWVudC5ib2R5KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGV4dGVuc2lvbnMgY29taW5nIGZyb20gdGhlIGFwcCBzaGVsbCBpdHNlbGYuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQ29yZUV4dGVuc2lvbnMoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBnZXRDb3JlRXh0ZW5zaW9ucygpO1xuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25zKSB7XG4gICAgdHJ5UmVnaXN0ZXJFeHRlbnNpb24oYXBwTmFtZSwgZXh0ZW5zaW9uKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cE9mZmxpbmUoKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVnaXN0ZXJPbXJzU2VydmljZVdvcmtlcihgJHt3aW5kb3cuZ2V0T3Blbm1yc1NwYUJhc2UoKX1zZXJ2aWNlLXdvcmtlci5qc2ApO1xuICAgIGF3YWl0IGFjdGl2YXRlT2ZmbGluZUNhcGFiaWxpdHkoKTtcbiAgICBzZXR1cE9mZmxpbmVTdGF0aWNEZXBlbmRlbmN5UHJlY2FjaGluZygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgdXAgb2ZmbGluZSBtb2RlLicsIGVycm9yKTtcbiAgICBzaG93Tm90aWZpY2F0aW9uKHtcbiAgICAgIGtpbmQ6ICdlcnJvcicsXG4gICAgICB0aXRsZTogJ09mZmxpbmUgU2V0dXAgRXJyb3InLFxuICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBPZmZsaW5lU3RhdGljRGVwZW5kZW5jeVByZWNhY2hpbmcoKSB7XG4gIGNvbnN0IHByZWNhY2hlRGVsYXkgPSAxMDAwICogNjAgKiA1O1xuICBsZXQgbGFzdFByZWNhY2hlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgc3Vic2NyaWJlT25saW5lQW5kTG9naW5DaGFuZ2UoKG9ubGluZSwgaGFzTG9nZ2VkSW5Vc2VyKSA9PiB7XG4gICAgY29uc3QgaGFzRXhjZWVkZWRQcmVjYWNoZURlbGF5ID0gIWxhc3RQcmVjYWNoZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxhc3RQcmVjYWNoZS5nZXRUaW1lKCkgPiBwcmVjYWNoZURlbGF5O1xuXG4gICAgaWYgKGhhc0xvZ2dlZEluVXNlciAmJiBvbmxpbmUgJiYgaGFzRXhjZWVkZWRQcmVjYWNoZURlbGF5KSB7XG4gICAgICBsYXN0UHJlY2FjaGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgZGlzcGF0Y2hQcmVjYWNoZVN0YXRpY0RlcGVuZGVuY2llcygpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZU9ubGluZUFuZExvZ2luQ2hhbmdlKGNiOiAob25saW5lOiBib29sZWFuLCBoYXNMb2dnZWRJblVzZXI6IGJvb2xlYW4pID0+IHZvaWQpIHtcbiAgbGV0IGlzT25saW5lID0gZmFsc2U7XG4gIGxldCBoYXNMb2dnZWRJblVzZXIgPSBmYWxzZTtcblxuICBnZXRDdXJyZW50VXNlcih7IGluY2x1ZGVBdXRoU3RhdHVzOiBmYWxzZSB9KS5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICBoYXNMb2dnZWRJblVzZXIgPSAhIXVzZXI7XG4gICAgY2IoaXNPbmxpbmUsIGhhc0xvZ2dlZEluVXNlcik7XG4gIH0pO1xuXG4gIHN1YnNjcmliZUNvbm5lY3Rpdml0eSgoeyBvbmxpbmUgfSkgPT4ge1xuICAgIGlzT25saW5lID0gb25saW5lO1xuICAgIGNiKG9ubGluZSwgaGFzTG9nZ2VkSW5Vc2VyKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZWNhY2hlR2xvYmFsU3RhdGljRGVwZW5kZW5jaWVzKCkge1xuICBhd2FpdCBwcmVjYWNoZUltcG9ydE1hcCgpO1xuXG4gIC8vIEJ5IGRlZmF1bHQsIGNhY2hlIHRoZSBzZXNzaW9uIGVuZHBvaW50LlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBhIGxvdCBvZiB1c2VyL3Nlc3Npb24gcmVsYXRlZCBmdW5jdGlvbnMgYWxzbyB3b3JrIG9mZmxpbmUuXG4gIGNvbnN0IHNlc3Npb25QYXRoVXJsID0gbmV3IFVSTChgJHt3aW5kb3cub3Blbm1yc0Jhc2V9L3dzL3Jlc3QvdjEvc2Vzc2lvbmAsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pLmhyZWY7XG5cbiAgYXdhaXQgbWVzc2FnZU9tcnNTZXJ2aWNlV29ya2VyKHtcbiAgICB0eXBlOiAncmVnaXN0ZXJEeW5hbWljUm91dGUnLFxuICAgIHVybDogc2Vzc2lvblBhdGhVcmwsXG4gICAgc3RyYXRlZ3k6ICduZXR3b3JrLWZpcnN0JyxcbiAgfSk7XG5cbiAgYXdhaXQgb3Blbm1yc0ZldGNoKCcvd3MvcmVzdC92MS9zZXNzaW9uJykuY2F0Y2goKGUpID0+XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ0ZhaWxlZCB0byBwcmVjYWNoZSB0aGUgdXNlciBzZXNzaW9uIGRhdGEgZnJvbSB0aGUgYXBwIHNoZWxsLiBNRnMgZGVwZW5kaW5nIG9uIHRoaXMgZGF0YSBtYXkgcnVuIGludG8gcHJvYmxlbXMgd2hpbGUgb2ZmbGluZS4nLFxuICAgICAgZSxcbiAgICApLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVjYWNoZUltcG9ydE1hcCgpIHtcbiAgY29uc3QgaW1wb3J0TWFwID0gYXdhaXQgd2luZG93LmltcG9ydE1hcE92ZXJyaWRlcy5nZXRDdXJyZW50UGFnZU1hcCgpO1xuICBhd2FpdCBtZXNzYWdlT21yc1NlcnZpY2VXb3JrZXIoe1xuICAgIHR5cGU6ICdvbkltcG9ydE1hcENoYW5nZWQnLFxuICAgIGltcG9ydE1hcCxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHVwT2ZmbGluZUNzc0NsYXNzZXMoKSB7XG4gIHN1YnNjcmliZUNvbm5lY3Rpdml0eSgoeyBvbmxpbmUgfSkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykhO1xuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIGJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnb21ycy1vZmZsaW5lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkuY2xhc3NMaXN0LmFkZCgnb21ycy1vZmZsaW5lJyk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bihjb25maWdVcmxzOiBBcnJheTxzdHJpbmc+LCBvZmZsaW5lOiBib29sZWFuKSB7XG4gIGNvbnN0IGNsb3NlTG9hZGluZyA9IHNob3dMb2FkaW5nU3Bpbm5lcigpO1xuICBjb25zdCBwcm92aWRlQ29uZmlncyA9IGNyZWF0ZUNvbmZpZ0xvYWRlcihjb25maWdVcmxzKTtcblxuICBpbnRlZ3JhdGVCcmVha3BvaW50cygpO1xuICBzaG93VG9hc3RzKCk7XG4gIHNob3dNb2RhbHMoKTtcbiAgc2hvd05vdGlmaWNhdGlvbnMoKTtcbiAgc2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb25zKCk7XG4gIHNob3dTbmFja2JhcnMoKTtcbiAgc3Vic2NyaWJlTm90aWZpY2F0aW9uU2hvd24oc2hvd05vdGlmaWNhdGlvbik7XG4gIHN1YnNjcmliZUFjdGlvbmFibGVOb3RpZmljYXRpb25TaG93bihzaG93QWN0aW9uYWJsZU5vdGlmaWNhdGlvbik7XG4gIHN1YnNjcmliZVRvYXN0U2hvd24oc2hvd1RvYXN0KTtcbiAgc3Vic2NyaWJlU25hY2tiYXJTaG93bihzaG93U25hY2tiYXIpO1xuICBzdWJzY3JpYmVQcmVjYWNoZVN0YXRpY0RlcGVuZGVuY2llcyhwcmVjYWNoZUdsb2JhbFN0YXRpY0RlcGVuZGVuY2llcyk7XG4gIHNldHVwQXBpTW9kdWxlKCk7XG4gIHNldHVwSGlzdG9yeSgpO1xuICByZWdpc3RlckNvcmVFeHRlbnNpb25zKCk7XG5cbiAgcmV0dXJuIHNldHVwQXBwcygpXG4gICAgLnRoZW4oZmluaXNoUmVnaXN0ZXJpbmdBbGxBcHBzKVxuICAgIC50aGVuKHNldHVwT2ZmbGluZUNzc0NsYXNzZXMpXG4gICAgLnRoZW4ocHJvdmlkZUNvbmZpZ3MpXG4gICAgLnRoZW4ocnVuU2hlbGwpXG4gICAgLmNhdGNoKGhhbmRsZUluaXRGYWlsdXJlKVxuICAgIC50aGVuKGNsb3NlTG9hZGluZylcbiAgICAudGhlbihvZmZsaW5lID8gc2V0dXBPZmZsaW5lIDogdW5kZWZpbmVkKVxuICAgIC50aGVuKHByZWxvYWRTY3JpcHRzKTtcbn1cbiJdLCJuYW1lcyI6WyJzdGFydCIsInRyaWdnZXJBcHBDaGFuZ2UiLCJzZXR1cEFwaU1vZHVsZSIsInJlbmRlckxvYWRpbmdTcGlubmVyIiwicHJvdmlkZSIsInNob3dOb3RpZmljYXRpb24iLCJzaG93QWN0aW9uYWJsZU5vdGlmaWNhdGlvbiIsInNob3dUb2FzdCIsInNob3dTbmFja2JhciIsInJlbmRlcklubGluZU5vdGlmaWNhdGlvbnMiLCJyZW5kZXJBY3Rpb25hYmxlTm90aWZpY2F0aW9ucyIsInJlbmRlclRvYXN0cyIsInJlbmRlclNuYWNrYmFycyIsImludGVncmF0ZUJyZWFrcG9pbnRzIiwiZGlzcGF0Y2hDb25uZWN0aXZpdHlDaGFuZ2VkIiwic3Vic2NyaWJlTm90aWZpY2F0aW9uU2hvd24iLCJzdWJzY3JpYmVBY3Rpb25hYmxlTm90aWZpY2F0aW9uU2hvd24iLCJzdWJzY3JpYmVUb2FzdFNob3duIiwic3Vic2NyaWJlU25hY2tiYXJTaG93biIsInJlZ2lzdGVyT21yc1NlcnZpY2VXb3JrZXIiLCJtZXNzYWdlT21yc1NlcnZpY2VXb3JrZXIiLCJzdWJzY3JpYmVDb25uZWN0aXZpdHkiLCJnZXRDdXJyZW50VXNlciIsInJlbmRlck1vZGFscyIsImRpc3BhdGNoUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMiLCJhY3RpdmF0ZU9mZmxpbmVDYXBhYmlsaXR5Iiwic3Vic2NyaWJlUHJlY2FjaGVTdGF0aWNEZXBlbmRlbmNpZXMiLCJvcGVubXJzRmV0Y2giLCJpbnRlcnBvbGF0ZVVybCIsImdldEN1cnJlbnRJbXBvcnRNYXAiLCJpbXBvcnREeW5hbWljIiwiY2FuQWNjZXNzU3RvcmFnZSIsImxvY2FsU3RvcmFnZVJvdXRlc1ByZWZpeCIsImlzT3Blbm1yc0FwcFJvdXRlcyIsImlzT3Blbm1yc1JvdXRlcyIsInNldHVwSGlzdG9yeSIsImZpbmlzaFJlZ2lzdGVyaW5nQWxsQXBwcyIsInJlZ2lzdGVyQXBwIiwidHJ5UmVnaXN0ZXJFeHRlbnNpb24iLCJzZXR1cEkxOG4iLCJhcHBOYW1lIiwiZ2V0Q29yZUV4dGVuc2lvbnMiLCJSRUdJU1RSQVRJT05fUFJPTUlTRVMiLCJTeW1ib2wiLCJzZXR1cEFwcHMiLCJzY3JpcHRUYWdzIiwicHJvbWlzZXMiLCJpIiwibG9jYWxTdG9yYWdlIiwicm91dGVzIiwibW9kdWxlcyIsInJlZ2lzdHJhdGlvblByb21pc2VzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicHVzaCIsInNjcmlwdFRhZyIsImUiLCJ1bmRlZmluZWQiLCJ0ZXh0Q29udGVudCIsIkpTT04iLCJwYXJzZSIsInNyYyIsImRhdGEiLCJjb25zb2xlIiwiZXJyb3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsIml0ZW0iLCJrZXkiLCJzdGFydHNXaXRoIiwibG9jYWxPdmVycmlkZSIsImdldEl0ZW0iLCJtYXliZU9wZW5tcnNSb3V0ZXMiLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsInJlamVjdCIsImNhdGNoIiwicmVhc29uIiwid2FybiIsIndpbmRvdyIsImFsbFNldHRsZWQiLCJmaWx0ZXIiLCJwIiwic3RhdHVzIiwibWFwIiwidmFsdWUiLCJyZWR1Y2UiLCJhY2N1bXVsYXRlZFJvdXRlcyIsIk9iamVjdCIsImVudHJpZXMiLCJtb2R1bGUiLCJhbGwiLCJpbnN0YWxsZWRNb2R1bGVzIiwibG9hZENvbmZpZ3MiLCJjb25maWdzIiwiY29uZmlnIiwibmFtZSIsImNvbm5lY3Rpdml0eUNoYW5nZWQiLCJvbmxpbmUiLCJuYXZpZ2F0b3IiLCJvbkxpbmUiLCJjcml0aWNhbCIsImRlc2NyaXB0aW9uIiwidGl0bGUiLCJraW5kIiwicnVuU2hlbGwiLCJhZGRFdmVudExpc3RlbmVyIiwiZXJyIiwicHJlbG9hZFNjcmlwdHMiLCJpbXBvcnRNYXAiLCJoYW5kbGVJbml0RmFpbHVyZSIsInJlbmRlckZhdGFsRXJyb3JQYWdlIiwidGVtcGxhdGUiLCJxdWVyeVNlbGVjdG9yIiwiZnJhZ21lbnQiLCJjb250ZW50IiwiY2xvbmVOb2RlIiwibWVzc2FnZUNvbnRhaW5lciIsIm1lc3NhZ2UiLCJrZXlzIiwic29tZSIsImsiLCJhcHBFcnJvckFjdGlvbkJ1dHRvbnMiLCJjbGVhckRldk92ZXJyaWRlc0J1dHRvbiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbm5lckhUTUwiLCJvbmNsaWNrIiwiY2xlYXJEZXZPdmVycmlkZXMiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJpbmNsdWRlcyIsInJlbW92ZUl0ZW0iLCJsb2NhdGlvbiIsInJlbG9hZCIsImNyZWF0ZUNvbmZpZ0xvYWRlciIsImNvbmZpZ1VybHMiLCJsb2FkaW5nQ29uZmlncyIsImNvbmZpZ1VybCIsImludGVycG9sYXRlZFVybCIsImZldGNoIiwicmVzIiwianNvbiIsInNob3dOb3RpZmljYXRpb25zIiwic2hvd0FjdGlvbmFibGVOb3RpZmljYXRpb25zIiwic2hvd1RvYXN0cyIsInNob3dTbmFja2JhcnMiLCJzaG93TW9kYWxzIiwic2hvd0xvYWRpbmdTcGlubmVyIiwicmVnaXN0ZXJDb3JlRXh0ZW5zaW9ucyIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJzZXR1cE9mZmxpbmUiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwT2ZmbGluZVN0YXRpY0RlcGVuZGVuY3lQcmVjYWNoaW5nIiwicHJlY2FjaGVEZWxheSIsImxhc3RQcmVjYWNoZSIsInN1YnNjcmliZU9ubGluZUFuZExvZ2luQ2hhbmdlIiwiaGFzTG9nZ2VkSW5Vc2VyIiwiaGFzRXhjZWVkZWRQcmVjYWNoZURlbGF5IiwiRGF0ZSIsImdldFRpbWUiLCJjYiIsImlzT25saW5lIiwiaW5jbHVkZUF1dGhTdGF0dXMiLCJzdWJzY3JpYmUiLCJ1c2VyIiwicHJlY2FjaGVHbG9iYWxTdGF0aWNEZXBlbmRlbmNpZXMiLCJzZXNzaW9uUGF0aFVybCIsInByZWNhY2hlSW1wb3J0TWFwIiwiVVJMIiwib3Blbm1yc0Jhc2UiLCJvcmlnaW4iLCJocmVmIiwidHlwZSIsInVybCIsInN0cmF0ZWd5IiwiaW1wb3J0TWFwT3ZlcnJpZGVzIiwiZ2V0Q3VycmVudFBhZ2VNYXAiLCJzZXR1cE9mZmxpbmVDc3NDbGFzc2VzIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYWRkIiwicnVuIiwib2ZmbGluZSIsImNsb3NlTG9hZGluZyIsInByb3ZpZGVDb25maWdzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/run.ts\n");
49
49
 
50
50
  /***/ }),
51
51