@openmrs/esm-app-shell 6.3.1-pre.3105 → 6.3.1-pre.3119

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 (91) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/dist/1aeb256985e33864.js +1 -0
  3. package/dist/1aeb256985e33864.js.map +1 -0
  4. package/dist/f1bf92ff5d8517a7.js.map +1 -0
  5. package/dist/index.html +1 -1
  6. package/dist/{openmrs.10f6e2cb10b05c80.js → openmrs.e1b0b176bb0e5d2d.js} +1 -1
  7. package/dist/{openmrs.10f6e2cb10b05c80.js.map → openmrs.e1b0b176bb0e5d2d.js.map} +1 -1
  8. package/dist/service-worker.js +1 -1
  9. package/lib/{54e8981b7823f373.js → 0b8132da55d43cec.js} +8 -8
  10. package/lib/25718c5560d56ff1.js +112 -0
  11. package/lib/esm-devtools-app/180.js +2 -0
  12. package/lib/esm-devtools-app/180.js.LICENSE.txt +5 -0
  13. package/lib/esm-devtools-app/180.js.map +1 -0
  14. package/lib/esm-devtools-app/248.js +1 -0
  15. package/lib/esm-devtools-app/248.js.map +1 -0
  16. package/lib/esm-devtools-app/326.js +2 -0
  17. package/lib/esm-devtools-app/326.js.LICENSE.txt +9 -0
  18. package/lib/esm-devtools-app/326.js.map +1 -0
  19. package/lib/esm-devtools-app/623.js +2 -0
  20. package/lib/esm-devtools-app/623.js.LICENSE.txt +19 -0
  21. package/lib/esm-devtools-app/623.js.map +1 -0
  22. package/lib/esm-devtools-app/731.js +2 -0
  23. package/lib/esm-devtools-app/731.js.LICENSE.txt +24 -0
  24. package/lib/esm-devtools-app/731.js.map +1 -0
  25. package/lib/esm-devtools-app/769.js +2 -0
  26. package/lib/esm-devtools-app/769.js.LICENSE.txt +39 -0
  27. package/lib/esm-devtools-app/769.js.map +1 -0
  28. package/lib/esm-devtools-app/770.js +2 -0
  29. package/lib/esm-devtools-app/770.js.LICENSE.txt +14 -0
  30. package/lib/esm-devtools-app/770.js.map +1 -0
  31. package/lib/esm-devtools-app/810.js +1 -0
  32. package/lib/esm-devtools-app/810.js.map +1 -0
  33. package/lib/esm-devtools-app/907.js +1 -0
  34. package/lib/esm-devtools-app/907.js.map +1 -0
  35. package/lib/esm-devtools-app/929.js +1 -0
  36. package/lib/esm-devtools-app/929.js.map +1 -0
  37. package/lib/esm-devtools-app/932.js +2 -0
  38. package/lib/esm-devtools-app/932.js.LICENSE.txt +5 -0
  39. package/lib/esm-devtools-app/932.js.map +1 -0
  40. package/lib/esm-devtools-app/main.js +1 -0
  41. package/lib/esm-devtools-app/main.js.map +1 -0
  42. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -0
  43. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +447 -0
  44. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.map +1 -0
  45. package/lib/esm-devtools-app/routes.json +1 -0
  46. package/lib/esm-help-menu-app/810.js +1 -1
  47. package/lib/esm-help-menu-app/810.js.map +1 -1
  48. package/lib/esm-help-menu-app/main.js +1 -1
  49. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js +1 -1
  50. package/lib/esm-help-menu-app/openmrs-esm-help-menu-app.js.buildmanifest.json +5 -5
  51. package/lib/esm-help-menu-app/routes.json +1 -1
  52. package/lib/esm-implementer-tools-app/3150.js.map +1 -1
  53. package/lib/esm-implementer-tools-app/4810.js +1 -1
  54. package/lib/esm-implementer-tools-app/4810.js.map +1 -1
  55. package/lib/esm-implementer-tools-app/main.js +1 -1
  56. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
  57. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +6 -6
  58. package/lib/esm-implementer-tools-app/routes.json +1 -1
  59. package/lib/esm-login-app/5906.js +2 -2
  60. package/lib/esm-login-app/5906.js.map +1 -1
  61. package/lib/esm-login-app/main.js +1 -1
  62. package/lib/esm-login-app/main.js.map +1 -1
  63. package/lib/esm-login-app/openmrs-esm-login-app.js +2 -2
  64. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +5 -5
  65. package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
  66. package/lib/esm-login-app/routes.json +1 -1
  67. package/lib/esm-offline-tools-app/4810.js +1 -1
  68. package/lib/esm-offline-tools-app/4810.js.map +1 -1
  69. package/lib/esm-offline-tools-app/main.js +1 -1
  70. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
  71. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +5 -5
  72. package/lib/esm-offline-tools-app/routes.json +1 -1
  73. package/lib/esm-primary-navigation-app/1404.js.map +1 -1
  74. package/lib/esm-primary-navigation-app/2395.js +1 -1
  75. package/lib/esm-primary-navigation-app/2395.js.map +1 -1
  76. package/lib/esm-primary-navigation-app/3758.js.map +1 -1
  77. package/lib/esm-primary-navigation-app/8577.js.map +1 -1
  78. package/lib/esm-primary-navigation-app/main.js +1 -1
  79. package/lib/esm-primary-navigation-app/main.js.map +1 -1
  80. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  81. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +12 -12
  82. package/lib/esm-primary-navigation-app/routes.json +1 -1
  83. package/lib/index.html +2 -2
  84. package/lib/openmrs.js +4 -4
  85. package/lib/service-worker.js +1 -1
  86. package/package.json +3 -3
  87. package/dist/1d86aa5e7b7a2d81.js +0 -1
  88. package/dist/1d86aa5e7b7a2d81.js.map +0 -1
  89. package/dist/6b8a9c458e21b16e.js.map +0 -1
  90. package/lib/db1303a22cb3a6d3.js +0 -112
  91. /package/dist/{6b8a9c458e21b16e.js → f1bf92ff5d8517a7.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"6b8a9c458e21b16e.js","mappings":"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","sources":["webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/utils.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/config-schema.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-utils/dist/shallowEqual.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/types.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/module-config/state.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/validators/type-validators.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/module-config/module-config.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/validators/validator.js","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/svg-utils.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/index.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/brand.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/logo/index.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/icons/icon-registration.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-styleguide/src/pictograms/pictogram-registration.ts","webpack://@openmrs/esm-app-shell/../../framework/esm-state/dist/state.js","webpack://@openmrs/esm-app-shell/../../framework/esm-config/dist/validators/validators.js"],"names":["carbonTagColors","diagnosisTagConfigSchema","primaryColor","_type","Type","String","_description","_default","_validators","validators","oneOf","secondaryColor","esmStyleGuideSchema","excludePatientIdentifierCodeTypes","uuids","Array","_elements","UUID","implementationName","patientPhotoConceptUuid","ConceptUuid","preferredCalendar","Object","am","preferredDateLocale","en","diagnosisTags","shallowEqual","a","b","is","isArray","length","i","objAKeys","getOwnPropertyNames","objBKeys","every","key","configInternalStore","createGlobalStore","providedConfigs","schemas","moduleLoaded","temporaryConfigStore","config","JSON","parse","localStorage","getItem","e","getTemporaryConfig","subscribe","state","value","setItem","stringify","configExtensionStore","mountedExtensions","getConfigStore","moduleName","getGlobalStore","loaded","translationOverridesLoaded","getExtensionSlotsConfigStore","slots","getExtensionSlotConfig","slotName","getExtensionSlotConfigFromStore","getState","getExtensionsConfigStore","configs","getExtensionConfig","extensionId","Error","extensionConfigStore","selector","configStore","getInitialState","setState","partial","replace","newState","assign","listener","prevState","oldState","destroy","getExtensionConfigFromStore","extensionConfig","implementerToolsConfigStore","validator","val","isBoolean","isNumber","isString","isObject","isUuid","test","computeModuleConfig","configState","tempConfigState","computeImplementerToolsConfig","computeExtensionSlotConfigs","computeExtensionConfigs","extensionState","displayedValidationMessages","Set","tempState","keys","moduleStore","getConfigForModule","getConfigForModuleImplicitSchema","slotConfigs","allConfigs","mergeConfigs","getProvidedConfigs","slotConfigPerModule","reduce","obj","extensionSlots","configBySlotName","entries","validateExtensionSlotConfig","validateAllExtensionSlotConfigs","getExtensionSlotConfigs","newSlotStoreEntries","fromEntries","map","slotStore","equals","result","getSchemaWithValuesAndSources","clone","configsAndSources","c","source","createValuesAndSourcesTree","getImplementerToolsConfig","extension","computeExtensionConfig","slotModuleName","extensionModuleName","defineConfigSchema","schema","validateConfigSchema","enhancedSchema","mergeDeepRight","implicitConfigSchema","registerModuleWithConfigSystem","registerModuleLoad","registerTranslationNamespace","namespace","translationOverridesSchema","defineExtensionConfigSchema","extensionName","console","error","provide","sourceName","getConfig","Promise","resolve","store","update","omit","unsubscribe","getTranslationOverrides","promises","translationOverrides","push","all","processConfig","providedConfig","keyPathContext","validateStructure","setDefaults","runAllValidatorsInConfigTree","split","getExtensionNameFromId","extensionConfigSchema","nameOfSchemaSource","slotModuleConfig","mergeConfigsFor","configOverride","configure","combinedConfig","hasOwnProperty","_value","_source","isOrdinaryObject","keyPath","errorPrefix","invalidKeys","filter","k","includes","logError","join","add","n","remove","order","updateMessage","startsWith","thisKeyPath","schemaPart","elements","hasObjectSchema","valueType","values","inputConfig","mergeDeepAll","validateBranchStructure","checkType","freeformObjectSchema","validateFreeformObjectStructure","arraySchema","validateArrayStructure","runValidators","Boolean","Number","PersonAttributeTypeUuid","PatientIdentifierTypeUuid","returnValue","validatorResult","configPart","configWithDefaults","conf","objectKey","selectedConfigPart","elementsSchema","message","has","clearConfigErrors","forEach","delete","clear","o","privileges","validationFunction","svgContainer","document","createElement","appendContainer","body","appendChild","addSvg","htmlId","svgString","svgElement","DOMParser","parseFromString","querySelector","id","style","display","readyState","window","addEventListener","setGlobalCSSVariable","name","documentElement","setProperty","setupBranding","fullLogo","partialLogo","iconLogo","availableStores","initialState","available","active","createStore","registerGlobalStore","fallbackState","subscribeTo","args","select","handle","handler","previous","current","setTimeout","spaEnv","inRange","min","max","isUrlWithTemplateParameters","allowedTemplateParameters","allowedParams","concat","rx","match","exec","p","isUrl","allowedValues"],"sourceRoot":""}
@@ -1,112 +0,0 @@
1
- "use strict";
2
- /*
3
- * ATTENTION: An "eval-source-map" devtool has been used.
4
- * This devtool is neither made for production nor for readable output files.
5
- * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
6
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
7
- * or disable the default devtool with "devtool: false".
8
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
9
- */
10
- (self["webpackChunk_openmrs_esm_app_shell"] = self["webpackChunk_openmrs_esm_app_shell"] || []).push([["framework_esm-config_dist_index_js"],{
11
-
12
- /***/ "../../framework/esm-config/dist/index.js":
13
- /*!************************************************!*\
14
- !*** ../../framework/esm-config/dist/index.js ***!
15
- \************************************************/
16
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
17
-
18
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Type: () => (/* reexport safe */ _types_js__WEBPACK_IMPORTED_MODULE_4__.Type),\n/* harmony export */ clearConfigErrors: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.clearConfigErrors),\n/* harmony export */ configExtensionStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.configInternalStore),\n/* harmony export */ defineConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.getConfig),\n/* harmony export */ getConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.getExtensionsConfigStore),\n/* harmony export */ getTranslationOverrides: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.getTranslationOverrides),\n/* harmony export */ implementerToolsConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.implementerToolsConfigStore),\n/* harmony export */ inRange: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.inRange),\n/* harmony export */ isUrl: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.isUrl),\n/* harmony export */ isUrlWithTemplateParameters: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.isUrlWithTemplateParameters),\n/* harmony export */ oneOf: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.oneOf),\n/* harmony export */ processConfig: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.processConfig),\n/* harmony export */ provide: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.provide),\n/* harmony export */ registerModuleLoad: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerModuleLoad),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* reexport safe */ _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__.registerTranslationNamespace),\n/* harmony export */ temporaryConfigStore: () => (/* reexport safe */ _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__.temporaryConfigStore),\n/* harmony export */ validator: () => (/* reexport safe */ _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__.validator),\n/* harmony export */ validators: () => (/* reexport safe */ _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__.validators)\n/* harmony export */ });\n/* harmony import */ var _module_config_module_config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./module-config/module-config.js */ \"../../framework/esm-config/dist/module-config/module-config.js\");\n/* harmony import */ var _module_config_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./module-config/state.js */ \"../../framework/esm-config/dist/module-config/state.js\");\n/* harmony import */ var _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./validators/validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/* harmony import */ var _validators_validators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./validators/validators.js */ \"../../framework/esm-config/dist/validators/validators.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types.js */ \"../../framework/esm-config/dist/types.js\");\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUQ7QUFDUjtBQUNDO0FBQ0M7QUFDaEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvaW5kZXguanM/Mjc3MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZHVsZS1jb25maWcvc3RhdGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRvcnMvdmFsaWRhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0b3JzL3ZhbGlkYXRvcnMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLmpzXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/index.js\n");
19
-
20
- /***/ }),
21
-
22
- /***/ "../../framework/esm-config/dist/module-config/module-config.js":
23
- /*!**********************************************************************!*\
24
- !*** ../../framework/esm-config/dist/module-config/module-config.js ***!
25
- \**********************************************************************/
26
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
27
-
28
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clearConfigErrors: () => (/* binding */ clearConfigErrors),\n/* harmony export */ defineConfigSchema: () => (/* binding */ defineConfigSchema),\n/* harmony export */ defineExtensionConfigSchema: () => (/* binding */ defineExtensionConfigSchema),\n/* harmony export */ getConfig: () => (/* binding */ getConfig),\n/* harmony export */ getTranslationOverrides: () => (/* binding */ getTranslationOverrides),\n/* harmony export */ processConfig: () => (/* binding */ processConfig),\n/* harmony export */ provide: () => (/* binding */ provide),\n/* harmony export */ registerModuleLoad: () => (/* binding */ registerModuleLoad),\n/* harmony export */ registerModuleWithConfigSystem: () => (/* binding */ registerModuleWithConfigSystem),\n/* harmony export */ registerTranslationNamespace: () => (/* binding */ registerTranslationNamespace)\n/* harmony export */ });\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/equals.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/mergeDeepRight.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/omit.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/clone.js\");\n/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ramda */ \"../../../node_modules/ramda/es/reduce.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types.js */ \"../../framework/esm-config/dist/types.js\");\n/* harmony import */ var _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../validators/type-validators.js */ \"../../framework/esm-config/dist/validators/type-validators.js\");\n/* harmony import */ var _validators_validator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../validators/validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/* harmony import */ var _state_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state.js */ \"../../framework/esm-config/dist/module-config/state.js\");\n/** @module @category Config */ \n\n\n\n\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ computeModuleConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeModuleConfig(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeModuleConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeImplementerToolsConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeImplementerToolsConfig(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeImplementerToolsConfig(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeExtensionSlotConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>computeExtensionSlotConfigs(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState()));\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>computeExtensionSlotConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), tempConfigState));\ncomputeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.subscribe((configState)=>{\n computeExtensionConfigs(configState, _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.subscribe((extensionState)=>{\n computeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), extensionState, _state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.getState());\n});\n_state_js__WEBPACK_IMPORTED_MODULE_3__.temporaryConfigStore.subscribe((tempConfigState)=>{\n computeExtensionConfigs(_state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState(), _state_js__WEBPACK_IMPORTED_MODULE_3__.configExtensionStore.getState(), tempConfigState);\n});\n/** Keep track of which validation errors we have displayed. Each one should only be displayed once. */ let displayedValidationMessages = new Set();\nfunction computeModuleConfig(state, tempState) {\n for (let moduleName of Object.keys(state.schemas)){\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n const moduleStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n if (state.moduleLoaded[moduleName]) {\n const config = getConfigForModule(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: true,\n config\n });\n } else {\n const config = getConfigForModuleImplicitSchema(moduleName, state, tempState);\n moduleStore.setState({\n translationOverridesLoaded: true,\n loaded: false,\n config\n });\n }\n }\n}\nfunction computeExtensionSlotConfigs(state, tempState) {\n const slotConfigs = getExtensionSlotConfigs(state, tempState);\n const newSlotStoreEntries = Object.fromEntries(Object.entries(slotConfigs).map(([slotName, config])=>[\n slotName,\n {\n loaded: true,\n config\n }\n ]));\n const slotStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionSlotsConfigStore)();\n const oldState = slotStore.getState();\n const newState = {\n slots: {\n ...oldState.slots,\n ...newSlotStoreEntries\n }\n };\n if (!(0,ramda__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(oldState, newState)) {\n slotStore.setState(newState);\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n const config = getImplementerToolsConfig(state, tempConfigState);\n _state_js__WEBPACK_IMPORTED_MODULE_3__.implementerToolsConfigStore.setState({\n config\n });\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState) {\n const configs = {};\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for (let extension of extensionState.mountedExtensions){\n const config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState);\n configs[extension.slotName] = {\n ...configs[extension.slotName],\n [extension.extensionId]: {\n config,\n loaded: true\n }\n };\n }\n (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionsConfigStore)().setState({\n configs\n });\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n const enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: enhancedSchema\n },\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: implicitConfigSchema\n }\n }));\n}\n/**\n * This alerts the configuration system that a module has been loaded.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleLoad(moduleName) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [namespace]: translationOverridesSchema\n }\n }));\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries being returned\n * by `setupOpenMRS`.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n const enhancedSchema = (0,ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(schema, implicitConfigSchema);\n const state = _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(`Config schema for extension ${extensionName} already exists. If there are multiple extensions with this same name, one will probably crash.`);\n }\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [extensionName]: enhancedSchema\n }\n }));\n}\nfunction provide(config, sourceName = 'provided') {\n _state_js__WEBPACK_IMPORTED_MODULE_3__.configInternalStore.setState((state)=>({\n ...state,\n providedConfigs: [\n ...state.providedConfigs,\n {\n source: sourceName,\n config\n }\n ]\n }));\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return new Promise((resolve)=>{\n const store = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n function update(state) {\n if (state.loaded && state.config) {\n const config = (0,ramda__WEBPACK_IMPORTED_MODULE_6__[\"default\"])([\n 'Display conditions',\n 'Translation overrides'\n ], state.config);\n resolve(config);\n unsubscribe && unsubscribe();\n }\n }\n update(store.getState());\n const unsubscribe = store.subscribe(update);\n });\n}\n/** @internal */ function getTranslationOverrides(moduleName, slotName, extensionId) {\n const promises = [\n new Promise((resolve)=>{\n const configStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getConfigStore)(moduleName);\n function update(state) {\n if (state.translationOverridesLoaded && state.config) {\n const translationOverrides = state.config['Translation overrides'] ?? {};\n resolve(translationOverrides);\n unsubscribe && unsubscribe();\n }\n }\n update(configStore.getState());\n const unsubscribe = configStore.subscribe(update);\n })\n ];\n if (slotName && extensionId) {\n promises.push(new Promise((resolve)=>{\n const configStore = (0,_state_js__WEBPACK_IMPORTED_MODULE_3__.getExtensionConfig)(slotName, extensionId);\n function update(state) {\n if (state.loaded && state.config) {\n const translationOverrides = state.config['Translation overrides'] ?? {};\n resolve(translationOverrides);\n unsubscribe && unsubscribe();\n }\n }\n update(configStore.getState());\n const unsubscribe = configStore.subscribe(update);\n }));\n }\n return Promise.all(promises);\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-deparated string which helps the user figure out where\n * the provided config came from\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n const config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\n/*\n * Helper functions\n *\n */ /**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState) {\n const extensionName = getExtensionNameFromId(extensionId);\n const extensionConfigSchema = configState.schemas[extensionName];\n const nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n const providedConfigs = getProvidedConfigs(configState, tempConfigState);\n const slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n const configOverride = slotModuleConfig?.extensionSlots?.[slotName]?.configure?.[extensionId] ?? {};\n const extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n const combinedConfig = mergeConfigs([\n extensionConfig,\n configOverride\n ]);\n const schema = extensionConfigSchema ?? configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n const config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n return config;\n}\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n let result = getSchemaWithValuesAndSources((0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(configState.schemas));\n const configsAndSources = [\n ...configState.providedConfigs.map((c)=>[\n c.config,\n c.source\n ]),\n [\n tempConfigState.config,\n 'temporary config'\n ]\n ];\n for (let [config, source] of configsAndSources){\n result = mergeConfigs([\n result,\n createValuesAndSourcesTree(config, source)\n ]);\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty('_default')) {\n return {\n ...schema,\n _value: schema._default,\n _source: 'default'\n };\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce((obj, key)=>{\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce((obj, key)=>{\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n const allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n const slotConfigPerModule = Object.keys(allConfigs).reduce((obj, key)=>{\n if (allConfigs[key]?.extensionSlots) {\n obj[key] = allConfigs[key]?.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n const slotConfigs = Object.keys(slotConfigPerModule).reduce((obj, key)=>{\n obj = {\n ...obj,\n ...slotConfigPerModule[key]\n };\n return obj;\n }, {});\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n for (let [moduleName, configBySlotName] of Object.entries(slotConfigPerModule)){\n for (let [slotName, config] of Object.entries(configBySlotName)){\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n const keyPath = `${moduleName}.extensionSlots.${slotName}`;\n const errorPrefix = `Extension slot config '${keyPath}'`;\n const invalidKeys = Object.keys(config).filter((k)=>![\n 'add',\n 'remove',\n 'order',\n 'configure'\n ].includes(k));\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + `' contains invalid keys '${invalidKeys.join(\"', '\")}'`);\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.add' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.remove' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.order' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + `.configure' is invalid. Must be an object with extension IDs for keys`);\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return [\n ...configState.providedConfigs.map((c)=>c.config),\n tempConfigState.config\n ];\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema, keyPath = '') {\n const updateMessage = `Please verify that you are running the latest version and, if so, alert the maintainer.`;\n for (const key of Object.keys(schema).filter((k)=>!k.startsWith('_'))){\n const thisKeyPath = keyPath + (keyPath && '.') + key;\n const schemaPart = schema[key];\n if (thisKeyPath === 'Display conditions') {\n console.error(`${moduleName} declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ${updateMessage}`);\n }\n if (thisKeyPath === 'Translation overrides') {\n console.error(`${moduleName} declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ${updateMessage}`);\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}`);\n continue;\n }\n if (!schemaPart.hasOwnProperty('_default')) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n const elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + '._elements');\n }\n if (schemaPart._validators) {\n for (let validator of schemaPart._validators){\n if (typeof validator !== 'function') {\n console.error(`${moduleName} has invalid validator for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: validators must be functions that return either ` + `undefined or an error string. Received ${validator}.`);\n }\n }\n }\n const valueType = schemaPart._type;\n if (valueType && !Object.values(_types_js__WEBPACK_IMPORTED_MODULE_0__.Type).includes(valueType)) {\n console.error(`${moduleName} has invalid type for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: the allowed types are ${Object.values(_types_js__WEBPACK_IMPORTED_MODULE_0__.Type).join(', ')}. ` + `Received '${valueType}'`);\n }\n if (Object.keys(schemaPart).every((k)=>[\n '_description',\n '_validators',\n '_elements',\n '_type'\n ].includes(k)) && !keyPath.includes('._elements')) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: all config elements must have a default. ` + `Received ${JSON.stringify(schemaPart)}`);\n }\n if (elements && valueType && ![\n _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object\n ].includes(valueType)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. ` + `Received ${JSON.stringify(valueType)}`);\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n const schema = configState.schemas[moduleName];\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n const config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n const config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n const allConfigsForModule = allConfigs.map(({ [moduleName]: c })=>c).filter((c)=>!!c);\n return mergeConfigs(allConfigsForModule);\n}\nfunction mergeConfigs(configs) {\n const mergeDeepAll = (0,ramda__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(ramda__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\n return mergeDeepAll({}, configs);\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config, keyPath = '') {\n // validate each constituent element\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === 'extensionSlots' && keyPath !== '')) {\n logError(thisKeyPath, `Unknown config key '${thisKeyPath}' provided. Ignoring.`);\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty('_default') || schemaPart.hasOwnProperty('_type'))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n for (const key of Object.keys(config)){\n const value = config[key];\n validateBranchStructure(freeformObjectSchema._elements, value, `${keyPath}.${key}`);\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n const validatedAsArray = checkType(keyPath, _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(let i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], `${keyPath}[${i}]`);\n }\n }\n for(let i = 0; i < value.length; i++){\n checkType(`${keyPath}[${i}]`, arraySchema._elements?._type, value[i]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config, keyPath = '') {\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (schema._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(let i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], `${keyPath}[${i}]`);\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n const validator = {\n Array: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isArray,\n Boolean: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isBoolean,\n ConceptUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n Number: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isNumber,\n Object: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isObject,\n String: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isString,\n UUID: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators_js__WEBPACK_IMPORTED_MODULE_1__.isUuid\n };\n return runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ function runValidators(keyPath, validators, value) {\n let returnValue = true;\n if (validators) {\n try {\n for (let validator of validators){\n const validatorResult = validator(value);\n if (typeof validatorResult === 'string') {\n const message = typeof value === 'object' ? `Invalid configuration for ${keyPath}: ${validatorResult}` : `Invalid configuration value ${value} for ${keyPath}: ${validatorResult}`;\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (e) {\n console.error(`Skipping invalid validator at \"${keyPath}\". Encountered error\\n\\t${e}`);\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nconst setDefaults = (schema, inputConfig)=>{\n const config = (0,ramda__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(inputConfig);\n if (!schema) {\n return config;\n }\n for (const key of Object.keys(schema)){\n const configPart = config[key];\n const schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty('_type') || schemaPart.hasOwnProperty('_default'))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart['_default'];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n const elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array && Array.isArray(configPart)) {\n const configWithDefaults = configPart.map((conf)=>setDefaults(elements, conf));\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object) {\n for (let objectKey of Object.keys(configPart)){\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n const selectedConfigPart = configPart ?? {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter((e)=>![\n '_default',\n '_validators'\n ].includes(e)).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\nfunction logError(keyPath, message) {\n const key = `${keyPath}:::${message}`;\n // technically, this should not be possible, but because of how things wind-up transpiled, this isn't impossible\n if (!displayedValidationMessages) {\n displayedValidationMessages = new Set();\n }\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach((key)=>{\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n const [extensionName] = extensionId.split('#');\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ const translationOverridesSchema = {\n 'Translation overrides': {\n _description: 'Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value',\n _type: _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator_js__WEBPACK_IMPORTED_MODULE_2__.validator)((o)=>Object.keys(o).every((k)=>/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k)), (o)=>{\n const badKeys = Object.keys(o).filter((k)=>!/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k));\n return `The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: ${badKeys.join(', ')}.`;\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ const implicitConfigSchema = {\n 'Display conditions': {\n privileges: {\n _description: 'The privilege(s) the user must have to use this extension',\n _type: _types_js__WEBPACK_IMPORTED_MODULE_0__.Type.Array,\n _default: []\n }\n },\n ...translationOverridesSchema\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QixHQUF1RTtBQUNqRTtBQUN5RTtBQUNyRDtBQUMrSjtBQUN0Tjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQW1CQyxHQUFHcUIsb0JBQW9CUiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQ3JGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjSCxvQkFBb0JHLGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUMzR0gsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCSixvQkFBb0JSLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUN0R0MsOEJBQThCYiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQzNGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjRSw4QkFBOEJGLGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUNySEgsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCQyw4QkFBOEJiLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUNoSEUsNEJBQTRCZCwwREFBbUJBLENBQUNTLFFBQVEsSUFBSUgsMkRBQW9CQSxDQUFDRyxRQUFRO0FBQ3pGVCwwREFBbUJBLENBQUNVLFNBQVMsQ0FBQyxDQUFDQyxjQUFjRyw0QkFBNEJILGFBQWFMLDJEQUFvQkEsQ0FBQ0csUUFBUTtBQUNuSEgsMkRBQW9CQSxDQUFDSSxTQUFTLENBQUMsQ0FBQ0Usa0JBQWtCRSw0QkFBNEJkLDBEQUFtQkEsQ0FBQ1MsUUFBUSxJQUFJRztBQUM5R0csd0JBQXdCZiwwREFBbUJBLENBQUNTLFFBQVEsSUFBSVIsMkRBQW9CQSxDQUFDUSxRQUFRLElBQUlILDJEQUFv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SSxDQUFDZ0ssR0FBR3ZELEtBQUssQ0FBQyxDQUFDUCxJQUFJLDZCQUE2QitELElBQUksQ0FBQy9ELEtBQUssQ0FBQzhEO2dCQUM3RSxNQUFNRSxVQUFVbkssT0FBT0MsSUFBSSxDQUFDZ0ssR0FBRy9ELE1BQU0sQ0FBQyxDQUFDQyxJQUFJLENBQUMsNkJBQTZCK0QsSUFBSSxDQUFDL0Q7Z0JBQzlFLE9BQU8sQ0FBQyw2UEFBNlAsRUFBRWdFLFFBQVE1RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaFM7U0FDSDtJQUNMO0FBQ0o7QUFDQTs7Q0FFQyxHQUFHLE1BQU1yRSx1QkFBdUI7SUFDN0Isc0JBQXNCO1FBQ2xCa0ksWUFBWTtZQUNSSixjQUFjO1lBQ2R6QyxPQUFPckosMkNBQUlBLENBQUN1SSxLQUFLO1lBQ2pCcEIsVUFBVSxFQUFFO1FBQ2hCO0lBQ0o7SUFDQSxHQUFHOUMsMEJBQTBCO0FBQ2pDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy5qcz84ZGZlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi8gaW1wb3J0IHsgY2xvbmUsIHJlZHVjZSwgbWVyZ2VEZWVwUmlnaHQsIGVxdWFscywgb21pdCB9IGZyb20gXCJyYW1kYVwiO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc1V1aWQsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvcnMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuLi92YWxpZGF0b3JzL3ZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgY29uZmlnSW50ZXJuYWxTdG9yZSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUsIGdldENvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25Db25maWcsIGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSwgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlLCB0ZW1wb3JhcnlDb25maWdTdG9yZSwgZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSB9IGZyb20gXCIuL3N0YXRlLmpzXCI7XG4vKipcbiAqIFN0b3JlIHNldHVwXG4gKlxuICpcbiAqIFNldCB1cCBzdG9yZXMgYW5kIHN1YnNjcmlwdGlvbnMgc28gdGhhdCBpbnB1dHMgZ2V0IHByb2Nlc3NlZCBhcHByb3ByaWF0ZWx5LlxuICpcbiAqIFRoZXJlIGFyZSAqaW5wdXQqIHN0b3JlcyBhbmQgKm91dHB1dCogc3RvcmVzLiBUaGUgKmlucHV0KiBzdG9yZXNcbiAqIGFyZSBjb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wb3JhcnlDb25maWdTdG9yZSwgYW5kIGNvbmZpZ0V4dGVuc2lvblN0b3JlLiBUaGVcbiAqIG91dHB1dCBzdG9yZXMgYXJlIHNldCBpbiB0aGUgYGNvbXB1dGUuLi5gIGZ1bmN0aW9ucy4gVGhleSBhcmUgdGhlIG1vZHVsZVxuICogY29uZmlnIHN0b3JlcywgdGhlIGV4dGVuc2lvbiBzbG90IGNvbmZpZyBzdG9yZXMgKGJ5IG1vZHVsZSksIHRoZSBleHRlbnNpb25cbiAqIGNvbmZpZyBzdG9yZXMsIGFuZCB0aGUgaW1wbGVtZW50ZXIgdG9vbHMgY29uZmlnIHN0b3JlLlxuICpcbiAqIFRoaXMgY29kZSBzZXRzIHVwIHRoZSBzdWJzY3JpcHRpb25zIHNvIHRoYXQgd2hlbiBhbiBpbnB1dCBzdG9yZSBjaGFuZ2VzLFxuICogdGhlIGNvcnJlY3Qgc2V0IG9mIG91dHB1dCBzdG9yZXMgYXJlIHVwZGF0ZWQuXG4gKlxuICogQWxsIGBjb21wdXRlLi4uYCBmdW5jdGlvbnMgZXhjZXB0IGBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnc2AgYXJlIHB1cmVcbiAqIChvciBhcmUgc3VwcG9zZWQgdG8gYmUpLCBvdGhlciB0aGFuIHRoZSBmYWN0IHRoYXQgdGhleSBhbGwgYHNldFN0YXRlYFxuICogc3RvcmUgdmFsdWVzIGF0IHRoZSBlbmQuIGBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnc2AgY2FsbHMgYGdldEdsb2JhbFN0b3JlYCxcbiAqIHdoaWNoIGNyZWF0ZXMgc3RvcmVzLlxuICovIGNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSk9PmNvbXB1dGVNb2R1bGVDb25maWcoY29uZmlnU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpKTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgodGVtcENvbmZpZ1N0YXRlKT0+Y29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSkpO1xuY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSk9PmNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKGNvbmZpZ1N0YXRlLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSk9PmNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcENvbmZpZ1N0YXRlKSk7XG5jb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKTtcbmNvbmZpZ0ludGVybmFsU3RvcmUuc3Vic2NyaWJlKChjb25maWdTdGF0ZSk9PmNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhjb25maWdTdGF0ZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSkpO1xudGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKCh0ZW1wQ29uZmlnU3RhdGUpPT5jb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbmNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUuZ2V0U3RhdGUoKSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKSk7XG5jb25maWdJbnRlcm5hbFN0b3JlLnN1YnNjcmliZSgoY29uZmlnU3RhdGUpPT57XG4gICAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnU3RhdGUsIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xufSk7XG5jb25maWdFeHRlbnNpb25TdG9yZS5zdWJzY3JpYmUoKGV4dGVuc2lvblN0YXRlKT0+e1xuICAgIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKSwgZXh0ZW5zaW9uU3RhdGUsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xufSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHRlbXBDb25maWdTdGF0ZSk9PntcbiAgICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCksIHRlbXBDb25maWdTdGF0ZSk7XG59KTtcbi8qKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHZhbGlkYXRpb24gZXJyb3JzIHdlIGhhdmUgZGlzcGxheWVkLiBFYWNoIG9uZSBzaG91bGQgb25seSBiZSBkaXNwbGF5ZWQgb25jZS4gKi8gbGV0IGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGNvbXB1dGVNb2R1bGVDb25maWcoc3RhdGUsIHRlbXBTdGF0ZSkge1xuICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoc3RhdGUuc2NoZW1hcykpe1xuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBzY2hlbWEgY291bGQgYmUgZWl0aGVyIGp1c3QgdGhlIGltcGxpY2l0IHNjaGVtYSBvciB0aGUgYWN0dWFsbHlcbiAgICAgICAgLy8gZGVmaW5lZCBzY2hlbWEuIFdlIHJ1biB3aXRoIGp1c3QgdGhlIGltcGxpY2l0IHNjaGVtYSBiZWNhdXNlIHdlIHdhbnQgdG8gcG9wdWxhdGVcbiAgICAgICAgLy8gdGhlIGNvbmZpZyBzdG9yZSB3aXRoIHRoZSB0cmFuc2xhdGlvbiBvdmVycmlkZXMgYXMgc29vbiBhcyBwb3NzaWJsZS4gSW4gZmFjdCwgdGhlXG4gICAgICAgIC8vIHRyYW5zbGF0aW9uIHN5c3RlbSB3aWxsIHRocm93IGZvciBTdXNwZW5zZSB1bnRpbCB0aGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIGFyZVxuICAgICAgICAvLyBhdmFpbGFibGUsIHdoaWNoIGFzIG9mIHRoaXMgd3JpdGluZyBibG9ja3MgdGhlIHNjaGVtYSBkZWZpbml0aW9uIGZyb20gb2NjdXJyaW5nXG4gICAgICAgIC8vIGZvciBtb2R1bGVzIGxvYWRlZCBiYXNlZCBvbiB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICBjb25zdCBtb2R1bGVTdG9yZSA9IGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpO1xuICAgICAgICBpZiAoc3RhdGUubW9kdWxlTG9hZGVkW21vZHVsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGb3JNb2R1bGUobW9kdWxlTmFtZSwgc3RhdGUsIHRlbXBTdGF0ZSk7XG4gICAgICAgICAgICBtb2R1bGVTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICAgICAgICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGUsIHRlbXBTdGF0ZSkge1xuICAgIGNvbnN0IHNsb3RDb25maWdzID0gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3Moc3RhdGUsIHRlbXBTdGF0ZSk7XG4gICAgY29uc3QgbmV3U2xvdFN0b3JlRW50cmllcyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzbG90Q29uZmlncykubWFwKChbc2xvdE5hbWUsIGNvbmZpZ10pPT5bXG4gICAgICAgICAgICBzbG90TmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0pKTtcbiAgICBjb25zdCBzbG90U3RvcmUgPSBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCk7XG4gICAgY29uc3Qgb2xkU3RhdGUgPSBzbG90U3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgc2xvdHM6IHtcbiAgICAgICAgICAgIC4uLm9sZFN0YXRlLnNsb3RzLFxuICAgICAgICAgICAgLi4ubmV3U2xvdFN0b3JlRW50cmllc1xuICAgICAgICB9XG4gICAgfTtcbiAgICBpZiAoIWVxdWFscyhvbGRTdGF0ZSwgbmV3U3RhdGUpKSB7XG4gICAgICAgIHNsb3RTdG9yZS5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgY29uZmlnXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdTdGF0ZSwgZXh0ZW5zaW9uU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkge1xuICAgIGNvbnN0IGNvbmZpZ3MgPSB7fTtcbiAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgbW9kdWxlIHNjaGVtYSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIHNpbmNlIHRoZSBleHRlbnNpb25cbiAgICAvLyBpdCBjb250YWlucyBpcyBtb3VudGVkLlxuICAgIGZvciAobGV0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25TdGF0ZS5tb3VudGVkRXh0ZW5zaW9ucyl7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbXB1dGVFeHRlbnNpb25Db25maWcoZXh0ZW5zaW9uLnNsb3RNb2R1bGVOYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uTW9kdWxlTmFtZSwgZXh0ZW5zaW9uLnNsb3ROYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uSWQsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpO1xuICAgICAgICBjb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0gPSB7XG4gICAgICAgICAgICAuLi5jb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0sXG4gICAgICAgICAgICBbZXh0ZW5zaW9uLmV4dGVuc2lvbklkXToge1xuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkuc2V0U3RhdGUoe1xuICAgICAgICBjb25maWdzXG4gICAgfSk7XG59XG4vKlxuICogQVBJXG4gKlxuICovIC8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGEgbW9kdWxlLiBUaGUgc2NoZW1hIHRlbGxzIHRoZVxuICogY29uZmlndXJhdGlvbiBzeXN0ZW0gaG93IHRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0IHNwZWNpZmllc1xuICogd2hhdCBtYWtlcyBjb25maWd1cmF0aW9uIHZhbGlkIG9yIGludmFsaWQuXG4gKlxuICogU2VlIFtDb25maWd1cmF0aW9uIFN5c3RlbV0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2RvY3MvY29uZmlndXJhdGlvbi1zeXN0ZW0pXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBzY2hlbWEgaXMgYmVpbmcgZGVmaW5lZCBmb3IuIEdlbmVyYWxseVxuICogICBzaG91bGQgYmUgdGhlIG9uZSBpbiB3aGljaCB0aGUgYGRlZmluZUNvbmZpZ1NjaGVtYWAgY2FsbCB0YWtlcyBwbGFjZS5cbiAqIEBwYXJhbSBzY2hlbWEgVGhlIGNvbmZpZyBzY2hlbWEgZm9yIHRoZSBtb2R1bGVcbiAqLyBleHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSkge1xuICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSk7XG4gICAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSaWdodChzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKTtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXTogZW5oYW5jZWRTY2hlbWFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb2R1bGVMb2FkZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5tb2R1bGVMb2FkZWQsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGVydHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRoYXQgYSBtb2R1bGUgZXhpc3RzLiBUaGlzIGFsbG93cyBjb25maWcgdG8gYmVcbiAqIHByb2Nlc3NlZCwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdGhlIGV4dGVuc2lvbiBzeXN0ZW0gdG8ga25vdyB3aGV0aGVyIHRoZSBtb2R1bGUgaGFzXG4gKiBhY3R1YWxseSBoYWQgaXRzIGZyb250IGJ1bmRsZSBleGVjdXRlZCB5ZXQuXG4gKlxuICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGVzbS1hcHAtc2hlbGwuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0gbW9kdWxlTmFtZVxuICovIGV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1vZHVsZVdpdGhDb25maWdTeXN0ZW0obW9kdWxlTmFtZSkge1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiBpbXBsaWNpdENvbmZpZ1NjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFRoaXMgYWxlcnRzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0aGF0IGEgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBtb2R1bGVOYW1lXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlTG9hZChtb2R1bGVOYW1lKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBtb2R1bGVMb2FkZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5tb2R1bGVMb2FkZWQsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGxvd3MgdGhlIGNvbmZpZyBzeXN0ZW0gdG8gc3VwcG9ydCB0cmFuc2xhdGlvbiBvdmVycmlkZXMgZm9yIG5hbWVzcGFjZXMgdGhhdFxuICogZG8gbm90IGNvcnJlc3BvbmQgdG8gbW9kdWxlcy5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBuYW1lc3BhY2VcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2xhdGlvbk5hbWVzcGFjZShuYW1lc3BhY2UpIHtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFtuYW1lc3BhY2VdOiB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFRoaXMgZGVmaW5lcyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hIGZvciBhbiBleHRlbnNpb24uIFdoZW4gYSBzY2hlbWEgaXMgZGVmaW5lZFxuICogZm9yIGFuIGV4dGVuc2lvbiwgdGhhdCBleHRlbnNpb24gd2lsbCByZWNlaXZlIHRoZSBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRpbmdcbiAqIHRvIHRoYXQgc2NoZW1hLCByYXRoZXIgdGhhbiB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2R1bGVcbiAqIGluIHdoaWNoIGl0IGlzIGRlZmluZWQuXG4gKlxuICogVGhlIHNjaGVtYSB0ZWxscyB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaG93IHRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQuXG4gKiBJdCBzcGVjaWZpZXMgd2hhdCBtYWtlcyBjb25maWd1cmF0aW9uIHZhbGlkIG9yIGludmFsaWQuXG4gKlxuICogU2VlIFtDb25maWd1cmF0aW9uIFN5c3RlbV0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2RvY3MvY29uZmlndXJhdGlvbi1zeXN0ZW0pXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgTmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRoZSBzY2hlbWEgaXMgYmVpbmcgZGVmaW5lZCBmb3IuXG4gKiAgIFNob3VsZCBtYXRjaCB0aGUgYG5hbWVgIG9mIG9uZSBvZiB0aGUgYGV4dGVuc2lvbnNgIGVudHJpZXMgYmVpbmcgcmV0dXJuZWRcbiAqICAgYnkgYHNldHVwT3Blbk1SU2AuXG4gKiBAcGFyYW0gc2NoZW1hIFRoZSBjb25maWcgc2NoZW1hIGZvciB0aGUgZXh0ZW5zaW9uXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYShleHRlbnNpb25OYW1lLCBzY2hlbWEpIHtcbiAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShleHRlbnNpb25OYW1lLCBzY2hlbWEpO1xuICAgIGNvbnN0IGVuaGFuY2VkU2NoZW1hID0gbWVyZ2VEZWVwUmlnaHQoc2NoZW1hLCBpbXBsaWNpdENvbmZpZ1NjaGVtYSk7XG4gICAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTmFtZV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ29uZmlnIHNjaGVtYSBmb3IgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9uTmFtZX0gYWxyZWFkeSBleGlzdHMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBleHRlbnNpb25zIHdpdGggdGhpcyBzYW1lIG5hbWUsIG9uZSB3aWxsIHByb2JhYmx5IGNyYXNoLmApO1xuICAgIH1cbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFtleHRlbnNpb25OYW1lXTogZW5oYW5jZWRTY2hlbWFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGUoY29uZmlnLCBzb3VyY2VOYW1lID0gJ3Byb3ZpZGVkJykge1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcHJvdmlkZWRDb25maWdzOiBbXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucHJvdmlkZWRDb25maWdzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogQSBwcm9taXNlLWJhc2VkIHdheSB0byBhY2Nlc3MgdGhlIGNvbmZpZyBhcyBzb29uIGFzIGl0IGlzIGZ1bGx5IGxvYWRlZC5cbiAqIElmIGl0IGlzIGFscmVhZHkgbG9hZGVkLCByZXNvbHZlcyB0aGUgY29uZmlnIGluIGl0cyBwcmVzZW50IHN0YXRlLlxuICpcbiAqIFRoaXMgaXMgYSB1c2VmdWwgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgaW4gdGhlIGNvdXJzZVxuICogb2YgdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZm9yIHdoaWNoIHRvIGxvb2sgdXAgdGhlIGNvbmZpZ1xuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcobW9kdWxlTmFtZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKTtcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUubG9hZGVkICYmIHN0YXRlLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG9taXQoW1xuICAgICAgICAgICAgICAgICAgICAnRGlzcGxheSBjb25kaXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcydcbiAgICAgICAgICAgICAgICBdLCBzdGF0ZS5jb25maWcpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKG1vZHVsZU5hbWUsIHNsb3ROYW1lLCBleHRlbnNpb25JZCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1N0b3JlID0gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSk7XG4gICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGUoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUudHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uT3ZlcnJpZGVzID0gc3RhdGUuY29uZmlnWydUcmFuc2xhdGlvbiBvdmVycmlkZXMnXSA/PyB7fTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cmFuc2xhdGlvbk92ZXJyaWRlcyk7XG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlKGNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb25maWdTdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgICAgICAgfSlcbiAgICBdO1xuICAgIGlmIChzbG90TmFtZSAmJiBleHRlbnNpb25JZCkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICAgICAgY29uc3QgY29uZmlnU3RvcmUgPSBnZXRFeHRlbnNpb25Db25maWcoc2xvdE5hbWUsIGV4dGVuc2lvbklkKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uT3ZlcnJpZGVzID0gc3RhdGUuY29uZmlnWydUcmFuc2xhdGlvbiBvdmVycmlkZXMnXSA/PyB7fTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cmFuc2xhdGlvbk92ZXJyaWRlcyk7XG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlKGNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb25maWdTdG9yZS5zdWJzY3JpYmUodXBkYXRlKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgaW50ZXJwb2xhdGUgZGVmYXVsdHMgZm9yIGBwcm92aWRlZENvbmZpZ2AgYWNjb3JkaW5nIHRvIGBzY2hlbWFgXG4gKlxuICogQHBhcmFtIHNjaGVtYSAgYSBjb25maWd1cmF0aW9uIHNjaGVtYVxuICogQHBhcmFtIHByb3ZpZGVkQ29uZmlnICBhbiBvYmplY3Qgb2YgY29uZmlnIHZhbHVlcyAod2l0aG91dCB0aGUgdG9wLWxldmVsIG1vZHVsZSBuYW1lKVxuICogQHBhcmFtIGtleVBhdGhDb250ZXh0ICBhIGRvdC1kZXBhcmF0ZWQgc3RyaW5nIHdoaWNoIGhlbHBzIHRoZSB1c2VyIGZpZ3VyZSBvdXQgd2hlcmVcbiAqICAgICB0aGUgcHJvdmlkZWQgY29uZmlnIGNhbWUgZnJvbVxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb25maWcoc2NoZW1hLCBwcm92aWRlZENvbmZpZywga2V5UGF0aENvbnRleHQpIHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gICAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBwcm92aWRlZENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICAgIHJldHVybiBjb25maWc7XG59XG4vKlxuICogSGVscGVyIGZ1bmN0aW9uc1xuICpcbiAqLyAvKipcbiAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFuIGV4dGVuc2lvbi4gVGhpcyBjb25maWd1cmF0aW9uIGlzIHNwZWNpZmljXG4gKiB0byB0aGUgc2xvdCBpbiB3aGljaCBpdCBpcyBtb3VudGVkLCBhbmQgaXRzIElEIHdpdGhpbiB0aGF0IHNsb3QuXG4gKlxuICogVGhlIHNjaGVtYSBmb3IgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBleHRlbnNpb24gc2NoZW1hLiBJZiBubyBleHRlbnNpb25cbiAqIHNjaGVtYSBoYXMgYmVlbiBwcm92aWRlZCwgdGhlIHNjaGVtYSB1c2VkIGlzIHRoZSBzY2hlbWEgb2YgdGhlIG1vZHVsZSBpblxuICogd2hpY2ggdGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBzbG90TW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiBzbG90XG4gKiBAcGFyYW0gZXh0ZW5zaW9uTW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdoaWNoIGRlZmluZXMgdGhlIGV4dGVuc2lvbiAoYW5kIHRoZXJlZm9yZSB0aGUgY29uZmlnIHNjaGVtYSlcbiAqIEBwYXJhbSBzbG90TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHNsb3Qgd2hlcmUgdGhlIGV4dGVuc2lvbiBpcyBtb3VudGVkXG4gKiBAcGFyYW0gZXh0ZW5zaW9uSWQgVGhlIElEIG9mIHRoZSBleHRlbnNpb24gaW4gaXRzIHNsb3RcbiAqLyBmdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKHNsb3RNb2R1bGVOYW1lLCBleHRlbnNpb25Nb2R1bGVOYW1lLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBleHRlbnNpb25OYW1lID0gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXTtcbiAgICBjb25zdCBuYW1lT2ZTY2hlbWFTb3VyY2UgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPyBleHRlbnNpb25OYW1lIDogZXh0ZW5zaW9uTW9kdWxlTmFtZTtcbiAgICBjb25zdCBwcm92aWRlZENvbmZpZ3MgPSBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgY29uc3Qgc2xvdE1vZHVsZUNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihzbG90TW9kdWxlTmFtZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb25maWdPdmVycmlkZSA9IHNsb3RNb2R1bGVDb25maWc/LmV4dGVuc2lvblNsb3RzPy5bc2xvdE5hbWVdPy5jb25maWd1cmU/LltleHRlbnNpb25JZF0gPz8ge307XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG5hbWVPZlNjaGVtYVNvdXJjZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb21iaW5lZENvbmZpZyA9IG1lcmdlQ29uZmlncyhbXG4gICAgICAgIGV4dGVuc2lvbkNvbmZpZyxcbiAgICAgICAgY29uZmlnT3ZlcnJpZGVcbiAgICBdKTtcbiAgICBjb25zdCBzY2hlbWEgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPz8gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25Nb2R1bGVOYW1lXTtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGNvbWJpbmVkQ29uZmlnLCBuYW1lT2ZTY2hlbWFTb3VyY2UpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgY29tYmluZWRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gICAgZGVsZXRlIGNvbmZpZy5leHRlbnNpb25TbG90cztcbiAgICByZXR1cm4gY29uZmlnO1xufVxuZnVuY3Rpb24gZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgbGV0IHJlc3VsdCA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKGNsb25lKGNvbmZpZ1N0YXRlLnNjaGVtYXMpKTtcbiAgICBjb25zdCBjb25maWdzQW5kU291cmNlcyA9IFtcbiAgICAgICAgLi4uY29uZmlnU3RhdGUucHJvdmlkZWRDb25maWdzLm1hcCgoYyk9PltcbiAgICAgICAgICAgICAgICBjLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBjLnNvdXJjZVxuICAgICAgICAgICAgXSksXG4gICAgICAgIFtcbiAgICAgICAgICAgIHRlbXBDb25maWdTdGF0ZS5jb25maWcsXG4gICAgICAgICAgICAndGVtcG9yYXJ5IGNvbmZpZydcbiAgICAgICAgXVxuICAgIF07XG4gICAgZm9yIChsZXQgW2NvbmZpZywgc291cmNlXSBvZiBjb25maWdzQW5kU291cmNlcyl7XG4gICAgICAgIHJlc3VsdCA9IG1lcmdlQ29uZmlncyhbXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWcsIHNvdXJjZSlcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBfdmFsdWU6IHNjaGVtYS5fZGVmYXVsdCxcbiAgICAgICAgICAgIF9zb3VyY2U6ICdkZWZhdWx0J1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGUgc2NoZW1hIGlzIGJhZCBhbmQgYW4gZXJyb3Igd2lsbCBoYXZlIGJlZW4gbG9nZ2VkIGR1cmluZyBzY2hlbWEgdmFsaWRhdGlvblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnLCBzb3VyY2UpIHtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZ1trZXldLCBzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfdmFsdWU6IGNvbmZpZyxcbiAgICAgICAgICAgIF9zb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBhbGxDb25maWdzID0gbWVyZ2VDb25maWdzKGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSk7XG4gICAgY29uc3Qgc2xvdENvbmZpZ1Blck1vZHVsZSA9IE9iamVjdC5rZXlzKGFsbENvbmZpZ3MpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgIGlmIChhbGxDb25maWdzW2tleV0/LmV4dGVuc2lvblNsb3RzKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gICAgdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlKTtcbiAgICBjb25zdCBzbG90Q29uZmlncyA9IE9iamVjdC5rZXlzKHNsb3RDb25maWdQZXJNb2R1bGUpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAgIC4uLm9iaixcbiAgICAgICAgICAgIC4uLnNsb3RDb25maWdQZXJNb2R1bGVba2V5XVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gc2xvdENvbmZpZ3M7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpIHtcbiAgICBmb3IgKGxldCBbbW9kdWxlTmFtZSwgY29uZmlnQnlTbG90TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ1Blck1vZHVsZSkpe1xuICAgICAgICBmb3IgKGxldCBbc2xvdE5hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnQnlTbG90TmFtZSkpe1xuICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpIHtcbiAgICBjb25zdCBrZXlQYXRoID0gYCR7bW9kdWxlTmFtZX0uZXh0ZW5zaW9uU2xvdHMuJHtzbG90TmFtZX1gO1xuICAgIGNvbnN0IGVycm9yUHJlZml4ID0gYEV4dGVuc2lvbiBzbG90IGNvbmZpZyAnJHtrZXlQYXRofSdgO1xuICAgIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoKGspPT4hW1xuICAgICAgICAgICAgJ2FkZCcsXG4gICAgICAgICAgICAncmVtb3ZlJyxcbiAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAnY29uZmlndXJlJ1xuICAgICAgICBdLmluY2x1ZGVzKGspKTtcbiAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKSB7XG4gICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYCcgY29udGFpbnMgaW52YWxpZCBrZXlzICcke2ludmFsaWRLZXlzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5hZGQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKT0+dHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgLmFkZCcgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIChleHRlbnNpb24gSURzKWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucmVtb3ZlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcucmVtb3ZlKSB8fCAhY29uZmlnLnJlbW92ZS5ldmVyeSgobik9PnR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5yZW1vdmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLm9yZGVyKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcub3JkZXIpIHx8ICFjb25maWcub3JkZXIuZXZlcnkoKG4pPT50eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvbmZpZ3VyZSkge1xuICAgICAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5jb25maWd1cmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gb2JqZWN0IHdpdGggZXh0ZW5zaW9uIElEcyBmb3Iga2V5c2ApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKT0+Yy5jb25maWcpLFxuICAgICAgICB0ZW1wQ29uZmlnU3RhdGUuY29uZmlnXG4gICAgXTtcbn1cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBjb25maWcgc2NoZW1hIGZvciBhIG1vZHVsZS4gU2luY2UgcHJvYmxlbXMgaWRlbnRpZmllZCBoZXJlIGFyZSBwcm9ncmFtbWluZyBlcnJvcnNcbiAqIHRoYXQgaG9wZWZ1bGx5IHdpbGwgYmUgY2F1Z2h0IGR1cmluZyBkZXZlbG9wbWVudCwgdGhpcyBmdW5jdGlvbiBsb2dzIGVycm9ycyB0byB0aGUgY29uc29sZSBkaXJlY3RseTtcbiAqIGl0J3MgZmluZSBpZiB3ZSBzcGFtIHRoZSB1c2VyIHdpdGggdGhlc2UgZXJyb3JzLlxuICovIGZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSwga2V5UGF0aCA9ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlTWVzc2FnZSA9IGBQbGVhc2UgdmVyaWZ5IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQsIGlmIHNvLCBhbGVydCB0aGUgbWFpbnRhaW5lci5gO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkuZmlsdGVyKChrKT0+IWsuc3RhcnRzV2l0aCgnXycpKSl7XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArIChrZXlQYXRoICYmICcuJykgKyBrZXk7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnRGlzcGxheSBjb25kaXRpb25zJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIkRpc3BsYXkgY29uZGl0aW9uc1wiOyB0aGUgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIlRyYW5zbGF0aW9uIG92ZXJyaWRlc1wiOyB0aGUgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAvLyByZWN1cnNlIGZvciBuZXN0ZWQgY29uZmlnIGtleXNcbiAgICAgICAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYVBhcnQsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgICAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgZWxlbWVudHMsIHRoaXNLZXlQYXRoICsgJy5fZWxlbWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdmFsaWRhdG9yIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgKyBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB2YWxpZGF0b3JzIG11c3QgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGVpdGhlciBgICsgYHVuZGVmaW5lZCBvciBhbiBlcnJvciBzdHJpbmcuIFJlY2VpdmVkICR7dmFsaWRhdG9yfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gc2NoZW1hUGFydC5fdHlwZTtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSAmJiAhT2JqZWN0LnZhbHVlcyhUeXBlKS5pbmNsdWRlcyh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBpbnZhbGlkIHR5cGUgZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSBhbGxvd2VkIHR5cGVzIGFyZSAke09iamVjdC52YWx1ZXMoVHlwZSkuam9pbignLCAnKX0uIGAgKyBgUmVjZWl2ZWQgJyR7dmFsdWVUeXBlfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hUGFydCkuZXZlcnkoKGspPT5bXG4gICAgICAgICAgICAgICAgJ19kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgJ192YWxpZGF0b3JzJyxcbiAgICAgICAgICAgICAgICAnX2VsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAnX3R5cGUnXG4gICAgICAgICAgICBdLmluY2x1ZGVzKGspKSAmJiAha2V5UGF0aC5pbmNsdWRlcygnLl9lbGVtZW50cycpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICsgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogYWxsIGNvbmZpZyBlbGVtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0LiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoc2NoZW1hUGFydCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIHZhbHVlVHlwZSAmJiAhW1xuICAgICAgICAgICAgVHlwZS5BcnJheSxcbiAgICAgICAgICAgIFR5cGUuT2JqZWN0XG4gICAgICAgIF0uaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSAnZWxlbWVudHMnIGtleSBvbmx5IHdvcmtzIHdpdGggJ190eXBlJyBlcXVhbCB0byAnQXJyYXknIG9yICdPYmplY3QnLiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodmFsdWVUeXBlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgaW5wdXRDb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgaW5wdXRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hKG1vZHVsZU5hbWUsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKGltcGxpY2l0Q29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShpbXBsaWNpdENvbmZpZ1NjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICAgIHJldHVybiBjb25maWc7XG59XG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgYWxsQ29uZmlncykge1xuICAgIGNvbnN0IGFsbENvbmZpZ3NGb3JNb2R1bGUgPSBhbGxDb25maWdzLm1hcCgoeyBbbW9kdWxlTmFtZV06IGMgfSk9PmMpLmZpbHRlcigoYyk9PiEhYyk7XG4gICAgcmV0dXJuIG1lcmdlQ29uZmlncyhhbGxDb25maWdzRm9yTW9kdWxlKTtcbn1cbmZ1bmN0aW9uIG1lcmdlQ29uZmlncyhjb25maWdzKSB7XG4gICAgY29uc3QgbWVyZ2VEZWVwQWxsID0gcmVkdWNlKG1lcmdlRGVlcFJpZ2h0KTtcbiAgICByZXR1cm4gbWVyZ2VEZWVwQWxsKHt9LCBjb25maWdzKTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIHByb3ZpZGVkIGNvbmZpZyB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbFxuICogb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIHNjaGVtYSwgYW5kIHRoYXQgdHlwZXMgYXJlXG4gKiBjb3JyZWN0LiBEb2VzIG5vdCBydW4gdmFsaWRhdG9ycyB5ZXQsIHNpbmNlIHRob3NlIHdpbGwgYmUgcnVuIG9uXG4gKiB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHRzIGZpbGxlZCBpbi5cbiAqLyBmdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aCA9ICcnKSB7XG4gICAgLy8gdmFsaWRhdGUgZWFjaCBjb25zdGl0dWVudCBlbGVtZW50XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIShrZXkgPT09ICdleHRlbnNpb25TbG90cycgJiYga2V5UGF0aCAhPT0gJycpKSB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IodGhpc0tleVBhdGgsIGBVbmtub3duIGNvbmZpZyBrZXkgJyR7dGhpc0tleVBhdGh9JyBwcm92aWRlZC4gSWdub3JpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKSB7XG4gICAgY2hlY2tUeXBlKGtleVBhdGgsIHNjaGVtYVBhcnQuX3R5cGUsIHZhbHVlKTtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSBhcyBmcmVlZm9ybSBvYmplY3RcbiAgICAgICAgICAgIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKCEoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpKSkge1xuICAgICAgICAgICAgLy8gdmFsaWRhdGUgYXMgbm9ybWFsIG5lc3RlZCBjb25maWdcbiAgICAgICAgICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLkFycmF5KSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEsIGNvbmZpZywga2V5UGF0aCkge1xuICAgIGlmIChmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZSwgYCR7a2V5UGF0aH0uJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKGFycmF5U2NoZW1hLCB2YWx1ZSwga2V5UGF0aCkge1xuICAgIGNvbnN0IHZhbGlkYXRlZEFzQXJyYXkgPSBjaGVja1R5cGUoa2V5UGF0aCwgVHlwZS5BcnJheSwgdmFsdWUpO1xuICAgIGlmICghdmFsaWRhdGVkQXNBcnJheSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFycmF5IGVsZW1lbnQgb2JqZWN0IHNjaGVtYSwgdmVyaWZ5IHRoYXQgZWxlbWVudHMgbWF0Y2ggaXRcbiAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGFycmF5U2NoZW1hLl9lbGVtZW50cykpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKGFycmF5U2NoZW1hLl9lbGVtZW50cywgdmFsdWVbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY2hlY2tUeXBlKGAke2tleVBhdGh9WyR7aX1dYCwgYXJyYXlTY2hlbWEuX2VsZW1lbnRzPy5fdHlwZSwgdmFsdWVbaV0pO1xuICAgIH1cbn1cbi8qKlxuICogUnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBpbiB0aGUgY29uZmlnIHRyZWUuIFRoaXMgc2hvdWxkIGJlIHJ1blxuICogb24gdGhlIGNvbmZpZyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYWxsIHRoZSBkZWZhdWx0cywgc2luY2VcbiAqIGhpZ2hlci1sZXZlbCB2YWxpZGF0b3JzIG1heSByZWZlciB0byBkZWZhdWx0IHZhbHVlcy5cbiAqLyBmdW5jdGlvbiBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoID0gJycpIHtcbiAgICAvLyBJZiBgIXNjaGVtYWAsIHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gYSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZXJyb3IgcHJpbnRlZCBhbHJlYWR5LlxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gc2NoZW1hLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHNjaGVtYS5fdmFsaWRhdG9ycywgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKXtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5fdHlwZSA9PT0gVHlwZS5PYmplY3QgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGNvbmZpZy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEuX2VsZW1lbnRzLCBjb25maWdbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJ1biB0eXBlIHZhbGlkYXRpb24gZm9yIHRoZSB2YWx1ZSwgbG9nZ2luZyBhbnkgZXJyb3JzLlxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZGF0aW9uIHBhc3NlcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi8gZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGgsIF90eXBlLCB2YWx1ZSkge1xuICAgIGlmIChfdHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB7XG4gICAgICAgICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgICAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgICAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICAgICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgICAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICAgICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICAgICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBydW5WYWxpZGF0b3JzKGtleVBhdGgsIFtcbiAgICAgICAgICAgIHZhbGlkYXRvcltfdHlwZV1cbiAgICAgICAgXSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUnVucyB2YWxpZGF0b3JzLCBsb2dnaW5nIGVycm9ycy5cbiAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHBhc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqLyBmdW5jdGlvbiBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHZhbGlkYXRvcnMsIHZhbHVlKSB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcbiAgICBpZiAodmFsaWRhdG9ycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gYEludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCA6IGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWUgJHt2YWx1ZX0gZm9yICR7a2V5UGF0aH06ICR7dmFsaWRhdG9yUmVzdWx0fWA7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU2tpcHBpbmcgaW52YWxpZCB2YWxpZGF0b3IgYXQgXCIke2tleVBhdGh9XCIuIEVuY291bnRlcmVkIGVycm9yXFxuXFx0JHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbi8vIFJlY3Vyc2l2ZWx5IGZpbGwgaW4gdGhlIGNvbmZpZyB3aXRoIHZhbHVlcyBmcm9tIHRoZSBzY2hlbWEuXG5jb25zdCBzZXREZWZhdWx0cyA9IChzY2hlbWEsIGlucHV0Q29uZmlnKT0+e1xuICAgIGNvbnN0IGNvbmZpZyA9IGNsb25lKGlucHV0Q29uZmlnKTtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKXtcbiAgICAgICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZ1trZXldO1xuICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgIC8vIFRoZSBgc2NoZW1hUGFydCAmJmAgY2xhdXNlIG9mIHRoaXMgYGlmYCBzdGF0ZW1lbnQgd2lsbCBvbmx5IGZhaWxcbiAgICAgICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2ZXJ5IGludmFsaWQuIEl0IGlzIHRoZXJlIHRvIHByZXZlbnQgdGhlIGFwcCBmcm9tXG4gICAgICAgIC8vIGNyYXNoaW5nIGNvbXBsZXRlbHksIHRob3VnaCBpdCB3aWxsIHByb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCB0aGVyZSBzaG91bGQgYmUgbGVnaWJsZSBlcnJvcnMgaW4gdGhlIGNvbnNvbGUgZnJvbVxuICAgICAgICAvLyB0aGUgc2NoZW1hIHZhbGlkYXRvci5cbiAgICAgICAgaWYgKHNjaGVtYVBhcnQgJiYgKHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ190eXBlJykgfHwgc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkpIHtcbiAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHNjaGVtYVBhcnQgZGVmaW5lcyBhIGNvbmZpZyB2YWx1ZSwgc2luY2UgaXQgaGFzXG4gICAgICAgICAgICAvLyBhIHByb3BlcnR5IGBfdHlwZWAgb3IgYF9kZWZhdWx0YC5cbiAgICAgICAgICAgIGlmICghY29uZmlnLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHNjaGVtYVBhcnRbJ19kZWZhdWx0J107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBhbHNvIGNoZWNrIGlmIGl0IGlzIGFuIG9iamVjdCBvciBhcnJheSB3aXRoIG9iamVjdCBlbGVtZW50cywgaW4gd2hpY2ggY2FzZSB3ZSByZWN1cnNlXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1BhcnQgJiYgaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLkFycmF5ICYmIEFycmF5LmlzQXJyYXkoY29uZmlnUGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnV2l0aERlZmF1bHRzID0gY29uZmlnUGFydC5tYXAoKGNvbmYpPT5zZXREZWZhdWx0cyhlbGVtZW50cywgY29uZikpO1xuICAgICAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IGNvbmZpZ1dpdGhEZWZhdWx0cztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9iamVjdEtleSBvZiBPYmplY3Qua2V5cyhjb25maWdQYXJ0KSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdQYXJ0W29iamVjdEtleV0gPSBzZXREZWZhdWx0cyhlbGVtZW50cywgY29uZmlnUGFydFtvYmplY3RLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBzY2hlbWFQYXJ0IGhhcyBubyBwcm9wZXJ0eSBcIl90eXBlXCIsIGlmIGl0J3MgYW4gb3JkaW5hcnkgb2JqZWN0XG4gICAgICAgICAgICAvLyAodW5saWtlLCBpbXBvcnRhbnRseSwgdGhlIHZhbGlkYXRvcnMgYXJyYXkpLCB3ZSBhc3N1bWUgaXQgaXMgYSBwYXJlbnQgY29uZmlnIHByb3BlcnR5LlxuICAgICAgICAgICAgLy8gV2UgcmVjdXJzZSB0byBjb25maWdba2V5XSBhbmQgc2NoZW1hW2tleV0uIERlZmF1bHQgY29uZmlnW2tleV0gdG8ge30uXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ1BhcnQgPSBjb25maWdQYXJ0ID8/IHt9O1xuICAgICAgICAgICAgLy8gVGhlcmUgd2lsbCBoYXZlIGJlZW4gYSB2YWxpZGF0aW9uIGVycm9yIGFscmVhZHkgaWYgY29uZmlnUGFydCBpcyBub3QgYSBwbGFpbiBvYmplY3QuXG4gICAgICAgICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChzZWxlY3RlZENvbmZpZ1BhcnQpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSBzZXREZWZhdWx0cyhzY2hlbWFQYXJ0LCBzZWxlY3RlZENvbmZpZ1BhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59O1xuZnVuY3Rpb24gaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzU2NoZW1hKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudHNTY2hlbWEgJiYgT2JqZWN0LmtleXMoZWxlbWVudHNTY2hlbWEpLmZpbHRlcigoZSk9PiFbXG4gICAgICAgICAgICAnX2RlZmF1bHQnLFxuICAgICAgICAgICAgJ192YWxpZGF0b3JzJ1xuICAgICAgICBdLmluY2x1ZGVzKGUpKS5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBrZXkgPSBgJHtrZXlQYXRofTo6OiR7bWVzc2FnZX1gO1xuICAgIC8vIHRlY2huaWNhbGx5LCB0aGlzIHNob3VsZCBub3QgYmUgcG9zc2libGUsIGJ1dCBiZWNhdXNlIG9mIGhvdyB0aGluZ3Mgd2luZC11cCB0cmFuc3BpbGVkLCB0aGlzIGlzbid0IGltcG9zc2libGVcbiAgICBpZiAoIWRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcykge1xuICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGlmICghZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5hZGQoa2V5KTtcbiAgICB9XG59XG4vKipcbiAqIE5vcm1hbGx5LCBjb25maWd1cmF0aW9uIGVycm9ycyBhcmUgb25seSBkaXNwbGF5ZWQgb25jZS4gVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGxpc3Qgb2ZcbiAqIGRpc3BsYXllZCBlcnJvcnMsIHNvIHRoYXQgdGhleSB3aWxsIGJlIGRpc3BsYXllZCBhZ2Fpbi5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWdFcnJvcnMoa2V5UGF0aCkge1xuICAgIGlmIChrZXlQYXRoKSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoa2V5UGF0aCkpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5jbGVhcigpO1xuICAgIH1cbn1cbi8qKlxuICogQ29waWVkIG92ZXIgZnJvbSBlc20tZXh0ZW5zaW9ucy4gSXQgcmlnaHRseSBiZWxvbmdzIHRvIHRoYXQgbW9kdWxlLCBidXQgZXNtLWNvbmZpZ1xuICogY2Fubm90IGRlcGVuZCBvbiBlc20tZXh0ZW5zaW9ucy5cbiAqLyBmdW5jdGlvbiBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKSB7XG4gICAgY29uc3QgW2V4dGVuc2lvbk5hbWVdID0gZXh0ZW5zaW9uSWQuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uTmFtZTtcbn1cbi8qKlxuICogVGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBzY2hlbWEgaXMgdXNlZCBpbiB0aGUgaW1wbGljaXQgc2NoZW1hIGdpdmVuIHRvIGV2ZXJ5IG1vZHVsZTtcbiAqIHBsdXMgYW55IGFkZGl0aW9uYWwgdHJhbnNsYXRpb24gbmFtZXNwYWNlcyAoYXQgdGltZSBvZiB3cml0aW5nLCB0aGlzIGlzIGp1c3QgJ2NvcmUnKS5cbiAqLyBjb25zdCB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSA9IHtcbiAgICAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJzoge1xuICAgICAgICBfZGVzY3JpcHRpb246ICdQZXItbGFuZ3VhZ2Ugb3ZlcnJpZGVzIGZvciBmcm9udGVuZCB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIGtleWVkIGJ5IGxhbmd1YWdlIGNvZGUgYW5kIGVhY2ggbGFuZ3VhZ2UgZGljdGlvbmFyeSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24ga2V5IGFuZCB0aGUgZGlzcGxheSB2YWx1ZScsXG4gICAgICAgIF90eXBlOiBUeXBlLk9iamVjdCxcbiAgICAgICAgX2RlZmF1bHQ6IHt9LFxuICAgICAgICBfdmFsaWRhdG9yczogW1xuICAgICAgICAgICAgdmFsaWRhdG9yKChvKT0+T2JqZWN0LmtleXMobykuZXZlcnkoKGspPT4vXlthLXpdezIsM30oLVtBLVpdezIsM30pPyQvLnRlc3QoaykpLCAobyk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBiYWRLZXlzID0gT2JqZWN0LmtleXMobykuZmlsdGVyKChrKT0+IS9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUaGUgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcycgb2JqZWN0IHNob3VsZCBoYXZlIGxhbmd1YWdlIGNvZGVzIGZvciBrZXlzLiBMYW5ndWFnZSBjb2RlcyBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgdHdvLXRvLXRocmVlIGxldHRlciBsYW5ndWFnZSBjb2RlIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBoeXBoZW4gYW5kIGEgdHdvLXRvLXRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUuIFRoZSBmb2xsb3dpbmcga2V5cyBkbyBub3QgY29uZm9ybTogJHtiYWRLZXlzLmpvaW4oJywgJyl9LmA7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfVxufTtcbi8qKlxuICogVGhlIGltcGxpY2l0Q29uZmlnU2NoZW1hIGlzIGltcGxpY2l0bHkgaW5jbHVkZWQgaW4gZXZlcnkgY29uZmlndXJhdGlvbiBzY2hlbWFcbiAqLyBjb25zdCBpbXBsaWNpdENvbmZpZ1NjaGVtYSA9IHtcbiAgICAnRGlzcGxheSBjb25kaXRpb25zJzoge1xuICAgICAgICBwcml2aWxlZ2VzOiB7XG4gICAgICAgICAgICBfZGVzY3JpcHRpb246ICdUaGUgcHJpdmlsZWdlKHMpIHRoZSB1c2VyIG11c3QgaGF2ZSB0byB1c2UgdGhpcyBleHRlbnNpb24nLFxuICAgICAgICAgICAgX3R5cGU6IFR5cGUuQXJyYXksXG4gICAgICAgICAgICBfZGVmYXVsdDogW11cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLi4udHJhbnNsYXRpb25PdmVycmlkZXNTY2hlbWFcbn07XG4iXSwibmFtZXMiOlsiY2xvbmUiLCJyZWR1Y2UiLCJtZXJnZURlZXBSaWdodCIsImVxdWFscyIsIm9taXQiLCJUeXBlIiwiaXNBcnJheSIsImlzQm9vbGVhbiIsImlzVXVpZCIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInZhbGlkYXRvciIsImNvbmZpZ0ludGVybmFsU3RvcmUiLCJjb25maWdFeHRlbnNpb25TdG9yZSIsImdldENvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnIiwiZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIiwidGVtcG9yYXJ5Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlIiwiY29tcHV0ZU1vZHVsZUNvbmZpZyIsImdldFN0YXRlIiwic3Vic2NyaWJlIiwiY29uZmlnU3RhdGUiLCJ0ZW1wQ29uZmlnU3RhdGUiLCJjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsImNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyIsImNvbXB1dGVFeHRlbnNpb25Db25maWdzIiwiZXh0ZW5zaW9uU3RhdGUiLCJkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMiLCJTZXQiLCJzdGF0ZSIsInRlbXBTdGF0ZSIsIm1vZHVsZU5hbWUiLCJPYmplY3QiLCJrZXlzIiwic2NoZW1hcyIsIm1vZHVsZVN0b3JlIiwibW9kdWxlTG9hZGVkIiwiY29uZmlnIiwiZ2V0Q29uZmlnRm9yTW9kdWxlIiwic2V0U3RhdGUiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCIsImxvYWRlZCIsImdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hIiwic2xvdENvbmZpZ3MiLCJnZXRFeHRlbnNpb25TbG90Q29uZmlncyIsIm5ld1Nsb3RTdG9yZUVudHJpZXMiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJtYXAiLCJzbG90TmFtZSIsInNsb3RTdG9yZSIsIm9sZFN0YXRlIiwibmV3U3RhdGUiLCJzbG90cyIsImdldEltcGxlbWVudGVyVG9vbHNDb25maWciLCJjb25maWdzIiwiZXh0ZW5zaW9uIiwibW91bnRlZEV4dGVuc2lvbnMiLCJjb21wdXRlRXh0ZW5zaW9uQ29uZmlnIiwic2xvdE1vZHVsZU5hbWUiLCJleHRlbnNpb25Nb2R1bGVOYW1lIiwiZXh0ZW5zaW9uSWQiLCJkZWZpbmVDb25maWdTY2hlbWEiLCJzY2hlbWEiLCJ2YWxpZGF0ZUNvbmZpZ1NjaGVtYSIsImVuaGFuY2VkU2NoZW1hIiwiaW1wbGljaXRDb25maWdTY2hlbWEiLCJyZWdpc3Rlck1vZHVsZVdpdGhDb25maWdTeXN0ZW0iLCJyZWdpc3Rlck1vZHVsZUxvYWQiLCJyZWdpc3RlclRyYW5zbGF0aW9uTmFtZXNwYWNlIiwibmFtZXNwYWNlIiwidHJhbnNsYXRpb25PdmVycmlkZXNTY2hlbWEiLCJkZWZpbmVFeHRlbnNpb25Db25maWdTY2hlbWEiLCJleHRlbnNpb25OYW1lIiwiY29uc29sZSIsImVycm9yIiwicHJvdmlkZSIsInNvdXJjZU5hbWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzb3VyY2UiLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInN0b3JlIiwidXBkYXRlIiwidW5zdWJzY3JpYmUiLCJnZXRUcmFuc2xhdGlvbk92ZXJyaWRlcyIsInByb21pc2VzIiwiY29uZmlnU3RvcmUiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlcyIsInB1c2giLCJhbGwiLCJwcm9jZXNzQ29uZmlnIiwicHJvdmlkZWRDb25maWciLCJrZXlQYXRoQ29udGV4dCIsInZhbGlkYXRlU3RydWN0dXJlIiwic2V0RGVmYXVsdHMiLCJydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlIiwiZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZCIsImV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsIm5hbWVPZlNjaGVtYVNvdXJjZSIsImdldFByb3ZpZGVkQ29uZmlncyIsInNsb3RNb2R1bGVDb25maWciLCJtZXJnZUNvbmZpZ3NGb3IiLCJjb25maWdPdmVycmlkZSIsImV4dGVuc2lvblNsb3RzIiwiY29uZmlndXJlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiY29tYmluZWRDb25maWciLCJtZXJnZUNvbmZpZ3MiLCJyZXN1bHQiLCJnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyIsImNvbmZpZ3NBbmRTb3VyY2VzIiwiYyIsImNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlIiwiaGFzT3duUHJvcGVydHkiLCJfdmFsdWUiLCJfZGVmYXVsdCIsIl9zb3VyY2UiLCJpc09yZGluYXJ5T2JqZWN0Iiwib2JqIiwia2V5IiwiYWxsQ29uZmlncyIsInNsb3RDb25maWdQZXJNb2R1bGUiLCJ2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzIiwiY29uZmlnQnlTbG90TmFtZSIsInZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyIsImtleVBhdGgiLCJlcnJvclByZWZpeCIsImludmFsaWRLZXlzIiwiZmlsdGVyIiwiayIsImluY2x1ZGVzIiwibGVuZ3RoIiwibG9nRXJyb3IiLCJqb2luIiwiYWRkIiwiQXJyYXkiLCJldmVyeSIsIm4iLCJyZW1vdmUiLCJvcmRlciIsInVwZGF0ZU1lc3NhZ2UiLCJzdGFydHNXaXRoIiwidGhpc0tleVBhdGgiLCJzY2hlbWFQYXJ0IiwiZWxlbWVudHMiLCJfZWxlbWVudHMiLCJoYXNPYmplY3RTY2hlbWEiLCJfdmFsaWRhdG9ycyIsInZhbHVlVHlwZSIsIl90eXBlIiwidmFsdWVzIiwiSlNPTiIsInN0cmluZ2lmeSIsImlucHV0Q29uZmlnIiwiYWxsQ29uZmlnc0Zvck1vZHVsZSIsIm1lcmdlRGVlcEFsbCIsInZhbHVlIiwidmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUiLCJjaGVja1R5cGUiLCJ2YWxpZGF0ZUZyZWVmb3JtT2JqZWN0U3RydWN0dXJlIiwidmFsaWRhdGVBcnJheVN0cnVjdHVyZSIsImZyZWVmb3JtT2JqZWN0U2NoZW1hIiwiYXJyYXlTY2hlbWEiLCJ2YWxpZGF0ZWRBc0FycmF5IiwiaSIsInJ1blZhbGlkYXRvcnMiLCJCb29sZWFuIiwiQ29uY2VwdFV1aWQiLCJOdW1iZXIiLCJTdHJpbmciLCJVVUlEIiwiUGVyc29uQXR0cmlidXRlVHlwZVV1aWQiLCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkIiwidmFsaWRhdG9ycyIsInJldHVyblZhbHVlIiwidmFsaWRhdG9yUmVzdWx0IiwibWVzc2FnZSIsImUiLCJjb25maWdQYXJ0IiwiY29uZmlnV2l0aERlZmF1bHRzIiwiY29uZiIsIm9iamVjdEtleSIsInNlbGVjdGVkQ29uZmlnUGFydCIsImVsZW1lbnRzU2NoZW1hIiwiaGFzIiwiY2xlYXJDb25maWdFcnJvcnMiLCJmb3JFYWNoIiwiZGVsZXRlIiwiY2xlYXIiLCJzcGxpdCIsIl9kZXNjcmlwdGlvbiIsIm8iLCJ0ZXN0IiwiYmFkS2V5cyIsInByaXZpbGVnZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/module-config.js\n");
29
-
30
- /***/ }),
31
-
32
- /***/ "../../framework/esm-config/dist/module-config/state.js":
33
- /*!**************************************************************!*\
34
- !*** ../../framework/esm-config/dist/module-config/state.js ***!
35
- \**************************************************************/
36
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
37
-
38
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ configExtensionStore: () => (/* binding */ configExtensionStore),\n/* harmony export */ configInternalStore: () => (/* binding */ configInternalStore),\n/* harmony export */ getConfigStore: () => (/* binding */ getConfigStore),\n/* harmony export */ getExtensionConfig: () => (/* binding */ getExtensionConfig),\n/* harmony export */ getExtensionConfigFromStore: () => (/* binding */ getExtensionConfigFromStore),\n/* harmony export */ getExtensionSlotConfig: () => (/* binding */ getExtensionSlotConfig),\n/* harmony export */ getExtensionSlotConfigFromStore: () => (/* binding */ getExtensionSlotConfigFromStore),\n/* harmony export */ getExtensionSlotsConfigStore: () => (/* binding */ getExtensionSlotsConfigStore),\n/* harmony export */ getExtensionsConfigStore: () => (/* binding */ getExtensionsConfigStore),\n/* harmony export */ implementerToolsConfigStore: () => (/* binding */ implementerToolsConfigStore),\n/* harmony export */ temporaryConfigStore: () => (/* binding */ temporaryConfigStore)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-state */ \"../../framework/esm-state/dist/index.js\");\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/** @module @category Config */ \n\nconst configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ const configInternalStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-internal', configInternalStoreInitialValue);\n/** @internal */ const temporaryConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('temporary-config', {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe((state)=>{\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n localStorage.setItem('openmrs:temporaryConfig', JSON.stringify(value));\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem('openmrs:temporaryConfig') || '{}');\n } catch (e) {\n return {};\n }\n}\n/** @internal */ const configExtensionStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-store-of-extension-state', {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/** @internal */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-${moduleName}`\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-module-${moduleName}`, initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-extension-slots`, {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n const slotConfig = state.slots[slotName];\n return slotConfig ?? {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore)(`config-extensions`, {\n configs: {}\n });\n}\n/** @internal */ function getExtensionConfig(slotName, extensionId) {\n if (typeof slotName !== 'string' || typeof extensionId !== 'string' || slotName === '__proto__' || extensionId === '__proto__' || slotName === 'constructor' || extensionId === 'constructor' || slotName === 'prototype' || extensionId === 'prototype') {\n throw new Error('Attempted to call `getExtensionConfig()` with invalid argument');\n }\n const extensionConfigStore = getExtensionsConfigStore();\n const selector = (configStore)=>configStore.configs[slotName]?.[extensionId];\n return {\n getInitialState () {\n return selector(extensionConfigStore.getInitialState());\n },\n getState () {\n return selector(extensionConfigStore.getState()) ?? {\n loaded: false,\n config: null\n };\n },\n setState (partial, replace = false) {\n extensionConfigStore.setState((state)=>{\n if (!state.configs[slotName]) {\n state.configs[slotName] = {};\n }\n const newState = typeof partial === 'function' ? partial(state.configs.slotName[extensionId]) : partial;\n if (replace) {\n state.configs[slotName][extensionId] = Object.assign({}, newState);\n } else {\n state.configs[slotName][extensionId] = Object.assign({}, state.configs[slotName][extensionId], newState);\n }\n return state;\n });\n },\n subscribe (listener) {\n return extensionConfigStore.subscribe((state, prevState)=>{\n const newState = selector(state);\n const oldState = selector(prevState);\n if (!(0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__.shallowEqual)(newState, oldState)) {\n listener(newState, oldState);\n }\n });\n },\n destroy () {\n /* this is a no-op */ }\n };\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n const extensionConfig = state.configs[slotName]?.[extensionId];\n return extensionConfig ?? {\n loaded: false,\n config: null\n };\n}\n/** @internal */ const implementerToolsConfigStore = (0,_openmrs_esm_state__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore)('config-implementer-tools', {\n config: {}\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL3N0YXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2QkFBNkIsR0FBMEU7QUFDckQ7QUFDbEQsTUFBTUcsa0NBQWtDO0lBQ3BDQyxpQkFBaUIsRUFBRTtJQUNuQkMsU0FBUyxDQUFDO0lBQ1ZDLGNBQWMsQ0FBQztBQUNuQjtBQUNBOztDQUVDLEdBQVUsTUFBTUMsc0JBQXNCUCxxRUFBaUJBLENBQUMsbUJBQW1CRyxpQ0FBaUM7QUFDN0csY0FBYyxHQUFVLE1BQU1LLHVCQUF1QlIscUVBQWlCQSxDQUFDLG9CQUFvQjtJQUN2RlMsUUFBUUM7QUFDWixHQUFHO0FBQ0hGLHFCQUFxQkcsU0FBUyxDQUFDLENBQUNDO0lBQzVCQyxtQkFBbUJELE1BQU1ILE1BQU07QUFDbkM7QUFDQSxTQUFTSSxtQkFBbUJDLEtBQUs7SUFDN0JDLGFBQWFDLE9BQU8sQ0FBQywyQkFBMkJDLEtBQUtDLFNBQVMsQ0FBQ0o7QUFDbkU7QUFDQSxTQUFTSjtJQUNMLElBQUk7UUFDQSxPQUFPTyxLQUFLRSxLQUFLLENBQUNKLGFBQWFLLE9BQU8sQ0FBQyw4QkFBOEI7SUFDekUsRUFBRSxPQUFPQyxHQUFHO1FBQ1IsT0FBTyxDQUFDO0lBQ1o7QUFDSjtBQUNBLGNBQWMsR0FBVSxNQUFNQyx1QkFBdUJ0QixxRUFBaUJBLENBQUMsbUNBQW1DO0lBQ3RHdUIsbUJBQW1CLEVBQUU7QUFDekIsR0FBRztBQUNILFNBQVNDO0lBQ0wsT0FBTztRQUNIZixRQUFRO1FBQ1JnQixRQUFRO1FBQ1JDLDRCQUE0QjtJQUNoQztBQUNKO0FBQ0EsY0FBYyxHQUFVLFNBQVNDLGVBQWVDLFVBQVU7SUFDdEQsd0VBQXdFO0lBQ3hFLE9BQU8zQixrRUFBY0EsQ0FBQyxDQUFDLGNBQWMsRUFBRTJCLFlBQVksRUFBRUo7QUFDekQ7QUFDQSxjQUFjLEdBQVUsU0FBU0s7SUFDN0IsT0FBTzVCLGtFQUFjQSxDQUFDLENBQUMs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Ly4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvbW9kdWxlLWNvbmZpZy9zdGF0ZS5qcz9lOTAwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi8gaW1wb3J0IHsgY3JlYXRlR2xvYmFsU3RvcmUsIGdldEdsb2JhbFN0b3JlIH0gZnJvbSBcIkBvcGVubXJzL2VzbS1zdGF0ZVwiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSBcIkBvcGVubXJzL2VzbS11dGlsc1wiO1xuY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSA9IHtcbiAgICBwcm92aWRlZENvbmZpZ3M6IFtdLFxuICAgIHNjaGVtYXM6IHt9LFxuICAgIG1vZHVsZUxvYWRlZDoge31cbn07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBjb25zdCBjb25maWdJbnRlcm5hbFN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ2NvbmZpZy1pbnRlcm5hbCcsIGNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUpO1xuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgY29uc3QgdGVtcG9yYXJ5Q29uZmlnU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZSgndGVtcG9yYXJ5LWNvbmZpZycsIHtcbiAgICBjb25maWc6IGdldFRlbXBvcmFyeUNvbmZpZygpXG59KTtcbnRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgc2V0VGVtcG9yYXJ5Q29uZmlnKHN0YXRlLmNvbmZpZyk7XG59KTtcbmZ1bmN0aW9uIHNldFRlbXBvcmFyeUNvbmZpZyh2YWx1ZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvcGVubXJzOnRlbXBvcmFyeUNvbmZpZycsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG59XG5mdW5jdGlvbiBnZXRUZW1wb3JhcnlDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29wZW5tcnM6dGVtcG9yYXJ5Q29uZmlnJykgfHwgJ3t9Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgY29uc3QgY29uZmlnRXh0ZW5zaW9uU3RvcmUgPSBjcmVhdGVHbG9iYWxTdG9yZSgnY29uZmlnLXN0b3JlLW9mLWV4dGVuc2lvbi1zdGF0ZScsIHtcbiAgICBtb3VudGVkRXh0ZW5zaW9uczogW11cbn0pO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbmZpZzogbnVsbCxcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IGZhbHNlXG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1N0b3JlKG1vZHVsZU5hbWUpIHtcbiAgICAvLyBXZSB1c2UgYSBzdG9yZSBmb3IgZWFjaCBtb2R1bGUncyBjb25maWcsIG5hbWVkIGBjb25maWctJHttb2R1bGVOYW1lfWBcbiAgICByZXR1cm4gZ2V0R2xvYmFsU3RvcmUoYGNvbmZpZy1tb2R1bGUtJHttb2R1bGVOYW1lfWAsIGluaXRpYWxpemVDb25maWdTdG9yZSgpKTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbFN0b3JlKGBjb25maWctZXh0ZW5zaW9uLXNsb3RzYCwge1xuICAgICAgICBzbG90czoge31cbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWcoc2xvdE5hbWUpIHtcbiAgICByZXR1cm4gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUpO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgc2xvdE5hbWUpIHtcbiAgICBjb25zdCBzbG90Q29uZmlnID0gc3RhdGUuc2xvdHNbc2xvdE5hbWVdO1xuICAgIHJldHVybiBzbG90Q29uZmlnID8/IHtcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgY29uZmlnOiB7fVxuICAgIH07XG59XG4vKipcbiAqIE9uZSBzdG9yZSBmb3IgYWxsIHRoZSBleHRlbnNpb25zXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkge1xuICAgIHJldHVybiBnZXRHbG9iYWxTdG9yZShgY29uZmlnLWV4dGVuc2lvbnNgLCB7XG4gICAgICAgIGNvbmZpZ3M6IHt9XG4gICAgfSk7XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWcoc2xvdE5hbWUsIGV4dGVuc2lvbklkKSB7XG4gICAgaWYgKHR5cGVvZiBzbG90TmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGV4dGVuc2lvbklkICE9PSAnc3RyaW5nJyB8fCBzbG90TmFtZSA9PT0gJ19fcHJvdG9fXycgfHwgZXh0ZW5zaW9uSWQgPT09ICdfX3Byb3RvX18nIHx8IHNsb3ROYW1lID09PSAnY29uc3RydWN0b3InIHx8IGV4dGVuc2lvbklkID09PSAnY29uc3RydWN0b3InIHx8IHNsb3ROYW1lID09PSAncHJvdG90eXBlJyB8fCBleHRlbnNpb25JZCA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gY2FsbCBgZ2V0RXh0ZW5zaW9uQ29uZmlnKClgIHdpdGggaW52YWxpZCBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBjb25zdCBleHRlbnNpb25Db25maWdTdG9yZSA9IGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSgpO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gKGNvbmZpZ1N0b3JlKT0+Y29uZmlnU3RvcmUuY29uZmlnc1tzbG90TmFtZV0/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcihleHRlbnNpb25Db25maWdTdG9yZS5nZXRJbml0aWFsU3RhdGUoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFN0YXRlICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcihleHRlbnNpb25Db25maWdTdG9yZS5nZXRTdGF0ZSgpKSA/PyB7XG4gICAgICAgICAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHNldFN0YXRlIChwYXJ0aWFsLCByZXBsYWNlID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkNvbmZpZ1N0b3JlLnNldFN0YXRlKChzdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdHlwZW9mIHBhcnRpYWwgPT09ICdmdW5jdGlvbicgPyBwYXJ0aWFsKHN0YXRlLmNvbmZpZ3Muc2xvdE5hbWVbZXh0ZW5zaW9uSWRdKSA6IHBhcnRpYWw7XG4gICAgICAgICAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29uZmlnc1tzbG90TmFtZV1bZXh0ZW5zaW9uSWRdID0gT2JqZWN0LmFzc2lnbih7fSwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdW2V4dGVuc2lvbklkXSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmNvbmZpZ3Nbc2xvdE5hbWVdW2V4dGVuc2lvbklkXSwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3Vic2NyaWJlIChsaXN0ZW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZ1N0b3JlLnN1YnNjcmliZSgoc3RhdGUsIHByZXZTdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IHNlbGVjdG9yKHByZXZTdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihuZXdTdGF0ZSwgb2xkU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95ICgpIHtcbiAgICAgICAgLyogdGhpcyBpcyBhIG5vLW9wICovIH1cbiAgICB9O1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlKHN0YXRlLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWcgPSBzdGF0ZS5jb25maWdzW3Nsb3ROYW1lXT8uW2V4dGVuc2lvbklkXTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uQ29uZmlnID8/IHtcbiAgICAgICAgbG9hZGVkOiBmYWxzZSxcbiAgICAgICAgY29uZmlnOiBudWxsXG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGNvbnN0IGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctaW1wbGVtZW50ZXItdG9vbHMnLCB7XG4gICAgY29uZmlnOiB7fVxufSk7XG4iXSwibmFtZXMiOlsiY3JlYXRlR2xvYmFsU3RvcmUiLCJnZXRHbG9iYWxTdG9yZSIsInNoYWxsb3dFcXVhbCIsImNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUiLCJwcm92aWRlZENvbmZpZ3MiLCJzY2hlbWFzIiwibW9kdWxlTG9hZGVkIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsInRlbXBvcmFyeUNvbmZpZ1N0b3JlIiwiY29uZmlnIiwiZ2V0VGVtcG9yYXJ5Q29uZmlnIiwic3Vic2NyaWJlIiwic3RhdGUiLCJzZXRUZW1wb3JhcnlDb25maWciLCJ2YWx1ZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwicGFyc2UiLCJnZXRJdGVtIiwiZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwibW91bnRlZEV4dGVuc2lvbnMiLCJpbml0aWFsaXplQ29uZmlnU3RvcmUiLCJsb2FkZWQiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCIsImdldENvbmZpZ1N0b3JlIiwibW9kdWxlTmFtZSIsImdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUiLCJzbG90cyIsImdldEV4dGVuc2lvblNsb3RDb25maWciLCJzbG90TmFtZSIsImdldEV4dGVuc2lvblNsb3RDb25maWdGcm9tU3RvcmUiLCJnZXRTdGF0ZSIsInNsb3RDb25maWciLCJnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUiLCJjb25maWdzIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uSWQiLCJFcnJvciIsImV4dGVuc2lvbkNvbmZpZ1N0b3JlIiwic2VsZWN0b3IiLCJjb25maWdTdG9yZSIsImdldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwicGFydGlhbCIsInJlcGxhY2UiLCJuZXdTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImxpc3RlbmVyIiwicHJldlN0YXRlIiwib2xkU3RhdGUiLCJkZXN0cm95IiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/state.js\n");
39
-
40
- /***/ }),
41
-
42
- /***/ "../../framework/esm-config/dist/types.js":
43
- /*!************************************************!*\
44
- !*** ../../framework/esm-config/dist/types.js ***!
45
- \************************************************/
46
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
47
-
48
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Type: () => (/* binding */ Type)\n/* harmony export */ });\nvar Type = /*#__PURE__*/ function(Type) {\n Type[\"Array\"] = \"Array\";\n Type[\"Boolean\"] = \"Boolean\";\n Type[\"ConceptUuid\"] = \"ConceptUuid\";\n Type[\"Number\"] = \"Number\";\n Type[\"Object\"] = \"Object\";\n Type[\"String\"] = \"String\";\n Type[\"UUID\"] = \"UUID\";\n Type[\"PersonAttributeTypeUuid\"] = \"PersonAttributeTypeUuid\";\n Type[\"PatientIdentifierTypeUuid\"] = \"PatientIdentifierTypeUuid\";\n return Type;\n}({});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC90eXBlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU8sSUFBSUEsT0FBTyxXQUFXLEdBQUcsU0FBU0EsSUFBSTtJQUN6Q0EsSUFBSSxDQUFDLFFBQVEsR0FBRztJQUNoQkEsSUFBSSxDQUFDLFVBQVUsR0FBRztJQUNsQkEsSUFBSSxDQUFDLGNBQWMsR0FBRztJQUN0QkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLFNBQVMsR0FBRztJQUNqQkEsSUFBSSxDQUFDLE9BQU8sR0FBRztJQUNmQSxJQUFJLENBQUMsMEJBQTBCLEdBQUc7SUFDbENBLElBQUksQ0FBQyw0QkFBNEIsR0FBRztJQUNwQyxPQUFPQTtBQUNYLEVBQUUsQ0FBQyxHQUFHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3R5cGVzLmpzPzQ3MjEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBUeXBlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUeXBlKSB7XG4gICAgVHlwZVtcIkFycmF5XCJdID0gXCJBcnJheVwiO1xuICAgIFR5cGVbXCJCb29sZWFuXCJdID0gXCJCb29sZWFuXCI7XG4gICAgVHlwZVtcIkNvbmNlcHRVdWlkXCJdID0gXCJDb25jZXB0VXVpZFwiO1xuICAgIFR5cGVbXCJOdW1iZXJcIl0gPSBcIk51bWJlclwiO1xuICAgIFR5cGVbXCJPYmplY3RcIl0gPSBcIk9iamVjdFwiO1xuICAgIFR5cGVbXCJTdHJpbmdcIl0gPSBcIlN0cmluZ1wiO1xuICAgIFR5cGVbXCJVVUlEXCJdID0gXCJVVUlEXCI7XG4gICAgVHlwZVtcIlBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkXCJdID0gXCJQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZFwiO1xuICAgIFR5cGVbXCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkXCJdID0gXCJQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkXCI7XG4gICAgcmV0dXJuIFR5cGU7XG59KHt9KTtcbiJdLCJuYW1lcyI6WyJUeXBlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/types.js\n");
49
-
50
- /***/ }),
51
-
52
- /***/ "../../framework/esm-config/dist/validators/type-validators.js":
53
- /*!*********************************************************************!*\
54
- !*** ../../framework/esm-config/dist/validators/type-validators.js ***!
55
- \*********************************************************************/
56
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
57
-
58
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isArray: () => (/* binding */ isArray),\n/* harmony export */ isBoolean: () => (/* binding */ isBoolean),\n/* harmony export */ isNumber: () => (/* binding */ isNumber),\n/* harmony export */ isObject: () => (/* binding */ isObject),\n/* harmony export */ isString: () => (/* binding */ isString),\n/* harmony export */ isUuid: () => (/* binding */ isUuid)\n/* harmony export */ });\n/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n\nconst isArray = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>Array.isArray(val), 'must be an array');\nconst isBoolean = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'boolean', 'must be a boolean');\nconst isNumber = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'number', 'must be a number');\nconst isString = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'string', 'must be a string');\nconst isObject = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>typeof val === 'object' && !Array.isArray(val) && val !== null, 'must be an object (not an array or null)');\nconst isUuid = (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) || /^[0-9a-f]{36}$/i.test(val), 'must be a valid UUID or a 36-character hexadecimal string');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9ycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQTJDO0FBQ3BDLE1BQU1DLFVBQVVELHdEQUFTQSxDQUFDLENBQUNFLE1BQU1DLE1BQU1GLE9BQU8sQ0FBQ0MsTUFBTSxvQkFBb0I7QUFDekUsTUFBTUUsWUFBWUosd0RBQVNBLENBQUMsQ0FBQ0UsTUFBTSxPQUFPQSxRQUFRLFdBQVcscUJBQXFCO0FBQ2xGLE1BQU1HLFdBQVdMLHdEQUFTQSxDQUFDLENBQUNFLE1BQU0sT0FBT0EsUUFBUSxVQUFVLG9CQUFvQjtBQUMvRSxNQUFNSSxXQUFXTix3REFBU0EsQ0FBQyxDQUFDRSxNQUFNLE9BQU9BLFFBQVEsVUFBVSxvQkFBb0I7QUFDL0UsTUFBTUssV0FBV1Asd0RBQVNBLENBQUMsQ0FBQ0UsTUFBTSxPQUFPQSxRQUFRLFlBQVksQ0FBQ0MsTUFBTUYsT0FBTyxDQUFDQyxRQUFRQSxRQUFRLE1BQU0sNENBQTRDO0FBQzlJLE1BQU1NLFNBQVNSLHdEQUFTQSxDQUFDLENBQUNFLE1BQU0sa0VBQWtFTyxJQUFJLENBQUNQLFFBQVEsa0JBQWtCTyxJQUFJLENBQUNQLE1BQU0sNkRBQTZEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3ZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3JzLmpzP2E0N2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdG9yIH0gZnJvbSBcIi4vdmFsaWRhdG9yLmpzXCI7XG5leHBvcnQgY29uc3QgaXNBcnJheSA9IHZhbGlkYXRvcigodmFsKT0+QXJyYXkuaXNBcnJheSh2YWwpLCAnbXVzdCBiZSBhbiBhcnJheScpO1xuZXhwb3J0IGNvbnN0IGlzQm9vbGVhbiA9IHZhbGlkYXRvcigodmFsKT0+dHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nLCAnbXVzdCBiZSBhIGJvb2xlYW4nKTtcbmV4cG9ydCBjb25zdCBpc051bWJlciA9IHZhbGlkYXRvcigodmFsKT0+dHlwZW9mIHZhbCA9PT0gJ251bWJlcicsICdtdXN0IGJlIGEgbnVtYmVyJyk7XG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSB2YWxpZGF0b3IoKHZhbCk9PnR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLCAnbXVzdCBiZSBhIHN0cmluZycpO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdmFsaWRhdG9yKCh2YWwpPT50eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbCAhPT0gbnVsbCwgJ211c3QgYmUgYW4gb2JqZWN0IChub3QgYW4gYXJyYXkgb3IgbnVsbCknKTtcbmV4cG9ydCBjb25zdCBpc1V1aWQgPSB2YWxpZGF0b3IoKHZhbCk9Pi9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pLnRlc3QodmFsKSB8fCAvXlswLTlhLWZdezM2fSQvaS50ZXN0KHZhbCksICdtdXN0IGJlIGEgdmFsaWQgVVVJRCBvciBhIDM2LWNoYXJhY3RlciBoZXhhZGVjaW1hbCBzdHJpbmcnKTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0b3IiLCJpc0FycmF5IiwidmFsIiwiQXJyYXkiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNPYmplY3QiLCJpc1V1aWQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/type-validators.js\n");
59
-
60
- /***/ }),
61
-
62
- /***/ "../../framework/esm-config/dist/validators/validator.js":
63
- /*!***************************************************************!*\
64
- !*** ../../framework/esm-config/dist/validators/validator.js ***!
65
- \***************************************************************/
66
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
67
-
68
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validator: () => (/* binding */ validator)\n/* harmony export */ });\n/** @module @category Config Validation */ /**\n * Constructs a custom validator.\n *\n * ### Example\n *\n * ```typescript\n * {\n * foo: {\n * _default: 0,\n * _validators: [\n * validator(val => val >= 0, \"Must not be negative.\")\n * ]\n * }\n * }\n * ```\n * @param validationFunction Takes the configured value as input. Returns true\n * if it is valid, false otherwise.\n * @param message A string message that explains why the value is invalid. Can\n * also be a function that takes the value as input and returns a string.\n * @returns A validator ready for use in a config schema\n */ function validator(validationFunction, message) {\n return (value)=>{\n if (!validationFunction(value)) {\n if (typeof message === 'function') {\n return message(value);\n } else {\n return message;\n }\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3ZhbGlkYXRvci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0NBQXdDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBb0IxQyxHQUFVLFNBQVNBLFVBQVVDLGtCQUFrQixFQUFFQyxPQUFPO0lBQ3JELE9BQU8sQ0FBQ0M7UUFDSixJQUFJLENBQUNGLG1CQUFtQkUsUUFBUTtZQUM1QixJQUFJLE9BQU9ELFlBQVksWUFBWTtnQkFDL0IsT0FBT0EsUUFBUUM7WUFDbkIsT0FBTztnQkFDSCxPQUFPRDtZQUNYO1FBQ0o7SUFDSjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L3ZhbGlkYXRvcnMvdmFsaWRhdG9yLmpzPzkwNDgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyBWYWxpZGF0aW9uICovIC8qKlxuICogQ29uc3RydWN0cyBhIGN1c3RvbSB2YWxpZGF0b3IuXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB7XG4gKiAgIGZvbzoge1xuICogICAgIF9kZWZhdWx0OiAwLFxuICogICAgIF92YWxpZGF0b3JzOiBbXG4gKiAgICAgICB2YWxpZGF0b3IodmFsID0+IHZhbCA+PSAwLCBcIk11c3Qgbm90IGJlIG5lZ2F0aXZlLlwiKVxuICogICAgIF1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBAcGFyYW0gdmFsaWRhdGlvbkZ1bmN0aW9uIFRha2VzIHRoZSBjb25maWd1cmVkIHZhbHVlIGFzIGlucHV0LiBSZXR1cm5zIHRydWVcbiAqICAgIGlmIGl0IGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAcGFyYW0gbWVzc2FnZSBBIHN0cmluZyBtZXNzYWdlIHRoYXQgZXhwbGFpbnMgd2h5IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLiBDYW5cbiAqICAgIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSB2YWx1ZSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIHJlYWR5IGZvciB1c2UgaW4gYSBjb25maWcgc2NoZW1hXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWxpZGF0aW9uRnVuY3Rpb24sIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKHZhbHVlKT0+e1xuICAgICAgICBpZiAoIXZhbGlkYXRpb25GdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl0sIm5hbWVzIjpbInZhbGlkYXRvciIsInZhbGlkYXRpb25GdW5jdGlvbiIsIm1lc3NhZ2UiLCJ2YWx1ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/validator.js\n");
69
-
70
- /***/ }),
71
-
72
- /***/ "../../framework/esm-config/dist/validators/validators.js":
73
- /*!****************************************************************!*\
74
- !*** ../../framework/esm-config/dist/validators/validators.js ***!
75
- \****************************************************************/
76
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
77
-
78
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ inRange: () => (/* binding */ inRange),\n/* harmony export */ isUrl: () => (/* binding */ isUrl),\n/* harmony export */ isUrlWithTemplateParameters: () => (/* binding */ isUrlWithTemplateParameters),\n/* harmony export */ oneOf: () => (/* binding */ oneOf),\n/* harmony export */ validators: () => (/* binding */ validators)\n/* harmony export */ });\n/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ \"../../framework/esm-config/dist/validators/validator.js\");\n/** @module @category Config Validation */ \n/**\n * Verifies that the value is between the provided minimum and maximum\n *\n * @param min Minimum acceptable value\n * @param max Maximum acceptable value\n */ const inRange = (min, max)=>{\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>min <= val && val <= max, `must be between ${min} and ${max}`);\n};\n/**\n * Verifies that a string contains only the default URL template\n * parameters, plus any specified in `allowedTemplateParameters`.\n *\n * @param allowedTemplateParameters To be added to `openmrsBase` and `openmrsSpaBase`\n * @category Navigation\n */ const isUrlWithTemplateParameters = (allowedTemplateParameters)=>{\n const allowedParams = allowedTemplateParameters.concat([\n 'openmrsBase',\n 'openmrsSpaBase'\n ]);\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>{\n if (!val || typeof val != 'string') {\n return false;\n }\n const rx = /\\${(.*?)}/g;\n let match = rx.exec(val);\n while(match){\n if (!allowedParams.includes(match[1])) {\n return false;\n }\n match = rx.exec(val);\n }\n return true;\n }, 'Should be a URL or path. The allowed template parameters are ' + allowedParams.map((p)=>'${' + p + '}').join(', '));\n};\n/**\n * Verifies that a string contains only the default URL template parameters.\n *\n * @category Navigation\n */ const isUrl = isUrlWithTemplateParameters([]);\n/**\n * Verifies that the value is one of the allowed options.\n * @param allowedValues The list of allowable values\n */ const oneOf = (allowedValues)=>{\n return (0,_validator_js__WEBPACK_IMPORTED_MODULE_0__.validator)((val)=>allowedValues.includes(val), `Must be one of the following: '${allowedValues.join(\"', '\")}'.`);\n};\nconst validators = {\n inRange,\n isUrl,\n isUrlWithTemplateParameters,\n oneOf\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC92YWxpZGF0b3JzL3ZhbGlkYXRvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsd0NBQXdDLEdBQThDO0FBQ3RGOzs7OztDQUtDLEdBQVUsTUFBTUMsVUFBVSxDQUFDQyxLQUFLQztJQUM3QixPQUFPSCx3REFBU0EsQ0FBQyxDQUFDSSxNQUFNRixPQUFPRSxPQUFPQSxPQUFPRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUVELElBQUksS0FBSyxFQUFFQyxLQUFLO0FBQ3pGLEVBQUU7QUFDRjs7Ozs7O0NBTUMsR0FBVSxNQUFNRSw4QkFBOEIsQ0FBQ0M7SUFDNUMsTUFBTUMsZ0JBQWdCRCwwQkFBMEJFLE1BQU0sQ0FBQztRQUNuRDtRQUNBO0tBQ0g7SUFDRCxPQUFPUix3REFBU0EsQ0FBQyxDQUFDSTtRQUNkLElBQUksQ0FBQ0EsT0FBTyxPQUFPQSxPQUFPLFVBQVU7WUFDaEMsT0FBTztRQUNYO1FBQ0EsTUFBTUssS0FBSztRQUNYLElBQUlDLFFBQVFELEdBQUdFLElBQUksQ0FBQ1A7UUFDcEIsTUFBTU0sTUFBTTtZQUNSLElBQUksQ0FBQ0gsY0FBY0ssUUFBUSxDQUFDRixLQUFLLENBQUMsRUFBRSxHQUFHO2dCQUNuQyxPQUFPO1lBQ1g7WUFDQUEsUUFBUUQsR0FBR0UsSUFBSSxDQUFDUDtRQUNwQjtRQUNBLE9BQU87SUFDWCxHQUFHLGtFQUFrRUcsY0FBY00sR0FBRyxDQUFDLENBQUNDLElBQUksT0FBT0EsSUFBSSxLQUFLQyxJQUFJLENBQUM7QUFDckgsRUFBRTtBQUNGOzs7O0NBSUMsR0FBVSxNQUFNQyxRQUFRWCw0QkFBNEIsRUFBRSxFQUFFO0FBQ3pEOzs7Q0FHQyxHQUFVLE1BQU1ZLFFBQVEsQ0FBQ0M7SUFDdEIsT0FBT2xCLHdEQUFTQSxDQUFDLENBQUNJLE1BQU1jLGNBQWNOLFFBQVEsQ0FBQ1IsTUFBTSxDQUFDLCtCQUErQixFQUFFYyxjQUFjSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekgsRUFBRTtBQUNLLE1BQU1JLGFBQWE7SUFDdEJsQjtJQUNBZTtJQUNBWDtJQUNBWTtBQUNKLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvdmFsaWRhdG9ycy92YWxpZGF0b3JzLmpzPzJmYjAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyBWYWxpZGF0aW9uICovIGltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuL3ZhbGlkYXRvci5qc1wiO1xuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSB2YWx1ZSBpcyBiZXR3ZWVuIHRoZSBwcm92aWRlZCBtaW5pbXVtIGFuZCBtYXhpbXVtXG4gKlxuICogQHBhcmFtIG1pbiBNaW5pbXVtIGFjY2VwdGFibGUgdmFsdWVcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBhY2NlcHRhYmxlIHZhbHVlXG4gKi8gZXhwb3J0IGNvbnN0IGluUmFuZ2UgPSAobWluLCBtYXgpPT57XG4gICAgcmV0dXJuIHZhbGlkYXRvcigodmFsKT0+bWluIDw9IHZhbCAmJiB2YWwgPD0gbWF4LCBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YCk7XG59O1xuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3RyaW5nIGNvbnRhaW5zIG9ubHkgdGhlIGRlZmF1bHQgVVJMIHRlbXBsYXRlXG4gKiBwYXJhbWV0ZXJzLCBwbHVzIGFueSBzcGVjaWZpZWQgaW4gYGFsbG93ZWRUZW1wbGF0ZVBhcmFtZXRlcnNgLlxuICpcbiAqIEBwYXJhbSBhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzIFRvIGJlIGFkZGVkIHRvIGBvcGVubXJzQmFzZWAgYW5kIGBvcGVubXJzU3BhQmFzZWBcbiAqIEBjYXRlZ29yeSBOYXZpZ2F0aW9uXG4gKi8gZXhwb3J0IGNvbnN0IGlzVXJsV2l0aFRlbXBsYXRlUGFyYW1ldGVycyA9IChhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzKT0+e1xuICAgIGNvbnN0IGFsbG93ZWRQYXJhbXMgPSBhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzLmNvbmNhdChbXG4gICAgICAgICdvcGVubXJzQmFzZScsXG4gICAgICAgICdvcGVubXJzU3BhQmFzZSdcbiAgICBdKTtcbiAgICByZXR1cm4gdmFsaWRhdG9yKCh2YWwpPT57XG4gICAgICAgIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByeCA9IC9cXCR7KC4qPyl9L2c7XG4gICAgICAgIGxldCBtYXRjaCA9IHJ4LmV4ZWModmFsKTtcbiAgICAgICAgd2hpbGUobWF0Y2gpe1xuICAgICAgICAgICAgaWYgKCFhbGxvd2VkUGFyYW1zLmluY2x1ZGVzKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoID0gcnguZXhlYyh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sICdTaG91bGQgYmUgYSBVUkwgb3IgcGF0aC4gVGhlIGFsbG93ZWQgdGVtcGxhdGUgcGFyYW1ldGVycyBhcmUgJyArIGFsbG93ZWRQYXJhbXMubWFwKChwKT0+JyR7JyArIHAgKyAnfScpLmpvaW4oJywgJykpO1xufTtcbi8qKlxuICogVmVyaWZpZXMgdGhhdCBhIHN0cmluZyBjb250YWlucyBvbmx5IHRoZSBkZWZhdWx0IFVSTCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLlxuICpcbiAqIEBjYXRlZ29yeSBOYXZpZ2F0aW9uXG4gKi8gZXhwb3J0IGNvbnN0IGlzVXJsID0gaXNVcmxXaXRoVGVtcGxhdGVQYXJhbWV0ZXJzKFtdKTtcbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgdmFsdWUgaXMgb25lIG9mIHRoZSBhbGxvd2VkIG9wdGlvbnMuXG4gKiBAcGFyYW0gYWxsb3dlZFZhbHVlcyBUaGUgbGlzdCBvZiBhbGxvd2FibGUgdmFsdWVzXG4gKi8gZXhwb3J0IGNvbnN0IG9uZU9mID0gKGFsbG93ZWRWYWx1ZXMpPT57XG4gICAgcmV0dXJuIHZhbGlkYXRvcigodmFsKT0+YWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWwpLCBgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nLmApO1xufTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0b3JzID0ge1xuICAgIGluUmFuZ2UsXG4gICAgaXNVcmwsXG4gICAgaXNVcmxXaXRoVGVtcGxhdGVQYXJhbWV0ZXJzLFxuICAgIG9uZU9mXG59O1xuIl0sIm5hbWVzIjpbInZhbGlkYXRvciIsImluUmFuZ2UiLCJtaW4iLCJtYXgiLCJ2YWwiLCJpc1VybFdpdGhUZW1wbGF0ZVBhcmFtZXRlcnMiLCJhbGxvd2VkVGVtcGxhdGVQYXJhbWV0ZXJzIiwiYWxsb3dlZFBhcmFtcyIsImNvbmNhdCIsInJ4IiwibWF0Y2giLCJleGVjIiwiaW5jbHVkZXMiLCJtYXAiLCJwIiwiam9pbiIsImlzVXJsIiwib25lT2YiLCJhbGxvd2VkVmFsdWVzIiwidmFsaWRhdG9ycyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/validators/validators.js\n");
79
-
80
- /***/ }),
81
-
82
- /***/ "../../framework/esm-state/dist/index.js":
83
- /*!***********************************************!*\
84
- !*** ../../framework/esm-state/dist/index.js ***!
85
- \***********************************************/
86
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
87
-
88
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.createGlobalStore),\n/* harmony export */ getGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalStore),\n/* harmony export */ registerGlobalStore: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.registerGlobalStore),\n/* harmony export */ subscribeTo: () => (/* reexport safe */ _state_js__WEBPACK_IMPORTED_MODULE_0__.subscribeTo)\n/* harmony export */ });\n/* harmony import */ var _state_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./state.js */ \"../../framework/esm-state/dist/state.js\");\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTJCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0YXRlL2Rpc3QvaW5kZXguanM/NzgxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zdGF0ZS5qc1wiO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-state/dist/index.js\n");
89
-
90
- /***/ }),
91
-
92
- /***/ "../../framework/esm-state/dist/state.js":
93
- /*!***********************************************!*\
94
- !*** ../../framework/esm-state/dist/state.js ***!
95
- \***********************************************/
96
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
97
-
98
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGlobalStore: () => (/* binding */ createGlobalStore),\n/* harmony export */ getGlobalStore: () => (/* binding */ getGlobalStore),\n/* harmony export */ registerGlobalStore: () => (/* binding */ registerGlobalStore),\n/* harmony export */ subscribeTo: () => (/* binding */ subscribeTo)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @openmrs/esm-utils */ \"../../framework/esm-utils/dist/shallowEqual.js\");\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand/vanilla */ \"../../../node_modules/zustand/esm/vanilla.mjs\");\n/** @module @category Store */ \n\nconst availableStores = {};\n// spaEnv isn't available immediately. Wait a bit before making stores available\n// on window in development mode.\nsetTimeout(()=>{\n if (window.spaEnv === 'development') {\n window['stores'] = availableStores;\n }\n}, 1000);\n/**\n * Creates a Zustand store.\n *\n * @param name A name by which the store can be looked up later.\n * Must be unique across the entire application.\n * @param initialState An object which will be the initial state of the store.\n * @returns The newly created store.\n */ function createGlobalStore(name, initialState) {\n const available = availableStores[name];\n if (available) {\n if (available.active) {\n console.error(`Attempted to override the existing store ${name}. Make sure that stores are only created once.`);\n } else {\n available.value.setState(initialState, true);\n }\n available.active = true;\n return available.value;\n } else {\n const store = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)()(()=>initialState);\n availableStores[name] = {\n value: store,\n active: true\n };\n return store;\n }\n}\n/**\n * Registers an existing Zustand store.\n *\n * @param name A name by which the store can be looked up later.\n * Must be unique across the entire application.\n * @param store The Zustand store to use for this.\n * @returns The newly registered store.\n */ function registerGlobalStore(name, store) {\n const available = availableStores[name];\n if (available) {\n if (available.active) {\n console.error(`Attempted to override the existing store ${name}. Make sure that stores are only created once.`);\n } else {\n available.value = store;\n }\n available.active = true;\n return available.value;\n } else {\n availableStores[name] = {\n value: store,\n active: true\n };\n return store;\n }\n}\n/**\n * Returns the existing store named `name`,\n * or creates a new store named `name` if none exists.\n *\n * @param name The name of the store to look up.\n * @param fallbackState The initial value of the new store if no store named `name` exists.\n * @returns The found or newly created store.\n */ function getGlobalStore(name, fallbackState) {\n const available = availableStores[name];\n if (!available) {\n const store = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)()(()=>fallbackState ?? {});\n availableStores[name] = {\n value: store,\n active: false\n };\n return store;\n }\n return available.value;\n}\nfunction subscribeTo(...args) {\n const [store, select, handle] = args;\n const handler = typeof handle === 'undefined' ? select : handle;\n const selector = typeof handle === 'undefined' ? (state)=>state : select;\n handler(selector(store.getState()));\n return store.subscribe((state, previous)=>{\n const current = selector(state);\n if (!(0,_openmrs_esm_utils__WEBPACK_IMPORTED_MODULE_1__.shallowEqual)(previous, current)) {\n handler(current);\n }\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L3N0YXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QixHQUFxRDtBQUNuQztBQUM5QyxNQUFNRSxrQkFBa0IsQ0FBQztBQUN6QixnRkFBZ0Y7QUFDaEYsaUNBQWlDO0FBQ2pDQyxXQUFXO0lBQ1AsSUFBSUMsT0FBT0MsTUFBTSxLQUFLLGVBQWU7UUFDakNELE1BQU0sQ0FBQyxTQUFTLEdBQUdGO0lBQ3ZCO0FBQ0osR0FBRztBQUNIOzs7Ozs7O0NBT0MsR0FBVSxTQUFTSSxrQkFBa0JDLElBQUksRUFBRUMsWUFBWTtJQUNwRCxNQUFNQyxZQUFZUCxlQUFlLENBQUNLLEtBQUs7SUFDdkMsSUFBSUUsV0FBVztRQUNYLElBQUlBLFVBQVVDLE1BQU0sRUFBRTtZQUNsQkMsUUFBUUMsS0FBSyxDQUFDLENBQUMseUNBQXlDLEVBQUVMLEtBQUssOENBQThDLENBQUM7UUFDbEgsT0FBTztZQUNIRSxVQUFVSSxLQUFLLENBQUNDLFFBQVEsQ0FBQ04sY0FBYztRQUMzQztRQUNBQyxVQUFVQyxNQUFNLEdBQUc7UUFDbkIsT0FBT0QsVUFBVUksS0FBSztJQUMxQixPQUFPO1FBQ0gsTUFBTUUsUUFBUWQsNERBQVdBLEdBQUcsSUFBSU87UUFDaENOLGVBQWUsQ0FBQ0ssS0FBSyxHQUFHO1lBQ3BCTSxPQUFPRTtZQUNQTCxRQUFRO1FBQ1o7UUFDQSxPQUFPSztJQUNYO0FBQ0o7QUFDQTs7Ozs7OztDQU9DLEdBQVUsU0FBU0Msb0JBQW9CVCxJQUFJLEVBQUVRLEtBQUs7SUFDL0MsTUFBTU4sWUFBWVAsZUFBZSxDQUFDSyxLQUFLO0lBQ3ZDLElBQUlFLFdBQVc7UUFDWCxJQUFJQSxVQUFVQyxNQUFNLEVBQUU7WUFDbEJDLFFBQVFDLEtBQUssQ0FBQyxDQUFDLHlDQUF5QyxFQUFFTCxLQUFLLDhDQUE4QyxDQUFDO1FBQ2xILE9BQU87WUFDSEUsVUFBVUksS0FBSyxHQUFHRTtRQUN0QjtRQUNBTixVQUFVQyxNQUFNLEdBQUc7UUFDbkIsT0FBT0QsVUFBVUksS0FBSztJQUMxQixPQUFPO1FBQ0hYLGVBQWUsQ0FBQ0ssS0FBSyxHQUFHO1lBQ3BCTSxPQUFPRTtZQUNQTCxRQUFRO1FBQ1o7UUFDQSxPQUFPSztJQUNYO0FBQ0o7QUFDQTs7Ozs7OztDQU9DLEdBQVUsU0FBU0UsZUFBZVYsSUFBSSxFQUFFVyxhQUFhO0lBQ2xELE1BQU1ULFlBQVlQLGVBQWUsQ0FBQ0ssS0FBSztJQUN2QyxJQUFJLENBQUNFLFdBQVc7UUFDWixNQUFNTSxRQUFRZCw0REFBV0EsR0FBRyxJQUFJaUIsaUJBQWlCLENBQUM7UUFDbERoQixlQUFlLENBQUNLLEtBQUssR0FBRztZQUNwQk0sT0FBT0U7WUFDUEwsUUFBUTtRQUNaO1FBQ0EsT0FBT0s7SUFDWDtJQUNBLE9BQU9OLFVBQVVJLEtBQUs7QUFDMUI7QUFDTyxTQUFTTSxZQUFZLEdBQUdDLElBQUk7SUFDL0IsTUFBTSxDQUFDTCxPQUFPTSxRQUFRQyxPQUFPLEdBQUdGO0lBQ2hDLE1BQU1HLFVBQVUsT0FBT0QsV0FBVyxjQUFjRCxTQUFTQztJQUN6RCxNQUFNRSxXQUFXLE9BQU9GLFdBQVcsY0FBYyxDQUFDRyxRQUFRQSxRQUFRSjtJQUNsRUUsUUFBUUMsU0FBU1QsTUFBTVcsUUFBUTtJQUMvQixPQUFPWCxNQUFNWSxTQUFTLENBQUMsQ0FBQ0YsT0FBT0c7UUFDM0IsTUFBTUMsVUFBVUwsU0FBU0M7UUFDekIsSUFBSSxDQUFDekIsZ0VBQVlBLENBQUM0QixVQUFVQyxVQUFVO1lBQ2xDTixRQUFRTTtRQUNaO0lBQ0o7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1zdGF0ZS9kaXN0L3N0YXRlLmpzPzAwZWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IFN0b3JlICovIGltcG9ydCB7IHNoYWxsb3dFcXVhbCB9IGZyb20gXCJAb3Blbm1ycy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSBcInp1c3RhbmQvdmFuaWxsYVwiO1xuY29uc3QgYXZhaWxhYmxlU3RvcmVzID0ge307XG4vLyBzcGFFbnYgaXNuJ3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LiBXYWl0IGEgYml0IGJlZm9yZSBtYWtpbmcgc3RvcmVzIGF2YWlsYWJsZVxuLy8gb24gd2luZG93IGluIGRldmVsb3BtZW50IG1vZGUuXG5zZXRUaW1lb3V0KCgpPT57XG4gICAgaWYgKHdpbmRvdy5zcGFFbnYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgd2luZG93WydzdG9yZXMnXSA9IGF2YWlsYWJsZVN0b3JlcztcbiAgICB9XG59LCAxMDAwKTtcbi8qKlxuICogQ3JlYXRlcyBhIFp1c3RhbmQgc3RvcmUuXG4gKlxuICogQHBhcmFtIG5hbWUgQSBuYW1lIGJ5IHdoaWNoIHRoZSBzdG9yZSBjYW4gYmUgbG9va2VkIHVwIGxhdGVyLlxuICogICAgTXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIEFuIG9iamVjdCB3aGljaCB3aWxsIGJlIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBzdG9yZS5cbiAqIEByZXR1cm5zIFRoZSBuZXdseSBjcmVhdGVkIHN0b3JlLlxuICovIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHbG9iYWxTdG9yZShuYW1lLCBpbml0aWFsU3RhdGUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKGF2YWlsYWJsZSkge1xuICAgICAgICBpZiAoYXZhaWxhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXR0ZW1wdGVkIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBzdG9yZSAke25hbWV9LiBNYWtlIHN1cmUgdGhhdCBzdG9yZXMgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWxhYmxlLnZhbHVlLnNldFN0YXRlKGluaXRpYWxTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT5pbml0aWFsU3RhdGUpO1xuICAgICAgICBhdmFpbGFibGVTdG9yZXNbbmFtZV0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogc3RvcmUsXG4gICAgICAgICAgICBhY3RpdmU6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0b3JlO1xuICAgIH1cbn1cbi8qKlxuICogUmVnaXN0ZXJzIGFuIGV4aXN0aW5nIFp1c3RhbmQgc3RvcmUuXG4gKlxuICogQHBhcmFtIG5hbWUgQSBuYW1lIGJ5IHdoaWNoIHRoZSBzdG9yZSBjYW4gYmUgbG9va2VkIHVwIGxhdGVyLlxuICogICAgTXVzdCBiZSB1bmlxdWUgYWNyb3NzIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gc3RvcmUgVGhlIFp1c3RhbmQgc3RvcmUgdG8gdXNlIGZvciB0aGlzLlxuICogQHJldHVybnMgVGhlIG5ld2x5IHJlZ2lzdGVyZWQgc3RvcmUuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsU3RvcmUobmFtZSwgc3RvcmUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKGF2YWlsYWJsZSkge1xuICAgICAgICBpZiAoYXZhaWxhYmxlLmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQXR0ZW1wdGVkIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBzdG9yZSAke25hbWV9LiBNYWtlIHN1cmUgdGhhdCBzdG9yZXMgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWxhYmxlLnZhbHVlID0gc3RvcmU7XG4gICAgICAgIH1cbiAgICAgICAgYXZhaWxhYmxlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXZhaWxhYmxlU3RvcmVzW25hbWVdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdG9yZTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGV4aXN0aW5nIHN0b3JlIG5hbWVkIGBuYW1lYCxcbiAqIG9yIGNyZWF0ZXMgYSBuZXcgc3RvcmUgbmFtZWQgYG5hbWVgIGlmIG5vbmUgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzdG9yZSB0byBsb29rIHVwLlxuICogQHBhcmFtIGZhbGxiYWNrU3RhdGUgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIG5ldyBzdG9yZSBpZiBubyBzdG9yZSBuYW1lZCBgbmFtZWAgZXhpc3RzLlxuICogQHJldHVybnMgVGhlIGZvdW5kIG9yIG5ld2x5IGNyZWF0ZWQgc3RvcmUuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbFN0b3JlKG5hbWUsIGZhbGxiYWNrU3RhdGUpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBhdmFpbGFibGVTdG9yZXNbbmFtZV07XG4gICAgaWYgKCFhdmFpbGFibGUpIHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT5mYWxsYmFja1N0YXRlID8/IHt9KTtcbiAgICAgICAgYXZhaWxhYmxlU3RvcmVzW25hbWVdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHN0b3JlLFxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuICAgIHJldHVybiBhdmFpbGFibGUudmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlVG8oLi4uYXJncykge1xuICAgIGNvbnN0IFtzdG9yZSwgc2VsZWN0LCBoYW5kbGVdID0gYXJncztcbiAgICBjb25zdCBoYW5kbGVyID0gdHlwZW9mIGhhbmRsZSA9PT0gJ3VuZGVmaW5lZCcgPyBzZWxlY3QgOiBoYW5kbGU7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0eXBlb2YgaGFuZGxlID09PSAndW5kZWZpbmVkJyA/IChzdGF0ZSk9PnN0YXRlIDogc2VsZWN0O1xuICAgIGhhbmRsZXIoc2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSkpO1xuICAgIHJldHVybiBzdG9yZS5zdWJzY3JpYmUoKHN0YXRlLCBwcmV2aW91cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwocHJldmlvdXMsIGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iXSwibmFtZXMiOlsic2hhbGxvd0VxdWFsIiwiY3JlYXRlU3RvcmUiLCJhdmFpbGFibGVTdG9yZXMiLCJzZXRUaW1lb3V0Iiwid2luZG93Iiwic3BhRW52IiwiY3JlYXRlR2xvYmFsU3RvcmUiLCJuYW1lIiwiaW5pdGlhbFN0YXRlIiwiYXZhaWxhYmxlIiwiYWN0aXZlIiwiY29uc29sZSIsImVycm9yIiwidmFsdWUiLCJzZXRTdGF0ZSIsInN0b3JlIiwicmVnaXN0ZXJHbG9iYWxTdG9yZSIsImdldEdsb2JhbFN0b3JlIiwiZmFsbGJhY2tTdGF0ZSIsInN1YnNjcmliZVRvIiwiYXJncyIsInNlbGVjdCIsImhhbmRsZSIsImhhbmRsZXIiLCJzZWxlY3RvciIsInN0YXRlIiwiZ2V0U3RhdGUiLCJzdWJzY3JpYmUiLCJwcmV2aW91cyIsImN1cnJlbnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-state/dist/state.js\n");
99
-
100
- /***/ }),
101
-
102
- /***/ "../../framework/esm-utils/dist/shallowEqual.js":
103
- /*!******************************************************!*\
104
- !*** ../../framework/esm-utils/dist/shallowEqual.js ***!
105
- \******************************************************/
106
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
107
-
108
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ shallowEqual: () => (/* binding */ shallowEqual)\n/* harmony export */ });\n/** @module @category Utility */ /**\n * Checks whether two objects are equal, using a shallow comparison, similar to React.\n *\n * In essence, shallowEquals ensures two objects have the same own properties and that the values\n * of these are equal (===) to each other.\n *\n * @param a The first value to compare\n * @param b The second value to compare\n * @returns true if the objects are shallowly equal to each other\n */ function shallowEqual(a, b) {\n if (a === b || Object.is(a, b)) {\n return true;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n for(let i = 0; i < a.length; i++){\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n } else if (Array.isArray(b)) {\n return false;\n }\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false;\n }\n const objAKeys = Object.getOwnPropertyNames(a);\n const objBKeys = Object.getOwnPropertyNames(b);\n return objAKeys.length === objBKeys.length && objAKeys.every((key)=>a[key] === b[key]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vZnJhbWV3b3JrL2VzbS11dGlscy9kaXN0L3NoYWxsb3dFcXVhbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUEsOEJBQThCLEdBQUc7Ozs7Ozs7OztDQVNoQyxHQUFVLFNBQVNBLGFBQWFDLENBQUMsRUFBRUMsQ0FBQztJQUNqQyxJQUFJRCxNQUFNQyxLQUFLQyxPQUFPQyxFQUFFLENBQUNILEdBQUdDLElBQUk7UUFDNUIsT0FBTztJQUNYO0lBQ0EsSUFBSUcsTUFBTUMsT0FBTyxDQUFDTCxJQUFJO1FBQ2xCLElBQUksQ0FBQ0ksTUFBTUMsT0FBTyxDQUFDSixJQUFJO1lBQ25CLE9BQU87UUFDWDtRQUNBLElBQUlELEVBQUVNLE1BQU0sS0FBS0wsRUFBRUssTUFBTSxFQUFFO1lBQ3ZCLE9BQU87UUFDWDtRQUNBLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJUCxFQUFFTSxNQUFNLEVBQUVDLElBQUk7WUFDN0IsSUFBSVAsQ0FBQyxDQUFDTyxFQUFFLEtBQUtOLENBQUMsQ0FBQ00sRUFBRSxFQUFFO2dCQUNmLE9BQU87WUFDWDtRQUNKO1FBQ0EsT0FBTztJQUNYLE9BQU8sSUFBSUgsTUFBTUMsT0FBTyxDQUFDSixJQUFJO1FBQ3pCLE9BQU87SUFDWDtJQUNBLElBQUksT0FBT0QsTUFBTSxZQUFZQSxNQUFNLFFBQVEsT0FBT0MsTUFBTSxZQUFZQSxNQUFNLE1BQU07UUFDNUUsT0FBTztJQUNYO0lBQ0EsTUFBTU8sV0FBV04sT0FBT08sbUJBQW1CLENBQUNUO0lBQzVDLE1BQU1VLFdBQVdSLE9BQU9PLG1CQUFtQixDQUFDUjtJQUM1QyxPQUFPTyxTQUFTRixNQUFNLEtBQUtJLFNBQVNKLE1BQU0sSUFBSUUsU0FBU0csS0FBSyxDQUFDLENBQUNDLE1BQU1aLENBQUMsQ0FBQ1ksSUFBSSxLQUFLWCxDQUFDLENBQUNXLElBQUk7QUFDekYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tdXRpbHMvZGlzdC9zaGFsbG93RXF1YWwuanM/M2M1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQG1vZHVsZSBAY2F0ZWdvcnkgVXRpbGl0eSAqLyAvKipcbiAqIENoZWNrcyB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBlcXVhbCwgdXNpbmcgYSBzaGFsbG93IGNvbXBhcmlzb24sIHNpbWlsYXIgdG8gUmVhY3QuXG4gKlxuICogSW4gZXNzZW5jZSwgc2hhbGxvd0VxdWFscyBlbnN1cmVzIHR3byBvYmplY3RzIGhhdmUgdGhlIHNhbWUgb3duIHByb3BlcnRpZXMgYW5kIHRoYXQgdGhlIHZhbHVlc1xuICogb2YgdGhlc2UgYXJlIGVxdWFsICg9PT0pIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGEgVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSBiIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0cyBhcmUgc2hhbGxvd2x5IGVxdWFsIHRvIGVhY2ggb3RoZXJcbiAqLyBleHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYiB8fCBPYmplY3QuaXMoYSwgYikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvYmpBS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO1xuICAgIGNvbnN0IG9iakJLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYik7XG4gICAgcmV0dXJuIG9iakFLZXlzLmxlbmd0aCA9PT0gb2JqQktleXMubGVuZ3RoICYmIG9iakFLZXlzLmV2ZXJ5KChrZXkpPT5hW2tleV0gPT09IGJba2V5XSk7XG59XG4iXSwibmFtZXMiOlsic2hhbGxvd0VxdWFsIiwiYSIsImIiLCJPYmplY3QiLCJpcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImkiLCJvYmpBS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJvYmpCS2V5cyIsImV2ZXJ5Iiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-utils/dist/shallowEqual.js\n");
109
-
110
- /***/ })
111
-
112
- }]);