@openmrs/esm-app-shell 9.0.3-pre.4371 → 9.0.3-pre.4380
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.
- package/.turbo/turbo-build.log +3 -3
- package/dist/{8ba959ea5fc57b63.js → 5d652169e71a218c.js} +1 -1
- package/dist/{8ba959ea5fc57b63.js.map → 5d652169e71a218c.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist/{openmrs.465c88cf327ba1c5.js → openmrs.97749d8135f71369.js} +2 -2
- package/dist/{openmrs.465c88cf327ba1c5.js.map → openmrs.97749d8135f71369.js.map} +1 -1
- package/lib/{50383662cb651f1a.js → 2490f488dac54c7c.js} +2 -2
- package/lib/openmrs.js +3 -3
- package/package.json +3 -3
|
@@ -1760,7 +1760,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
|
|
|
1760
1760
|
},
|
|
1761
1761
|
"../../framework/esm-styleguide/dist/numeric-observation/numeric-observation.component.js"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
1762
1762
|
"use strict";
|
|
1763
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n NumericObservation: () => (NumericObservation)\n});\n/* import */ var react_jsx_runtime__rspack_import_0 = __webpack_require__(\"../../../node_modules/react/jsx-runtime.js\");\n/* import */ var react__rspack_import_1 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_1_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_1);\n/* import */ var classnames__rspack_import_2 = __webpack_require__(\"../../../node_modules/classnames/index.js\");\n/* import */ var classnames__rspack_import_2_default = /*#__PURE__*/__webpack_require__.n(classnames__rspack_import_2);\n/* import */ var _openmrs_esm_translations__rspack_import_3 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _interpretation_utils_js__rspack_import_4 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/interpretation-utils.js\");\n/* import */ var _use_concept_reference_range_js__rspack_import_5 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/use-concept-reference-range.js\");\n/* import */ var _numeric_observation_module_scss__rspack_import_6 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/numeric-observation.module.scss\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n/** @module @category UI */ \n\n\n\n\n\n/**\n * Generic numeric observation component for displaying numeric observation values with interpretation-based styling.\n * Supports both vitals and test results display patterns.\n */ var NumericObservation = function NumericObservation(param) {\n var value = param.value, unit = param.unit, label = param.label, providedInterpretation = param.interpretation, providedReferenceRange = param.referenceRange, conceptUuid = param.conceptUuid, _param_variant = param.variant, variant = _param_variant === void 0 ? 'card' : _param_variant, patientUuid = param.patientUuid;\n var generatedId = (0,react__rspack_import_1.useId)();\n var _useConceptReferenceRange = (0,_use_concept_reference_range_js__rspack_import_5.useConceptReferenceRange)(providedReferenceRange ? undefined : conceptUuid, patientUuid), fetchedReferenceRange = _useConceptReferenceRange.referenceRange, isLoadingConcept = _useConceptReferenceRange.isLoading;\n var referenceRange = providedReferenceRange !== null && providedReferenceRange !== void 0 ? providedReferenceRange : fetchedReferenceRange;\n var calculatedInterpretation = (0,react__rspack_import_1.useMemo)(function() {\n if (providedInterpretation) {\n return (0,_interpretation_utils_js__rspack_import_4.normalizeInterpretation)(providedInterpretation);\n }\n if (referenceRange && !isLoadingConcept) {\n return (0,_interpretation_utils_js__rspack_import_4.calculateInterpretation)(value, referenceRange);\n }\n return 'normal';\n }, [\n providedInterpretation,\n referenceRange,\n value,\n isLoadingConcept\n ]);\n var interpretation = calculatedInterpretation !== null && calculatedInterpretation !== void 0 ? calculatedInterpretation : 'normal';\n var flaggedCritical = interpretation === 'critically_low' || interpretation === 'critically_high' || interpretation === 'off_scale_low' || interpretation === 'off_scale_high';\n var flaggedAbnormal = interpretation !== 'normal';\n var labelId = label ? \"omrs-numeric-obs-label-\".concat(label.replaceAll(/\\s+/g, '-').toLowerCase(), \"-\").concat(generatedId) : undefined;\n var valueId = \"omrs-numeric-obs-value-\".concat(generatedId);\n var unitId = \"omrs-numeric-obs-unit-\".concat(generatedId);\n var hasValue = value != null && value !== '';\n var displayValue = hasValue ? value : (0,_openmrs_esm_translations__rspack_import_3.getCoreTranslation)('notAvailable', 'Not available');\n var _obj;\n var interpretationClasses = classnames__rspack_import_2_default()((_obj = {}, _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critically-low\"], interpretation === 'critically_low' || interpretation === 'off_scale_low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critically-high\"], interpretation === 'critically_high' || interpretation === 'off_scale_high'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"].low, interpretation === 'low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"].high, interpretation === 'high'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"off-scale-low\"], interpretation === 'off_scale_low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"off-scale-high\"], interpretation === 'off_scale_high'), _obj));\n var _obj1;\n var cardContainerClasses = classnames__rspack_import_2_default()((_obj1 = {}, _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"].container, true), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"].card, true), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critical-value\"], flaggedCritical), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"abnormal-value\"], flaggedAbnormal && !flaggedCritical), _obj1));\n var _obj2;\n var cellClasses = classnames__rspack_import_2_default()((_obj2 = {}, _define_property(_obj2, _numeric_observation_module_scss__rspack_import_6[\"default\"].cell, true), _define_property(_obj2, interpretationClasses, true), _obj2));\n if (variant === 'cell') {\n return /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: cellClasses,\n children: [\n displayValue,\n hasValue && unit ? \" \".concat(unit) : ''\n ]\n });\n }\n return /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"section\", {\n className: cardContainerClasses,\n \"data-testid\": \"numeric-observation-card\",\n children: [\n label && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][\"label-container\"],\n children: [\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: labelId,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].label,\n children: label\n }),\n flaggedAbnormal && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][interpretation.replace('_', '-')],\n title: (0,_openmrs_esm_translations__rspack_import_3.getCoreTranslation)('abnormalValue', 'Abnormal value')\n })\n ]\n }),\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][\"value-container\"],\n children: [\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: valueId,\n \"aria-labelledby\": labelId && unitId ? \"\".concat(labelId, \" \").concat(unitId) : labelId || unitId || undefined,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].value,\n children: displayValue\n }),\n hasValue && unit && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: unitId,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].units,\n children: unit\n })\n ]\n })\n ]\n });\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyIS9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9wYWNrYWdlcy9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC9udW1lcmljLW9ic2VydmF0aW9uL251bWVyaWMtb2JzZXJ2YXRpb24uY29tcG9uZW50LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC9udW1lcmljLW9ic2VydmF0aW9uL251bWVyaWMtb2JzZXJ2YXRpb24uY29tcG9uZW50LmpzPzZmNWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBVSSAqLyBpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlSWQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgeyBnZXRDb3JlVHJhbnNsYXRpb24gfSBmcm9tIFwiQG9wZW5tcnMvZXNtLXRyYW5zbGF0aW9uc1wiO1xuaW1wb3J0IHsgY2FsY3VsYXRlSW50ZXJwcmV0YXRpb24sIG5vcm1hbGl6ZUludGVycHJldGF0aW9uIH0gZnJvbSBcIi4vaW50ZXJwcmV0YXRpb24tdXRpbHMuanNcIjtcbmltcG9ydCB7IHVzZUNvbmNlcHRSZWZlcmVuY2VSYW5nZSB9IGZyb20gXCIuL3VzZS1jb25jZXB0LXJlZmVyZW5jZS1yYW5nZS5qc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9udW1lcmljLW9ic2VydmF0aW9uLm1vZHVsZS5zY3NzXCI7XG4vKipcbiAqIEdlbmVyaWMgbnVtZXJpYyBvYnNlcnZhdGlvbiBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgbnVtZXJpYyBvYnNlcnZhdGlvbiB2YWx1ZXMgd2l0aCBpbnRlcnByZXRhdGlvbi1iYXNlZCBzdHlsaW5nLlxuICogU3VwcG9ydHMgYm90aCB2aXRhbHMgYW5kIHRlc3QgcmVzdWx0cyBkaXNwbGF5IHBhdHRlcm5zLlxuICovIGV4cG9ydCBjb25zdCBOdW1lcmljT2JzZXJ2YXRpb24gPSAoeyB2YWx1ZSwgdW5pdCwgbGFiZWwsIGludGVycHJldGF0aW9uOiBwcm92aWRlZEludGVycHJldGF0aW9uLCByZWZlcmVuY2VSYW5nZTogcHJvdmlkZWRSZWZlcmVuY2VSYW5nZSwgY29uY2VwdFV1aWQsIHZhcmlhbnQgPSAnY2FyZCcsIHBhdGllbnRVdWlkIH0pPT57XG4gICAgY29uc3QgZ2VuZXJhdGVkSWQgPSB1c2VJZCgpO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlUmFuZ2U6IGZldGNoZWRSZWZlcmVuY2VSYW5nZSwgaXNMb2FkaW5nOiBpc0xvYWRpbmdDb25jZXB0IH0gPSB1c2VDb25jZXB0UmVmZXJlbmNlUmFuZ2UocHJvdmlkZWRSZWZlcmVuY2VSYW5nZSA/IHVuZGVmaW5lZCA6IGNvbmNlcHRVdWlkLCBwYXRpZW50VXVpZCk7XG4gICAgY29uc3QgcmVmZXJlbmNlUmFuZ2UgPSBwcm92aWRlZFJlZmVyZW5jZVJhbmdlID8/IGZldGNoZWRSZWZlcmVuY2VSYW5nZTtcbiAgICBjb25zdCBjYWxjdWxhdGVkSW50ZXJwcmV0YXRpb24gPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGlmIChwcm92aWRlZEludGVycHJldGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplSW50ZXJwcmV0YXRpb24ocHJvdmlkZWRJbnRlcnByZXRhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZmVyZW5jZVJhbmdlICYmICFpc0xvYWRpbmdDb25jZXB0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlSW50ZXJwcmV0YXRpb24odmFsdWUsIHJlZmVyZW5jZVJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgfSwgW1xuICAgICAgICBwcm92aWRlZEludGVycHJldGF0aW9uLFxuICAgICAgICByZWZlcmVuY2VSYW5nZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGlzTG9hZGluZ0NvbmNlcHRcbiAgICBdKTtcbiAgICBjb25zdCBpbnRlcnByZXRhdGlvbiA9IGNhbGN1bGF0ZWRJbnRlcnByZXRhdGlvbiA/PyAnbm9ybWFsJztcbiAgICBjb25zdCBmbGFnZ2VkQ3JpdGljYWwgPSBpbnRlcnByZXRhdGlvbiA9PT0gJ2NyaXRpY2FsbHlfbG93JyB8fCBpbnRlcnByZXRhdGlvbiA9PT0gJ2NyaXRpY2FsbHlfaGlnaCcgfHwgaW50ZXJwcmV0YXRpb24gPT09ICdvZmZfc2NhbGVfbG93JyB8fCBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9oaWdoJztcbiAgICBjb25zdCBmbGFnZ2VkQWJub3JtYWwgPSBpbnRlcnByZXRhdGlvbiAhPT0gJ25vcm1hbCc7XG4gICAgY29uc3QgbGFiZWxJZCA9IGxhYmVsID8gYG9tcnMtbnVtZXJpYy1vYnMtbGFiZWwtJHtsYWJlbC5yZXBsYWNlQWxsKC9cXHMrL2csICctJykudG9Mb3dlckNhc2UoKX0tJHtnZW5lcmF0ZWRJZH1gIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHZhbHVlSWQgPSBgb21ycy1udW1lcmljLW9icy12YWx1ZS0ke2dlbmVyYXRlZElkfWA7XG4gICAgY29uc3QgdW5pdElkID0gYG9tcnMtbnVtZXJpYy1vYnMtdW5pdC0ke2dlbmVyYXRlZElkfWA7XG4gICAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJztcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBoYXNWYWx1ZSA/IHZhbHVlIDogZ2V0Q29yZVRyYW5zbGF0aW9uKCdub3RBdmFpbGFibGUnLCAnTm90IGF2YWlsYWJsZScpO1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICBbc3R5bGVzWydjcml0aWNhbGx5LWxvdyddXTogaW50ZXJwcmV0YXRpb24gPT09ICdjcml0aWNhbGx5X2xvdycgfHwgaW50ZXJwcmV0YXRpb24gPT09ICdvZmZfc2NhbGVfbG93JyxcbiAgICAgICAgW3N0eWxlc1snY3JpdGljYWxseS1oaWdoJ11dOiBpbnRlcnByZXRhdGlvbiA9PT0gJ2NyaXRpY2FsbHlfaGlnaCcgfHwgaW50ZXJwcmV0YXRpb24gPT09ICdvZmZfc2NhbGVfaGlnaCcsXG4gICAgICAgIFtzdHlsZXMubG93XTogaW50ZXJwcmV0YXRpb24gPT09ICdsb3cnLFxuICAgICAgICBbc3R5bGVzLmhpZ2hdOiBpbnRlcnByZXRhdGlvbiA9PT0gJ2hpZ2gnLFxuICAgICAgICBbc3R5bGVzWydvZmYtc2NhbGUtbG93J11dOiBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9sb3cnLFxuICAgICAgICBbc3R5bGVzWydvZmYtc2NhbGUtaGlnaCddXTogaW50ZXJwcmV0YXRpb24gPT09ICdvZmZfc2NhbGVfaGlnaCdcbiAgICB9KTtcbiAgICBjb25zdCBjYXJkQ29udGFpbmVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICBbc3R5bGVzLmNvbnRhaW5lcl06IHRydWUsXG4gICAgICAgIFtzdHlsZXMuY2FyZF06IHRydWUsXG4gICAgICAgIFtzdHlsZXNbJ2NyaXRpY2FsLXZhbHVlJ11dOiBmbGFnZ2VkQ3JpdGljYWwsXG4gICAgICAgIFtzdHlsZXNbJ2Fibm9ybWFsLXZhbHVlJ11dOiBmbGFnZ2VkQWJub3JtYWwgJiYgIWZsYWdnZWRDcml0aWNhbFxuICAgIH0pO1xuICAgIGNvbnN0IGNlbGxDbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgIFtzdHlsZXMuY2VsbF06IHRydWUsXG4gICAgICAgIFtpbnRlcnByZXRhdGlvbkNsYXNzZXNdOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHZhcmlhbnQgPT09ICdjZWxsJykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyBfanN4cyhcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNlbGxDbGFzc2VzLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWUsXG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgJiYgdW5pdCA/IGAgJHt1bml0fWAgOiAnJ1xuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX2pzeHMoXCJzZWN0aW9uXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjYXJkQ29udGFpbmVyQ2xhc3NlcyxcbiAgICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcIm51bWVyaWMtb2JzZXJ2YXRpb24tY2FyZFwiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgbGFiZWwgJiYgLyojX19QVVJFX18qLyBfanN4cyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXNbJ2xhYmVsLWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gX2pzeChcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ2dlZEFibm9ybWFsICYmIC8qI19fUFVSRV9fKi8gX2pzeChcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXNbaW50ZXJwcmV0YXRpb24ucmVwbGFjZSgnXycsICctJyldLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldENvcmVUcmFuc2xhdGlvbignYWJub3JtYWxWYWx1ZScsICdBYm5vcm1hbCB2YWx1ZScpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovIF9qc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlc1sndmFsdWUtY29udGFpbmVyJ10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyBfanN4KFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdmFsdWVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGxhYmVsSWQgJiYgdW5pdElkID8gYCR7bGFiZWxJZH0gJHt1bml0SWR9YCA6IGxhYmVsSWQgfHwgdW5pdElkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgJiYgdW5pdCAmJiAvKiNfX1BVUkVfXyovIF9qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB1bml0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlcy51bml0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB1bml0XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiUmVhY3QiLCJ1c2VNZW1vIiwidXNlSWQiLCJjbGFzc05hbWVzIiwiZ2V0Q29yZVRyYW5zbGF0aW9uIiwiY2FsY3VsYXRlSW50ZXJwcmV0YXRpb24iLCJub3JtYWxpemVJbnRlcnByZXRhdGlvbiIsInVzZUNvbmNlcHRSZWZlcmVuY2VSYW5nZSIsInN0eWxlcyIsIk51bWVyaWNPYnNlcnZhdGlvbiIsInZhbHVlIiwidW5pdCIsImxhYmVsIiwicHJvdmlkZWRJbnRlcnByZXRhdGlvbiIsInByb3ZpZGVkUmVmZXJlbmNlUmFuZ2UiLCJjb25jZXB0VXVpZCIsInZhcmlhbnQiLCJwYXRpZW50VXVpZCIsImdlbmVyYXRlZElkIiwiX3VzZUNvbmNlcHRSZWZlcmVuY2VSYW5nZSIsInVuZGVmaW5lZCIsImZldGNoZWRSZWZlcmVuY2VSYW5nZSIsImlzTG9hZGluZ0NvbmNlcHQiLCJyZWZlcmVuY2VSYW5nZSIsImNhbGN1bGF0ZWRJbnRlcnByZXRhdGlvbiIsImludGVycHJldGF0aW9uIiwiZmxhZ2dlZENyaXRpY2FsIiwiZmxhZ2dlZEFibm9ybWFsIiwibGFiZWxJZCIsInZhbHVlSWQiLCJ1bml0SWQiLCJoYXNWYWx1ZSIsImRpc3BsYXlWYWx1ZSIsIl9vYmoiLCJpbnRlcnByZXRhdGlvbkNsYXNzZXMiLCJfb2JqMSIsImNhcmRDb250YWluZXJDbGFzc2VzIiwiX29iajIiLCJjZWxsQ2xhc3NlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0Q7QUFDL0QseUJBQXlCLEdBQWlEO0FBQ3RDO0FBQzJCO0FBQzhCO0FBQ2pCO0FBQ3JCO0FBQ3ZEOzs7Q0FHQyxHQUFVLElBQU1hLHFCQUFxQjtRQUFHQyxjQUFBQSxPQUFPQyxhQUFBQSxNQUFNQyxjQUFBQSxPQUF1QkMsK0JBQWhCLGdCQUF3REMsK0JBQWhCLGdCQUF3Q0Msb0JBQUFBLG9DQUFhQyxTQUFBQSxzQ0FBVSx5QkFBUUMsb0JBQUFBO0lBQ3hLLElBQU1DLGNBQWNoQixnQ0FBS0E7SUFDekIsSUFBK0VpQiw0QkFBQUEsNkVBQXdCQSxDQUFD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\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/dist/numeric-observation/numeric-observation.component.js\n\n}");
|
|
1763
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n NumericObservation: () => (NumericObservation)\n});\n/* import */ var react_jsx_runtime__rspack_import_0 = __webpack_require__(\"../../../node_modules/react/jsx-runtime.js\");\n/* import */ var react__rspack_import_1 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_1_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_1);\n/* import */ var classnames__rspack_import_2 = __webpack_require__(\"../../../node_modules/classnames/index.js\");\n/* import */ var classnames__rspack_import_2_default = /*#__PURE__*/__webpack_require__.n(classnames__rspack_import_2);\n/* import */ var _openmrs_esm_translations__rspack_import_3 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _interpretation_utils_js__rspack_import_4 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/interpretation-utils.js\");\n/* import */ var _use_concept_reference_range_js__rspack_import_5 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/use-concept-reference-range.js\");\n/* import */ var _numeric_observation_module_scss__rspack_import_6 = __webpack_require__(\"../../framework/esm-styleguide/dist/numeric-observation/numeric-observation.module.scss\");\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\n/** @module @category UI */ \n\n\n\n\n\n/**\n * Generic numeric observation component for displaying numeric observation values with interpretation-based styling.\n * Supports both vitals and test results display patterns.\n */ var NumericObservation = function NumericObservation(param) {\n var value = param.value, unit = param.unit, label = param.label, providedInterpretation = param.interpretation, providedReferenceRange = param.referenceRange, conceptUuid = param.conceptUuid, _param_variant = param.variant, variant = _param_variant === void 0 ? 'card' : _param_variant, patientUuid = param.patientUuid;\n var generatedId = (0,react__rspack_import_1.useId)();\n var _useConceptReferenceRange = (0,_use_concept_reference_range_js__rspack_import_5.useConceptReferenceRange)(providedReferenceRange || providedInterpretation ? undefined : conceptUuid, patientUuid), fetchedReferenceRange = _useConceptReferenceRange.referenceRange, isLoadingConcept = _useConceptReferenceRange.isLoading;\n var referenceRange = providedReferenceRange !== null && providedReferenceRange !== void 0 ? providedReferenceRange : fetchedReferenceRange;\n var calculatedInterpretation = (0,react__rspack_import_1.useMemo)(function() {\n if (providedInterpretation) {\n return (0,_interpretation_utils_js__rspack_import_4.normalizeInterpretation)(providedInterpretation);\n }\n if (referenceRange && !isLoadingConcept) {\n return (0,_interpretation_utils_js__rspack_import_4.calculateInterpretation)(value, referenceRange);\n }\n return 'normal';\n }, [\n providedInterpretation,\n referenceRange,\n value,\n isLoadingConcept\n ]);\n var interpretation = calculatedInterpretation !== null && calculatedInterpretation !== void 0 ? calculatedInterpretation : 'normal';\n var flaggedCritical = interpretation === 'critically_low' || interpretation === 'critically_high' || interpretation === 'off_scale_low' || interpretation === 'off_scale_high';\n var flaggedAbnormal = interpretation !== 'normal';\n var labelId = label ? \"omrs-numeric-obs-label-\".concat(label.replaceAll(/\\s+/g, '-').toLowerCase(), \"-\").concat(generatedId) : undefined;\n var valueId = \"omrs-numeric-obs-value-\".concat(generatedId);\n var unitId = \"omrs-numeric-obs-unit-\".concat(generatedId);\n var hasValue = value != null && value !== '';\n var displayValue = hasValue ? value : (0,_openmrs_esm_translations__rspack_import_3.getCoreTranslation)('notAvailable', 'Not available');\n var _obj;\n var interpretationClasses = classnames__rspack_import_2_default()((_obj = {}, _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critically-low\"], interpretation === 'critically_low' || interpretation === 'off_scale_low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critically-high\"], interpretation === 'critically_high' || interpretation === 'off_scale_high'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"].low, interpretation === 'low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"].high, interpretation === 'high'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"off-scale-low\"], interpretation === 'off_scale_low'), _define_property(_obj, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"off-scale-high\"], interpretation === 'off_scale_high'), _obj));\n var _obj1;\n var cardContainerClasses = classnames__rspack_import_2_default()((_obj1 = {}, _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"].container, true), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"].card, true), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"critical-value\"], flaggedCritical), _define_property(_obj1, _numeric_observation_module_scss__rspack_import_6[\"default\"][\"abnormal-value\"], flaggedAbnormal && !flaggedCritical), _obj1));\n var _obj2;\n var cellClasses = classnames__rspack_import_2_default()((_obj2 = {}, _define_property(_obj2, _numeric_observation_module_scss__rspack_import_6[\"default\"].cell, true), _define_property(_obj2, interpretationClasses, true), _obj2));\n if (variant === 'cell') {\n return /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: cellClasses,\n children: [\n displayValue,\n hasValue && unit ? \" \".concat(unit) : ''\n ]\n });\n }\n return /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"section\", {\n className: cardContainerClasses,\n \"data-testid\": \"numeric-observation-card\",\n children: [\n label && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][\"label-container\"],\n children: [\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: labelId,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].label,\n children: label\n }),\n flaggedAbnormal && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][interpretation.replace('_', '-')],\n title: (0,_openmrs_esm_translations__rspack_import_3.getCoreTranslation)('abnormalValue', 'Abnormal value')\n })\n ]\n }),\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsxs)(\"div\", {\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"][\"value-container\"],\n children: [\n /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: valueId,\n \"aria-labelledby\": labelId && unitId ? \"\".concat(labelId, \" \").concat(unitId) : labelId || unitId || undefined,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].value,\n children: displayValue\n }),\n hasValue && unit && /*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)(\"span\", {\n id: unitId,\n className: _numeric_observation_module_scss__rspack_import_6[\"default\"].units,\n children: unit\n })\n ]\n })\n ]\n });\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyIS9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9wYWNrYWdlcy9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC9udW1lcmljLW9ic2VydmF0aW9uL251bWVyaWMtb2JzZXJ2YXRpb24uY29tcG9uZW50LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC9udW1lcmljLW9ic2VydmF0aW9uL251bWVyaWMtb2JzZXJ2YXRpb24uY29tcG9uZW50LmpzPzZmNWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBVSSAqLyBpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlSWQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgeyBnZXRDb3JlVHJhbnNsYXRpb24gfSBmcm9tIFwiQG9wZW5tcnMvZXNtLXRyYW5zbGF0aW9uc1wiO1xuaW1wb3J0IHsgY2FsY3VsYXRlSW50ZXJwcmV0YXRpb24sIG5vcm1hbGl6ZUludGVycHJldGF0aW9uIH0gZnJvbSBcIi4vaW50ZXJwcmV0YXRpb24tdXRpbHMuanNcIjtcbmltcG9ydCB7IHVzZUNvbmNlcHRSZWZlcmVuY2VSYW5nZSB9IGZyb20gXCIuL3VzZS1jb25jZXB0LXJlZmVyZW5jZS1yYW5nZS5qc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9udW1lcmljLW9ic2VydmF0aW9uLm1vZHVsZS5zY3NzXCI7XG4vKipcbiAqIEdlbmVyaWMgbnVtZXJpYyBvYnNlcnZhdGlvbiBjb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgbnVtZXJpYyBvYnNlcnZhdGlvbiB2YWx1ZXMgd2l0aCBpbnRlcnByZXRhdGlvbi1iYXNlZCBzdHlsaW5nLlxuICogU3VwcG9ydHMgYm90aCB2aXRhbHMgYW5kIHRlc3QgcmVzdWx0cyBkaXNwbGF5IHBhdHRlcm5zLlxuICovIGV4cG9ydCBjb25zdCBOdW1lcmljT2JzZXJ2YXRpb24gPSAoeyB2YWx1ZSwgdW5pdCwgbGFiZWwsIGludGVycHJldGF0aW9uOiBwcm92aWRlZEludGVycHJldGF0aW9uLCByZWZlcmVuY2VSYW5nZTogcHJvdmlkZWRSZWZlcmVuY2VSYW5nZSwgY29uY2VwdFV1aWQsIHZhcmlhbnQgPSAnY2FyZCcsIHBhdGllbnRVdWlkIH0pPT57XG4gICAgY29uc3QgZ2VuZXJhdGVkSWQgPSB1c2VJZCgpO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlUmFuZ2U6IGZldGNoZWRSZWZlcmVuY2VSYW5nZSwgaXNMb2FkaW5nOiBpc0xvYWRpbmdDb25jZXB0IH0gPSB1c2VDb25jZXB0UmVmZXJlbmNlUmFuZ2UocHJvdmlkZWRSZWZlcmVuY2VSYW5nZSB8fCBwcm92aWRlZEludGVycHJldGF0aW9uID8gdW5kZWZpbmVkIDogY29uY2VwdFV1aWQsIHBhdGllbnRVdWlkKTtcbiAgICBjb25zdCByZWZlcmVuY2VSYW5nZSA9IHByb3ZpZGVkUmVmZXJlbmNlUmFuZ2UgPz8gZmV0Y2hlZFJlZmVyZW5jZVJhbmdlO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRJbnRlcnByZXRhdGlvbiA9IHVzZU1lbW8oKCk9PntcbiAgICAgICAgaWYgKHByb3ZpZGVkSW50ZXJwcmV0YXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVJbnRlcnByZXRhdGlvbihwcm92aWRlZEludGVycHJldGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVmZXJlbmNlUmFuZ2UgJiYgIWlzTG9hZGluZ0NvbmNlcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVJbnRlcnByZXRhdGlvbih2YWx1ZSwgcmVmZXJlbmNlUmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcbiAgICB9LCBbXG4gICAgICAgIHByb3ZpZGVkSW50ZXJwcmV0YXRpb24sXG4gICAgICAgIHJlZmVyZW5jZVJhbmdlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaXNMb2FkaW5nQ29uY2VwdFxuICAgIF0pO1xuICAgIGNvbnN0IGludGVycHJldGF0aW9uID0gY2FsY3VsYXRlZEludGVycHJldGF0aW9uID8/ICdub3JtYWwnO1xuICAgIGNvbnN0IGZsYWdnZWRDcml0aWNhbCA9IGludGVycHJldGF0aW9uID09PSAnY3JpdGljYWxseV9sb3cnIHx8IGludGVycHJldGF0aW9uID09PSAnY3JpdGljYWxseV9oaWdoJyB8fCBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9sb3cnIHx8IGludGVycHJldGF0aW9uID09PSAnb2ZmX3NjYWxlX2hpZ2gnO1xuICAgIGNvbnN0IGZsYWdnZWRBYm5vcm1hbCA9IGludGVycHJldGF0aW9uICE9PSAnbm9ybWFsJztcbiAgICBjb25zdCBsYWJlbElkID0gbGFiZWwgPyBgb21ycy1udW1lcmljLW9icy1sYWJlbC0ke2xhYmVsLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKS50b0xvd2VyQ2FzZSgpfS0ke2dlbmVyYXRlZElkfWAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWVJZCA9IGBvbXJzLW51bWVyaWMtb2JzLXZhbHVlLSR7Z2VuZXJhdGVkSWR9YDtcbiAgICBjb25zdCB1bml0SWQgPSBgb21ycy1udW1lcmljLW9icy11bml0LSR7Z2VuZXJhdGVkSWR9YDtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnO1xuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGhhc1ZhbHVlID8gdmFsdWUgOiBnZXRDb3JlVHJhbnNsYXRpb24oJ25vdEF2YWlsYWJsZScsICdOb3QgYXZhaWxhYmxlJyk7XG4gICAgY29uc3QgaW50ZXJwcmV0YXRpb25DbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgIFtzdHlsZXNbJ2NyaXRpY2FsbHktbG93J11dOiBpbnRlcnByZXRhdGlvbiA9PT0gJ2NyaXRpY2FsbHlfbG93JyB8fCBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9sb3cnLFxuICAgICAgICBbc3R5bGVzWydjcml0aWNhbGx5LWhpZ2gnXV06IGludGVycHJldGF0aW9uID09PSAnY3JpdGljYWxseV9oaWdoJyB8fCBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9oaWdoJyxcbiAgICAgICAgW3N0eWxlcy5sb3ddOiBpbnRlcnByZXRhdGlvbiA9PT0gJ2xvdycsXG4gICAgICAgIFtzdHlsZXMuaGlnaF06IGludGVycHJldGF0aW9uID09PSAnaGlnaCcsXG4gICAgICAgIFtzdHlsZXNbJ29mZi1zY2FsZS1sb3cnXV06IGludGVycHJldGF0aW9uID09PSAnb2ZmX3NjYWxlX2xvdycsXG4gICAgICAgIFtzdHlsZXNbJ29mZi1zY2FsZS1oaWdoJ11dOiBpbnRlcnByZXRhdGlvbiA9PT0gJ29mZl9zY2FsZV9oaWdoJ1xuICAgIH0pO1xuICAgIGNvbnN0IGNhcmRDb250YWluZXJDbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgIFtzdHlsZXMuY29udGFpbmVyXTogdHJ1ZSxcbiAgICAgICAgW3N0eWxlcy5jYXJkXTogdHJ1ZSxcbiAgICAgICAgW3N0eWxlc1snY3JpdGljYWwtdmFsdWUnXV06IGZsYWdnZWRDcml0aWNhbCxcbiAgICAgICAgW3N0eWxlc1snYWJub3JtYWwtdmFsdWUnXV06IGZsYWdnZWRBYm5vcm1hbCAmJiAhZmxhZ2dlZENyaXRpY2FsXG4gICAgfSk7XG4gICAgY29uc3QgY2VsbENsYXNzZXMgPSBjbGFzc05hbWVzKHtcbiAgICAgICAgW3N0eWxlcy5jZWxsXTogdHJ1ZSxcbiAgICAgICAgW2ludGVycHJldGF0aW9uQ2xhc3Nlc106IHRydWVcbiAgICB9KTtcbiAgICBpZiAodmFyaWFudCA9PT0gJ2NlbGwnKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovIF9qc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXMsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSAmJiB1bml0ID8gYCAke3VuaXR9YCA6ICcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qLyBfanN4cyhcInNlY3Rpb25cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNhcmRDb250YWluZXJDbGFzc2VzLFxuICAgICAgICBcImRhdGEtdGVzdGlkXCI6IFwibnVtZXJpYy1vYnNlcnZhdGlvbi1jYXJkXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICBsYWJlbCAmJiAvKiNfX1BVUkVfXyovIF9qc3hzKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlc1snbGFiZWwtY29udGFpbmVyJ10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyBfanN4KFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGFiZWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmbGFnZ2VkQWJub3JtYWwgJiYgLyojX19QVVJFX18qLyBfanN4KFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlc1tpbnRlcnByZXRhdGlvbi5yZXBsYWNlKCdfJywgJy0nKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCdhYm5vcm1hbFZhbHVlJywgJ0Fibm9ybWFsIHZhbHVlJylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gX2pzeHMoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzWyd2YWx1ZS1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovIF9qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB2YWx1ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogbGFiZWxJZCAmJiB1bml0SWQgPyBgJHtsYWJlbElkfSAke3VuaXRJZH1gIDogbGFiZWxJZCB8fCB1bml0SWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZSAmJiB1bml0ICYmIC8qI19fUFVSRV9fKi8gX2pzeChcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHVuaXRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogc3R5bGVzLnVuaXRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJSZWFjdCIsInVzZU1lbW8iLCJ1c2VJZCIsImNsYXNzTmFtZXMiLCJnZXRDb3JlVHJhbnNsYXRpb24iLCJjYWxjdWxhdGVJbnRlcnByZXRhdGlvbiIsIm5vcm1hbGl6ZUludGVycHJldGF0aW9uIiwidXNlQ29uY2VwdFJlZmVyZW5jZVJhbmdlIiwic3R5bGVzIiwiTnVtZXJpY09ic2VydmF0aW9uIiwidmFsdWUiLCJ1bml0IiwibGFiZWwiLCJwcm92aWRlZEludGVycHJldGF0aW9uIiwicHJvdmlkZWRSZWZlcmVuY2VSYW5nZSIsImNvbmNlcHRVdWlkIiwidmFyaWFudCIsInBhdGllbnRVdWlkIiwiZ2VuZXJhdGVkSWQiLCJfdXNlQ29uY2VwdFJlZmVyZW5jZVJhbmdlIiwidW5kZWZpbmVkIiwiZmV0Y2hlZFJlZmVyZW5jZVJhbmdlIiwiaXNMb2FkaW5nQ29uY2VwdCIsInJlZmVyZW5jZVJhbmdlIiwiY2FsY3VsYXRlZEludGVycHJldGF0aW9uIiwiaW50ZXJwcmV0YXRpb24iLCJmbGFnZ2VkQ3JpdGljYWwiLCJmbGFnZ2VkQWJub3JtYWwiLCJsYWJlbElkIiwidmFsdWVJZCIsInVuaXRJZCIsImhhc1ZhbHVlIiwiZGlzcGxheVZhbHVlIiwiX29iaiIsImludGVycHJldGF0aW9uQ2xhc3NlcyIsIl9vYmoxIiwiY2FyZENvbnRhaW5lckNsYXNzZXMiLCJfb2JqMiIsImNlbGxDbGFzc2VzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUErRDtBQUMvRCx5QkFBeUIsR0FBaUQ7QUFDdEM7QUFDMkI7QUFDOEI7QUFDakI7QUFDckI7QUFDdkQ7OztDQUdDLEdBQVUsSUFBTWEscUJBQXFCO1FBQUdDLGNBQUFBLE9BQU9DLGFBQUFBLE1BQU1DLGNBQUFBLE9BQXVCQywrQkFBaEIsZ0JBQXdEQywrQkFBaEIsZ0JBQXdDQyxvQkFBQUEsb0NBQWFDLFNBQUFBLHNDQUFVLHlCQUFRQyxvQkFBQUE7SUFDeEssSUFBTUMsY0FBY2hCLGdDQUFLQTtJQUN6QixJ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\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/dist/numeric-observation/numeric-observation.component.js\n\n}");
|
|
1764
1764
|
|
|
1765
1765
|
},
|
|
1766
1766
|
"../../framework/esm-styleguide/dist/numeric-observation/use-concept-reference-range.js"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
@@ -1955,7 +1955,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
|
|
|
1955
1955
|
},
|
|
1956
1956
|
"../../framework/esm-styleguide/dist/workspaces/workspaces.js"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
1957
1957
|
"use strict";
|
|
1958
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n canCloseWorkspaceWithoutPrompting: () => (canCloseWorkspaceWithoutPrompting),\n cancelPrompt: () => (cancelPrompt),\n changeWorkspaceContext: () => (changeWorkspaceContext),\n closeAllWorkspaces: () => (closeAllWorkspaces),\n closeWorkspace: () => (closeWorkspace),\n getPromptBeforeClosingFcn: () => (getPromptBeforeClosingFcn),\n getWorkspaceGroupStore: () => (getWorkspaceGroupStore),\n getWorkspaceStore: () => (getWorkspaceStore),\n launchWorkspace: () => (launchWorkspace),\n launchWorkspaceGroup: () => (launchWorkspaceGroup),\n navigateAndLaunchWorkspace: () => (navigateAndLaunchWorkspace),\n promptBeforeClosing: () => (promptBeforeClosing),\n resetWorkspaceStore: () => (resetWorkspaceStore),\n showWorkspacePrompts: () => (showWorkspacePrompts),\n updateWorkspaceWindowState: () => (updateWorkspaceWindowState),\n useWorkspaces: () => (useWorkspaces),\n workspaceStore: () => (workspaceStore)\n});\n/* import */ var react__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_0);\n/* import */ var _openmrs_esm_extensions__rspack_import_1 = __webpack_require__(\"../../framework/esm-extensions/dist/index.js\");\n/* import */ var _openmrs_esm_navigation__rspack_import_2 = __webpack_require__(\"../../framework/esm-navigation/dist/index.js\");\n/* import */ var _openmrs_esm_state__rspack_import_3 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var _openmrs_esm_translations__rspack_import_4 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _openmrs_esm_react_utils__rspack_import_5 = __webpack_require__(\"../../framework/esm-react-utils/dist/index.js\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n/** @module @category Workspace */ \n\n\n\n\n\n/**\n *\n * @param name Name of the workspace\n * @param ignoreChanges If set to true, the \"unsaved changes\" modal will never be shown, even if the `promptBeforeClosing` function returns true. The user will not be prompted before closing.\n * @returns true if the workspace can be closed.\n */ function canCloseWorkspaceWithoutPrompting(name) {\n var ignoreChanges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n if (ignoreChanges) {\n return true;\n }\n var promptBeforeFn = getPromptBeforeClosingFcn(name);\n return !promptBeforeFn || !promptBeforeFn();\n}\n/**\n * Closes a workspace group and performs cleanup operations.\n *\n * @param groupName - The name of the workspace group to close\n * @param onWorkspaceCloseup - Optional callback function to execute after closing the workspace group\n * @returns void, or exits early if the current workspace group name doesn't match the provided group name\n *\n * @remarks\n * This function performs the following operations:\n * - Validates if the provided group name matches the current workspace group\n * - Closes all workspaces associated with the group\n * - Clears the workspace group store state\n * - Executes cleanup function if defined in the workspace group\n * - Updates the main workspace store to remove the workspace group\n * - Calls the optional closeup callback if provided\n *\n * @deprecated migrate to workspace v2 and use closeWorkspaceGroup2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function closeWorkspaceGroup(groupName, onWorkspaceCloseup) {\n var _store_getState;\n var store = getWorkspaceStore();\n var currentWorkspaceGroup = (_store_getState = store.getState()) === null || _store_getState === void 0 ? void 0 : _store_getState.workspaceGroup;\n var currentGroupName = currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.name;\n if (!currentGroupName || groupName !== currentGroupName) {\n return;\n }\n var filter = currentGroupName ? function(workspace) {\n return workspace.currentWorkspaceGroup === currentGroupName;\n } : function() {\n return true;\n };\n closeAllWorkspaces(function() {\n // Clearing the workspace group and respective store if the new workspace is not part of the current group, which is handled in the `launchWorkspace` function.\n var workspaceGroupStore = getWorkspaceGroupStore(groupName);\n if (workspaceGroupStore) {\n workspaceGroupStore.setState({}, true);\n var unsubscribe = workspaceGroupStore.subscribe(function() {});\n unsubscribe();\n }\n if (typeof (currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.cleanup) === 'function') {\n currentWorkspaceGroup.cleanup();\n }\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: undefined\n });\n });\n if (typeof onWorkspaceCloseup === 'function') {\n onWorkspaceCloseup();\n }\n }, filter);\n}\n/**\n * Launches a workspace group with the specified name and configuration.\n * If there are any open workspaces, it will first close them before launching the new workspace group.\n *\n * @param groupName - The name of the workspace group to launch\n * @param args - Configuration object for launching the workspace group\n * @param args.state - The initial state for the workspace group\n * @param args.onWorkspaceGroupLaunch - Optional callback function to be executed after the workspace group is launched\n * @param args.workspaceGroupCleanup - Optional cleanup function to be executed when the workspace group is closed\n *\n * @example\n * launchWorkspaceGroup(\"myGroup\", {\n * state: initialState,\n * onWorkspaceGroupLaunch: () => console.log(\"Workspace group launched\"),\n * workspaceGroupCleanup: () => console.log(\"Cleaning up workspace group\")\n * });\n *\n * @deprecated migrate to workspace v2 and use launchWorkspaceGroup2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function launchWorkspaceGroup(groupName, args) {\n var workspaceGroupRegistration = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceGroupRegistration)(groupName);\n var state = args.state, onWorkspaceGroupLaunch = args.onWorkspaceGroupLaunch, workspaceGroupCleanup = args.workspaceGroupCleanup, workspaceToLaunch = args.workspaceToLaunch;\n var store = getWorkspaceStore();\n if (store.getState().openWorkspaces.length) {\n var workspaceGroup = store.getState().workspaceGroup;\n if (workspaceGroup) {\n closeWorkspaceGroup(workspaceGroup === null || workspaceGroup === void 0 ? void 0 : workspaceGroup.name, function() {\n launchWorkspaceGroup(groupName, args);\n });\n } else {\n closeAllWorkspaces(function() {\n launchWorkspaceGroup(groupName, args);\n });\n }\n } else {\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: {\n name: groupName,\n members: workspaceGroupRegistration.members,\n cleanup: workspaceGroupCleanup\n }\n });\n });\n getWorkspaceGroupStore(groupName, state);\n onWorkspaceGroupLaunch === null || onWorkspaceGroupLaunch === void 0 ? void 0 : onWorkspaceGroupLaunch();\n if (workspaceToLaunch) {\n var _workspaceToLaunch_additionalProps;\n launchWorkspace(workspaceToLaunch.name, (_workspaceToLaunch_additionalProps = workspaceToLaunch.additionalProps) !== null && _workspaceToLaunch_additionalProps !== void 0 ? _workspaceToLaunch_additionalProps : {});\n }\n }\n}\nfunction promptBeforeLaunchingWorkspace(workspace, newWorkspaceDetails) {\n var name = newWorkspaceDetails.name, additionalProps = newWorkspaceDetails.additionalProps;\n var newWorkspaceRegistration = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name);\n var proceed = function proceed() {\n closeWorkspace(workspace.name, {\n ignoreChanges: true,\n // Calling the launchWorkspace again, since one of the `if` case\n // might resolve, but we need to check all the cases before launching the form.\n onWorkspaceClose: function onWorkspaceClose() {\n return launchWorkspace(name, additionalProps);\n },\n // If the new workspace is of the same sidebar group, then we don't need to clear the workspace group store.\n closeWorkspaceGroup: false\n });\n };\n if (!canCloseWorkspaceWithoutPrompting(workspace.name)) {\n var _workspace_title;\n showWorkspacePrompts('closing-workspace-launching-new-workspace', proceed, (_workspace_title = workspace.title) !== null && _workspace_title !== void 0 ? _workspace_title : workspace.name);\n } else {\n proceed();\n }\n}\n/**\n * This launches a workspace by its name. The workspace must have been registered.\n * Workspaces should be registered in the `routes.json` file.\n *\n * For the workspace to appear, there must be either a `<WorkspaceOverlay />` or\n * a `<WorkspaceWindow />` component rendered.\n *\n * The behavior of this function is as follows:\n *\n * - If no workspaces are open, or if no other workspaces with the same type are open,\n * it will be opened and focused.\n * - If a workspace with the same name is already open, it will be displayed/focused,\n * if it was not already.\n * - If a workspace is launched and a workspace which cannot be hidden is already open,\n * a confirmation modal will pop up warning about closing the currently open workspace.\n * - If another workspace with the same type is open, the workspace will be brought to\n * the front and then a confirmation modal will pop up warning about closing the opened\n * workspace\n *\n * Note that this function just manipulates the workspace store. The UI logic is handled\n * by the components that display workspaces.\n *\n * Additional props can be passed to the workspace component being launched. Passing a\n * prop named `workspaceTitle` will override the title of the workspace.\n *\n * @param name The name of the workspace to launch\n * @param additionalProps Props to pass to the workspace component being launched. Passing\n * a prop named `workspaceTitle` will override the title of the workspace.\n *\n * @deprecated migrate to workspace v2 and use launchWorkspace2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function launchWorkspace(name, additionalProps) {\n var _currentWorkspaceGroup_members, _store_getState_workspaceGroup;\n var store = getWorkspaceStore();\n var workspace = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name);\n var currentWorkspaceGroup = store.getState().workspaceGroup;\n if (currentWorkspaceGroup && !((_currentWorkspaceGroup_members = currentWorkspaceGroup.members) === null || _currentWorkspaceGroup_members === void 0 ? void 0 : _currentWorkspaceGroup_members.includes(name))) {\n closeWorkspaceGroup(currentWorkspaceGroup.name, function() {\n launchWorkspace(name, additionalProps);\n });\n return;\n }\n var currentGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n var newWorkspace = _object_spread_props(_object_spread({}, workspace), {\n title: getWorkspaceTitle(workspace, additionalProps),\n closeWorkspace: function closeWorkspace1() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n return closeWorkspace(name, options);\n },\n closeWorkspaceWithSavedChanges: function closeWorkspaceWithSavedChanges(options) {\n return closeWorkspace(name, _object_spread({\n ignoreChanges: true\n }, options));\n },\n promptBeforeClosing: function promptBeforeClosing1(testFcn) {\n return promptBeforeClosing(name, testFcn);\n },\n setTitle: function setTitle(title, titleNode) {\n newWorkspace.title = title;\n newWorkspace.titleNode = titleNode;\n store.setState(function(state) {\n var openWorkspaces = state.openWorkspaces.map(function(w) {\n return w.name === name ? newWorkspace : w;\n });\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces\n });\n });\n },\n currentWorkspaceGroup: currentGroupName,\n additionalProps: additionalProps !== null && additionalProps !== void 0 ? additionalProps : {}\n });\n if (currentGroupName) {\n getWorkspaceGroupStore(currentGroupName, additionalProps);\n }\n function updateStoreWithNewWorkspace(workspaceToBeAdded, restOfTheWorkspaces) {\n store.setState(function(state) {\n var openWorkspaces = [\n workspaceToBeAdded\n ].concat(_to_consumable_array(restOfTheWorkspaces !== null && restOfTheWorkspaces !== void 0 ? restOfTheWorkspaces : state.openWorkspaces));\n var workspaceWindowState = getUpdatedWorkspaceWindowState(workspaceToBeAdded);\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces,\n workspaceWindowState: workspaceWindowState\n });\n });\n }\n var openWorkspaces = store.getState().openWorkspaces;\n var workspaceIndexInOpenWorkspaces = openWorkspaces.findIndex(function(w) {\n return w.name === name;\n });\n var isWorkspaceAlreadyOpen = workspaceIndexInOpenWorkspaces >= 0;\n var openedWorkspaceWithSameType = openWorkspaces.find(function(w) {\n return w.type == newWorkspace.type;\n });\n if (openWorkspaces.length === 0) {\n updateStoreWithNewWorkspace(newWorkspace);\n } else if (!openWorkspaces[0].canHide && workspaceIndexInOpenWorkspaces !== 0) {\n promptBeforeLaunchingWorkspace(openWorkspaces[0], {\n name: name,\n additionalProps: additionalProps\n });\n } else if (isWorkspaceAlreadyOpen) {\n var openWorkspace = openWorkspaces[workspaceIndexInOpenWorkspaces];\n // Only update the title if it hasn't been set by `setTitle`\n if (openWorkspace.title === getWorkspaceTitle(openWorkspace, openWorkspace.additionalProps)) {\n openWorkspace.title = getWorkspaceTitle(newWorkspace, newWorkspace.additionalProps);\n }\n openWorkspace.additionalProps = newWorkspace.additionalProps;\n var restOfTheWorkspaces = openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n updateStoreWithNewWorkspace(openWorkspaces[workspaceIndexInOpenWorkspaces], restOfTheWorkspaces);\n } else if (openedWorkspaceWithSameType) {\n var restOfTheWorkspaces1 = store.getState().openWorkspaces.filter(function(w) {\n return w.type != newWorkspace.type;\n });\n updateStoreWithNewWorkspace(openedWorkspaceWithSameType, restOfTheWorkspaces1);\n promptBeforeLaunchingWorkspace(openedWorkspaceWithSameType, {\n name: name,\n additionalProps: additionalProps\n });\n } else {\n updateStoreWithNewWorkspace(newWorkspace);\n }\n}\n/**\n * Use this function to navigate to a new page and launch a workspace on that page.\n *\n * @param options The options for navigating and launching the workspace.\n * @param options.targetUrl The URL to navigate to. Will be passed to [[navigate]].\n * @param options.contextKey The context key used by the target page.\n * @param options.workspaceName The name of the workspace to launch.\n * @param options.additionalProps Additional props to pass to the workspace component being launched.\n *\n * @deprecated migrate to workspace v2 and call launchWorkspace2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function navigateAndLaunchWorkspace(param) {\n var targetUrl = param.targetUrl, contextKey = param.contextKey, workspaceName = param.workspaceName, additionalProps = param.additionalProps;\n changeWorkspaceContext(contextKey);\n launchWorkspace(workspaceName, additionalProps);\n (0,_openmrs_esm_navigation__rspack_import_2.navigate)({\n to: targetUrl\n });\n}\nvar promptBeforeClosingFcns = {};\nfunction promptBeforeClosing(workspaceName, testFcn) {\n promptBeforeClosingFcns[workspaceName] = testFcn;\n}\nfunction getPromptBeforeClosingFcn(workspaceName) {\n return promptBeforeClosingFcns[workspaceName];\n}\nfunction cancelPrompt() {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n prompt: null\n }));\n}\nvar defaultOptions = {\n ignoreChanges: false,\n onWorkspaceClose: function onWorkspaceClose() {},\n closeWorkspaceGroup: true\n};\n/**\n * Function to close an opened workspace\n * @param name Workspace registration name\n * @param options Options to close workspace\n *\n * @deprecated migrate to workspace v2 and call closeWorkspace from Workspace2DefinitionProps instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function closeWorkspace(name) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n options = _object_spread({}, defaultOptions, options);\n var store = getWorkspaceStore();\n var updateStoreWithClosedWorkspace = function updateStoreWithClosedWorkspace() {\n var _store_getState_workspaceGroup, _options_onWorkspaceClose;\n var state = store.getState();\n var workspaceToBeClosed = state.openWorkspaces.find(function(w) {\n return w.name === name;\n });\n var newOpenWorkspaces = state.openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n var workspaceGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n if (workspaceGroupName && options.closeWorkspaceGroup) {\n closeWorkspaceGroup(workspaceGroupName);\n }\n // ensure closed workspace will not prompt\n promptBeforeClosing(name, function() {\n return false;\n });\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n prompt: null,\n openWorkspaces: newOpenWorkspaces,\n workspaceWindowState: getUpdatedWorkspaceWindowState(newOpenWorkspaces === null || newOpenWorkspaces === void 0 ? void 0 : newOpenWorkspaces[0])\n });\n });\n options === null || options === void 0 ? void 0 : (_options_onWorkspaceClose = options.onWorkspaceClose) === null || _options_onWorkspaceClose === void 0 ? void 0 : _options_onWorkspaceClose.call(options);\n };\n if (!canCloseWorkspaceWithoutPrompting(name, options === null || options === void 0 ? void 0 : options.ignoreChanges)) {\n var _getWorkspaceRegistration_title;\n var currentName = (_getWorkspaceRegistration_title = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name).title) !== null && _getWorkspaceRegistration_title !== void 0 ? _getWorkspaceRegistration_title : name;\n showWorkspacePrompts('closing-workspace', updateStoreWithClosedWorkspace, currentName);\n return false;\n } else {\n updateStoreWithClosedWorkspace();\n return true;\n }\n}\n/**\n * The set of workspaces is specific to a particular page. This function\n * should be used when transitioning to a new page. If the current\n * workspace data is for a different page, the workspace state is cleared.\n *\n * This is called by the workspace components when they mount.\n * @internal\n *\n * @param contextKey An arbitrary key to identify the current page\n */ function changeWorkspaceContext(contextKey) {\n var store = getWorkspaceStore();\n var state = store.getState();\n if (state.context != contextKey) {\n store.setState({\n context: contextKey,\n openWorkspaces: [],\n prompt: null\n });\n }\n}\nvar initialState = {\n context: '',\n openWorkspaces: [],\n prompt: null,\n workspaceWindowState: 'normal',\n workspaceGroup: undefined\n};\nvar workspaceStore = (0,_openmrs_esm_state__rspack_import_3.createGlobalStore)('workspace', initialState);\nfunction getWorkspaceStore() {\n return workspaceStore;\n}\nfunction updateWorkspaceWindowState(value) {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n workspaceWindowState: value\n }));\n}\nfunction getUpdatedWorkspaceWindowState(workspaceAtTop) {\n var _ref;\n return (_ref = workspaceAtTop === null || workspaceAtTop === void 0 ? void 0 : workspaceAtTop.preferredWindowSize) !== null && _ref !== void 0 ? _ref : 'normal';\n}\nfunction closeAllWorkspaces() {\n var onClosingWorkspaces = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}, filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {\n return true;\n };\n var store = getWorkspaceStore();\n var canCloseAllWorkspaces = store.getState().openWorkspaces.filter(filter).every(function(param) {\n var name = param.name;\n return canCloseWorkspaceWithoutPrompting(name);\n });\n var updateWorkspaceStore = function updateWorkspaceStore() {\n resetWorkspaceStore();\n onClosingWorkspaces === null || onClosingWorkspaces === void 0 ? void 0 : onClosingWorkspaces();\n };\n if (!canCloseAllWorkspaces) {\n showWorkspacePrompts('closing-all-workspaces', updateWorkspaceStore);\n } else {\n updateWorkspaceStore();\n }\n}\n/**\n * @deprecated migrate to workspace v2. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function useWorkspaces() {\n var _useStore = (0,_openmrs_esm_react_utils__rspack_import_5.useStore)(workspaceStore), workspaceWindowState = _useStore.workspaceWindowState, openWorkspaces = _useStore.openWorkspaces, prompt = _useStore.prompt, workspaceGroup = _useStore.workspaceGroup;\n var memoisedResults = (0,react__rspack_import_0.useMemo)(function() {\n return {\n active: openWorkspaces.length > 0,\n prompt: prompt,\n workspaceWindowState: workspaceWindowState,\n workspaces: openWorkspaces,\n workspaceGroup: workspaceGroup\n };\n }, [\n openWorkspaces,\n workspaceWindowState,\n prompt,\n workspaceGroup\n ]);\n return memoisedResults;\n}\n/**\n * Sets the current prompt according to the prompt type.\n * @param promptType Determines the text and behavior of the prompt\n * @param onConfirmation Function to be called after the user confirms to close the workspace\n * @param workspaceTitle Workspace title to be shown in the prompt\n * @returns\n */ function showWorkspacePrompts(promptType) {\n var onConfirmation = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {}, workspaceTitle = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : '';\n var store = getWorkspaceStore();\n var prompt;\n switch(promptType){\n case 'closing-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesInOpenedWorkspace', \"You may have unsaved changes in the opened workspace. Do you want to discard these changes?\"),\n onConfirm: function onConfirm() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('discard', 'Discard')\n };\n break;\n }\n case 'closing-all-workspaces':\n {\n var workspacesNotClosed = store.getState().openWorkspaces.filter(function(param) {\n var name = param.name;\n return !canCloseWorkspaceWithoutPrompting(name);\n }).map(function(param, indx) {\n var title = param.title;\n return \"\".concat(indx + 1, \". \").concat(title);\n });\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closingAllWorkspacesPromptTitle', 'You have unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closingAllWorkspacesPromptBody', 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}', {\n workspaceNames: workspacesNotClosed.join(',')\n }),\n onConfirm: function onConfirm() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closeAllOpenedWorkspaces', 'Discard changes in {{count}} workspaces', {\n count: workspacesNotClosed.length\n })\n };\n break;\n }\n case 'closing-workspace-launching-new-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesInWorkspace', 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.', {\n workspaceName: workspaceTitle\n }),\n onConfirm: function onConfirm() {\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: null\n });\n });\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('openAnyway', 'Open anyway')\n };\n break;\n }\n default:\n {\n console.error('Workspace system trying to open unknown prompt type \"'.concat(promptType, '\" in function \"showWorkspacePrompts\"'));\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n return;\n }\n }\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: prompt\n });\n });\n}\nfunction getWorkspaceTitle(workspace, additionalProps) {\n var _ref;\n return (_ref = additionalProps === null || additionalProps === void 0 ? void 0 : additionalProps['workspaceTitle']) !== null && _ref !== void 0 ? _ref : workspace.title;\n}\nfunction resetWorkspaceStore() {\n getWorkspaceStore().setState(initialState);\n}\n/**\n * The workspace group store is a store that is specific to the workspace group.\n * If the workspace has its own sidebar, the store will be created.\n * This store can be used to store data that is specific to the workspace group.\n * The store will be same for all the workspaces with same group name.\n *\n * For workspaces launched without a group, the store will be undefined.\n *\n * The store will be cleared when all the workspaces with the store's group name are closed.\n */ function getWorkspaceGroupStore(workspaceGroupName) {\n var additionalProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n if (!workspaceGroupName || workspaceGroupName === 'default') {\n return undefined;\n }\n var store = (0,_openmrs_esm_state__rspack_import_3.getGlobalStore)(workspaceGroupName, {});\n if (additionalProps) {\n store.setState(function(prev) {\n return _object_spread({}, prev, additionalProps);\n });\n }\n return store;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyIS9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9wYWNrYWdlcy9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC93b3Jrc3BhY2VzL3dvcmtzcGFjZXMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tc3R5bGVndWlkZS9kaXN0L3dvcmtzcGFjZXMvd29ya3NwYWNlcy5qcz83ZTkwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBXb3Jrc3BhY2UgKi8gaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgZ2V0V29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24sIGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCJAb3Blbm1ycy9lc20tZXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHsgbmF2aWdhdGUgfSBmcm9tIFwiQG9wZW5tcnMvZXNtLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7IGdldEdsb2JhbFN0b3JlLCBjcmVhdGVHbG9iYWxTdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tc3RhdGVcIjtcbmltcG9ydCB7IGdldENvcmVUcmFuc2xhdGlvbiB9IGZyb20gXCJAb3Blbm1ycy9lc20tdHJhbnNsYXRpb25zXCI7XG5pbXBvcnQgeyB1c2VTdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tcmVhY3QtdXRpbHNcIjtcbi8qKlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHdvcmtzcGFjZVxuICogQHBhcmFtIGlnbm9yZUNoYW5nZXMgSWYgc2V0IHRvIHRydWUsIHRoZSBcInVuc2F2ZWQgY2hhbmdlc1wiIG1vZGFsIHdpbGwgbmV2ZXIgYmUgc2hvd24sIGV2ZW4gaWYgdGhlIGBwcm9tcHRCZWZvcmVDbG9zaW5nYCBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkIGJlZm9yZSBjbG9zaW5nLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya3NwYWNlIGNhbiBiZSBjbG9zZWQuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UpIHtcbiAgICBpZiAoaWdub3JlQ2hhbmdlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJvbXB0QmVmb3JlRm4gPSBnZXRQcm9tcHRCZWZvcmVDbG9zaW5nRmNuKG5hbWUpO1xuICAgIHJldHVybiAhcHJvbXB0QmVmb3JlRm4gfHwgIXByb21wdEJlZm9yZUZuKCk7XG59XG4vKipcbiAqIENsb3NlcyBhIHdvcmtzcGFjZSBncm91cCBhbmQgcGVyZm9ybXMgY2xlYW51cCBvcGVyYXRpb25zLlxuICpcbiAqIEBwYXJhbSBncm91cE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIGdyb3VwIHRvIGNsb3NlXG4gKiBAcGFyYW0gb25Xb3Jrc3BhY2VDbG9zZXVwIC0gT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBjbG9zaW5nIHRoZSB3b3Jrc3BhY2UgZ3JvdXBcbiAqIEByZXR1cm5zIHZvaWQsIG9yIGV4aXRzIGVhcmx5IGlmIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBncm91cCBuYW1lIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIGdyb3VwIG5hbWVcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6XG4gKiAtIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgZ3JvdXAgbmFtZSBtYXRjaGVzIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBncm91cFxuICogLSBDbG9zZXMgYWxsIHdvcmtzcGFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBncm91cFxuICogLSBDbGVhcnMgdGhlIHdvcmtzcGFjZSBncm91cCBzdG9yZSBzdGF0ZVxuICogLSBFeGVjdXRlcyBjbGVhbnVwIGZ1bmN0aW9uIGlmIGRlZmluZWQgaW4gdGhlIHdvcmtzcGFjZSBncm91cFxuICogLSBVcGRhdGVzIHRoZSBtYWluIHdvcmtzcGFjZSBzdG9yZSB0byByZW1vdmUgdGhlIHdvcmtzcGFjZSBncm91cFxuICogLSBDYWxscyB0aGUgb3B0aW9uYWwgY2xvc2V1cCBjYWxsYmFjayBpZiBwcm92aWRlZFxuICpcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyIGFuZCB1c2UgY2xvc2VXb3Jrc3BhY2VHcm91cDIgaW5zdGVhZC4gU2VlOlxuICogaHR0cHM6Ly9vcGVubXJzLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvZG9jcy9wYWdlcy82MTU2Nzc5ODEvV29ya3NwYWNlK3YyK01pZ3JhdGlvbitHdWlkZVxuICovIGZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlR3JvdXAoZ3JvdXBOYW1lLCBvbldvcmtzcGFjZUNsb3NldXApIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3QgY3VycmVudFdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKT8ud29ya3NwYWNlR3JvdXA7XG4gICAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IGN1cnJlbnRXb3Jrc3BhY2VHcm91cD8ubmFtZTtcbiAgICBpZiAoIWN1cnJlbnRHcm91cE5hbWUgfHwgZ3JvdXBOYW1lICE9PSBjdXJyZW50R3JvdXBOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gY3VycmVudEdyb3VwTmFtZSA/ICh3b3Jrc3BhY2UpPT53b3Jrc3BhY2UuY3VycmVudFdvcmtzcGFjZUdyb3VwID09PSBjdXJyZW50R3JvdXBOYW1lIDogKCk9PnRydWU7XG4gICAgY2xvc2VBbGxXb3Jrc3BhY2VzKCgpPT57XG4gICAgICAgIC8vIENsZWFyaW5nIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgYW5kIHJlc3BlY3RpdmUgc3RvcmUgaWYgdGhlIG5ldyB3b3Jrc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAsIHdoaWNoIGlzIGhhbmRsZWQgaW4gdGhlIGBsYXVuY2hXb3Jrc3BhY2VgIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCB3b3Jrc3BhY2VHcm91cFN0b3JlID0gZ2V0V29ya3NwYWNlR3JvdXBTdG9yZShncm91cE5hbWUpO1xuICAgICAgICBpZiAod29ya3NwYWNlR3JvdXBTdG9yZSkge1xuICAgICAgICAgICAgd29ya3NwYWNlR3JvdXBTdG9yZS5zZXRTdGF0ZSh7fSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHdvcmtzcGFjZUdyb3VwU3RvcmUuc3Vic2NyaWJlKCgpPT57fSk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFdvcmtzcGFjZUdyb3VwPy5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjdXJyZW50V29ya3NwYWNlR3JvdXAuY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZUdyb3VwOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbldvcmtzcGFjZUNsb3NldXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uV29ya3NwYWNlQ2xvc2V1cCgpO1xuICAgICAgICB9XG4gICAgfSwgZmlsdGVyKTtcbn1cbi8qKlxuICogTGF1bmNoZXMgYSB3b3Jrc3BhY2UgZ3JvdXAgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIGNvbmZpZ3VyYXRpb24uXG4gKiBJZiB0aGVyZSBhcmUgYW55IG9wZW4gd29ya3NwYWNlcywgaXQgd2lsbCBmaXJzdCBjbG9zZSB0aGVtIGJlZm9yZSBsYXVuY2hpbmcgdGhlIG5ldyB3b3Jrc3BhY2UgZ3JvdXAuXG4gKlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgdG8gbGF1bmNoXG4gKiBAcGFyYW0gYXJncyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBsYXVuY2hpbmcgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHBhcmFtIGFyZ3Muc3RhdGUgLSBUaGUgaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHBhcmFtIGFyZ3Mub25Xb3Jrc3BhY2VHcm91cExhdW5jaCAtIE9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgaXMgbGF1bmNoZWRcbiAqIEBwYXJhbSBhcmdzLndvcmtzcGFjZUdyb3VwQ2xlYW51cCAtIE9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgd29ya3NwYWNlIGdyb3VwIGlzIGNsb3NlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBsYXVuY2hXb3Jrc3BhY2VHcm91cChcIm15R3JvdXBcIiwge1xuICogICBzdGF0ZTogaW5pdGlhbFN0YXRlLFxuICogICBvbldvcmtzcGFjZUdyb3VwTGF1bmNoOiAoKSA9PiBjb25zb2xlLmxvZyhcIldvcmtzcGFjZSBncm91cCBsYXVuY2hlZFwiKSxcbiAqICAgd29ya3NwYWNlR3JvdXBDbGVhbnVwOiAoKSA9PiBjb25zb2xlLmxvZyhcIkNsZWFuaW5nIHVwIHdvcmtzcGFjZSBncm91cFwiKVxuICogfSk7XG4gKlxuICogQGRlcHJlY2F0ZWQgbWlncmF0ZSB0byB3b3Jrc3BhY2UgdjIgYW5kIHVzZSBsYXVuY2hXb3Jrc3BhY2VHcm91cDIgaW5zdGVhZC4gU2VlOlxuICogaHR0cHM6Ly9vcGVubXJzLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvZG9jcy9wYWdlcy82MTU2Nzc5ODEvV29ya3NwYWNlK3YyK01pZ3JhdGlvbitHdWlkZVxuICovIGV4cG9ydCBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2VHcm91cChncm91cE5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uKGdyb3VwTmFtZSk7XG4gICAgY29uc3QgeyBzdGF0ZSwgb25Xb3Jrc3BhY2VHcm91cExhdW5jaCwgd29ya3NwYWNlR3JvdXBDbGVhbnVwLCB3b3Jrc3BhY2VUb0xhdW5jaCB9ID0gYXJncztcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgaWYgKHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cDtcbiAgICAgICAgaWYgKHdvcmtzcGFjZUdyb3VwKSB7XG4gICAgICAgICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKHdvcmtzcGFjZUdyb3VwPy5uYW1lLCAoKT0+e1xuICAgICAgICAgICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb3NlQWxsV29ya3NwYWNlcygoKT0+e1xuICAgICAgICAgICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZUdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyczogd29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24ubWVtYmVycyxcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cDogd29ya3NwYWNlR3JvdXBDbGVhbnVwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGdyb3VwTmFtZSwgc3RhdGUpO1xuICAgICAgICBvbldvcmtzcGFjZUdyb3VwTGF1bmNoPy4oKTtcbiAgICAgICAgaWYgKHdvcmtzcGFjZVRvTGF1bmNoKSB7XG4gICAgICAgICAgICBsYXVuY2hXb3Jrc3BhY2Uod29ya3NwYWNlVG9MYXVuY2gubmFtZSwgd29ya3NwYWNlVG9MYXVuY2guYWRkaXRpb25hbFByb3BzID8/IHt9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZSh3b3Jrc3BhY2UsIG5ld1dvcmtzcGFjZURldGFpbHMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGFkZGl0aW9uYWxQcm9wcyB9ID0gbmV3V29ya3NwYWNlRGV0YWlscztcbiAgICBjb25zdCBuZXdXb3Jrc3BhY2VSZWdpc3RyYXRpb24gPSBnZXRXb3Jrc3BhY2VSZWdpc3RyYXRpb24obmFtZSk7XG4gICAgY29uc3QgcHJvY2VlZCA9ICgpPT57XG4gICAgICAgIGNsb3NlV29ya3NwYWNlKHdvcmtzcGFjZS5uYW1lLCB7XG4gICAgICAgICAgICBpZ25vcmVDaGFuZ2VzOiB0cnVlLFxuICAgICAgICAgICAgLy8gQ2FsbGluZyB0aGUgbGF1bmNoV29ya3NwYWNlIGFnYWluLCBzaW5jZSBvbmUgb2YgdGhlIGBpZmAgY2FzZVxuICAgICAgICAgICAgLy8gbWlnaHQgcmVzb2x2ZSwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYXNlcyBiZWZvcmUgbGF1bmNoaW5nIHRoZSBmb3JtLlxuICAgICAgICAgICAgb25Xb3Jrc3BhY2VDbG9zZTogKCk9PmxhdW5jaFdvcmtzcGFjZShuYW1lLCBhZGRpdGlvbmFsUHJvcHMpLFxuICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyB3b3Jrc3BhY2UgaXMgb2YgdGhlIHNhbWUgc2lkZWJhciBncm91cCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgc3RvcmUuXG4gICAgICAgICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlmICghY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKHdvcmtzcGFjZS5uYW1lKSkge1xuICAgICAgICBzaG93V29ya3NwYWNlUHJvbXB0cygnY2xvc2luZy13b3Jrc3BhY2UtbGF1bmNoaW5nLW5ldy13b3Jrc3BhY2UnLCBwcm9jZWVkLCB3b3Jrc3BhY2UudGl0bGUgPz8gd29ya3NwYWNlLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2NlZWQoKTtcbiAgICB9XG59XG4vKipcbiAqIFRoaXMgbGF1bmNoZXMgYSB3b3Jrc3BhY2UgYnkgaXRzIG5hbWUuIFRoZSB3b3Jrc3BhY2UgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC5cbiAqIFdvcmtzcGFjZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gdGhlIGByb3V0ZXMuanNvbmAgZmlsZS5cbiAqXG4gKiBGb3IgdGhlIHdvcmtzcGFjZSB0byBhcHBlYXIsIHRoZXJlIG11c3QgYmUgZWl0aGVyIGEgYDxXb3Jrc3BhY2VPdmVybGF5IC8+YCBvclxuICogYSBgPFdvcmtzcGFjZVdpbmRvdyAvPmAgY29tcG9uZW50IHJlbmRlcmVkLlxuICpcbiAqIFRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogLSBJZiBubyB3b3Jrc3BhY2VzIGFyZSBvcGVuLCBvciBpZiBubyBvdGhlciB3b3Jrc3BhY2VzIHdpdGggdGhlIHNhbWUgdHlwZSBhcmUgb3BlbixcbiAqICAgaXQgd2lsbCBiZSBvcGVuZWQgYW5kIGZvY3VzZWQuXG4gKiAtIElmIGEgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9wZW4sIGl0IHdpbGwgYmUgZGlzcGxheWVkL2ZvY3VzZWQsXG4gKiAgIGlmIGl0IHdhcyBub3QgYWxyZWFkeS5cbiAqIC0gSWYgYSB3b3Jrc3BhY2UgaXMgbGF1bmNoZWQgYW5kIGEgd29ya3NwYWNlIHdoaWNoIGNhbm5vdCBiZSBoaWRkZW4gaXMgYWxyZWFkeSBvcGVuLFxuICogIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbGwgcG9wIHVwIHdhcm5pbmcgYWJvdXQgY2xvc2luZyB0aGUgY3VycmVudGx5IG9wZW4gd29ya3NwYWNlLlxuICogLSBJZiBhbm90aGVyIHdvcmtzcGFjZSB3aXRoIHRoZSBzYW1lIHR5cGUgaXMgb3BlbiwgdGhlIHdvcmtzcGFjZSB3aWxsIGJlIGJyb3VnaHQgdG9cbiAqICAgdGhlIGZyb250IGFuZCB0aGVuIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbGwgcG9wIHVwIHdhcm5pbmcgYWJvdXQgY2xvc2luZyB0aGUgb3BlbmVkXG4gKiAgIHdvcmtzcGFjZVxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGp1c3QgbWFuaXB1bGF0ZXMgdGhlIHdvcmtzcGFjZSBzdG9yZS4gVGhlIFVJIGxvZ2ljIGlzIGhhbmRsZWRcbiAqIGJ5IHRoZSBjb21wb25lbnRzIHRoYXQgZGlzcGxheSB3b3Jrc3BhY2VzLlxuICpcbiAqIEFkZGl0aW9uYWwgcHJvcHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgd29ya3NwYWNlIGNvbXBvbmVudCBiZWluZyBsYXVuY2hlZC4gUGFzc2luZyBhXG4gKiBwcm9wIG5hbWVkIGB3b3Jrc3BhY2VUaXRsZWAgd2lsbCBvdmVycmlkZSB0aGUgdGl0bGUgb2YgdGhlIHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIHRvIGxhdW5jaFxuICogQHBhcmFtIGFkZGl0aW9uYWxQcm9wcyBQcm9wcyB0byBwYXNzIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLiBQYXNzaW5nXG4gKiAgICAgICAgICBhIHByb3AgbmFtZWQgYHdvcmtzcGFjZVRpdGxlYCB3aWxsIG92ZXJyaWRlIHRoZSB0aXRsZSBvZiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyIGFuZCB1c2UgbGF1bmNoV29ya3NwYWNlMiBpbnN0ZWFkLiBTZWU6XG4gKiBodHRwczovL29wZW5tcnMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9kb2NzL3BhZ2VzLzYxNTY3Nzk4MS9Xb3Jrc3BhY2UrdjIrTWlncmF0aW9uK0d1aWRlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGxhdW5jaFdvcmtzcGFjZShuYW1lLCBhZGRpdGlvbmFsUHJvcHMpIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3Qgd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uKG5hbWUpO1xuICAgIGNvbnN0IGN1cnJlbnRXb3Jrc3BhY2VHcm91cCA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA7XG4gICAgaWYgKGN1cnJlbnRXb3Jrc3BhY2VHcm91cCAmJiAhY3VycmVudFdvcmtzcGFjZUdyb3VwLm1lbWJlcnM/LmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgIGNsb3NlV29ya3NwYWNlR3JvdXAoY3VycmVudFdvcmtzcGFjZUdyb3VwLm5hbWUsICgpPT57XG4gICAgICAgICAgICBsYXVuY2hXb3Jrc3BhY2UobmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA/Lm5hbWU7XG4gICAgY29uc3QgbmV3V29ya3NwYWNlID0ge1xuICAgICAgICAuLi53b3Jrc3BhY2UsXG4gICAgICAgIHRpdGxlOiBnZXRXb3Jrc3BhY2VUaXRsZSh3b3Jrc3BhY2UsIGFkZGl0aW9uYWxQcm9wcyksXG4gICAgICAgIGNsb3NlV29ya3NwYWNlOiAob3B0aW9ucyA9IHt9KT0+Y2xvc2VXb3Jrc3BhY2UobmFtZSwgb3B0aW9ucyksXG4gICAgICAgIGNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlczogKG9wdGlvbnMpPT5jbG9zZVdvcmtzcGFjZShuYW1lLCB7XG4gICAgICAgICAgICAgICAgaWdub3JlQ2hhbmdlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgcHJvbXB0QmVmb3JlQ2xvc2luZzogKHRlc3RGY24pPT5wcm9tcHRCZWZvcmVDbG9zaW5nKG5hbWUsIHRlc3RGY24pLFxuICAgICAgICBzZXRUaXRsZTogKHRpdGxlLCB0aXRsZU5vZGUpPT57XG4gICAgICAgICAgICBuZXdXb3Jrc3BhY2UudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIG5ld1dvcmtzcGFjZS50aXRsZU5vZGUgPSB0aXRsZU5vZGU7XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlbldvcmtzcGFjZXMgPSBzdGF0ZS5vcGVuV29ya3NwYWNlcy5tYXAoKHcpPT53Lm5hbWUgPT09IG5hbWUgPyBuZXdXb3Jrc3BhY2UgOiB3KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbldvcmtzcGFjZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbnRXb3Jrc3BhY2VHcm91cDogY3VycmVudEdyb3VwTmFtZSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BzOiBhZGRpdGlvbmFsUHJvcHMgPz8ge31cbiAgICB9O1xuICAgIGlmIChjdXJyZW50R3JvdXBOYW1lKSB7XG4gICAgICAgIGdldFdvcmtzcGFjZUdyb3VwU3RvcmUoY3VycmVudEdyb3VwTmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKHdvcmtzcGFjZVRvQmVBZGRlZCwgcmVzdE9mVGhlV29ya3NwYWNlcykge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT57XG4gICAgICAgICAgICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IFtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VUb0JlQWRkZWQsXG4gICAgICAgICAgICAgICAgLi4ucmVzdE9mVGhlV29ya3NwYWNlcyA/PyBzdGF0ZS5vcGVuV29ya3NwYWNlc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxldCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSA9IGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh3b3Jrc3BhY2VUb0JlQWRkZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBvcGVuV29ya3NwYWNlcyxcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcztcbiAgICBjb25zdCB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgPSBvcGVuV29ya3NwYWNlcy5maW5kSW5kZXgoKHcpPT53Lm5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IGlzV29ya3NwYWNlQWxyZWFkeU9wZW4gPSB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgPj0gMDtcbiAgICBjb25zdCBvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUgPSBvcGVuV29ya3NwYWNlcy5maW5kKCh3KT0+dy50eXBlID09IG5ld1dvcmtzcGFjZS50eXBlKTtcbiAgICBpZiAob3BlbldvcmtzcGFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShuZXdXb3Jrc3BhY2UpO1xuICAgIH0gZWxzZSBpZiAoIW9wZW5Xb3Jrc3BhY2VzWzBdLmNhbkhpZGUgJiYgd29ya3NwYWNlSW5kZXhJbk9wZW5Xb3Jrc3BhY2VzICE9PSAwKSB7XG4gICAgICAgIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZShvcGVuV29ya3NwYWNlc1swXSwge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wc1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzV29ya3NwYWNlQWxyZWFkeU9wZW4pIHtcbiAgICAgICAgY29uc3Qgb3BlbldvcmtzcGFjZSA9IG9wZW5Xb3Jrc3BhY2VzW3dvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlc107XG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSB0aXRsZSBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgYnkgYHNldFRpdGxlYFxuICAgICAgICBpZiAob3BlbldvcmtzcGFjZS50aXRsZSA9PT0gZ2V0V29ya3NwYWNlVGl0bGUob3BlbldvcmtzcGFjZSwgb3BlbldvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHMpKSB7XG4gICAgICAgICAgICBvcGVuV29ya3NwYWNlLnRpdGxlID0gZ2V0V29ya3NwYWNlVGl0bGUobmV3V29ya3NwYWNlLCBuZXdXb3Jrc3BhY2UuYWRkaXRpb25hbFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuV29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcyA9IG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHM7XG4gICAgICAgIGNvbnN0IHJlc3RPZlRoZVdvcmtzcGFjZXMgPSBvcGVuV29ya3NwYWNlcy5maWx0ZXIoKHcpPT53Lm5hbWUgIT0gbmFtZSk7XG4gICAgICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShvcGVuV29ya3NwYWNlc1t3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXNdLCByZXN0T2ZUaGVXb3Jrc3BhY2VzKTtcbiAgICB9IGVsc2UgaWYgKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSkge1xuICAgICAgICBjb25zdCByZXN0T2ZUaGVXb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcy5maWx0ZXIoKHcpPT53LnR5cGUgIT0gbmV3V29ya3NwYWNlLnR5cGUpO1xuICAgICAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2Uob3BlbmVkV29ya3NwYWNlV2l0aFNhbWVUeXBlLCByZXN0T2ZUaGVXb3Jrc3BhY2VzKTtcbiAgICAgICAgcHJvbXB0QmVmb3JlTGF1bmNoaW5nV29ya3NwYWNlKG9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSwge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wc1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UobmV3V29ya3NwYWNlKTtcbiAgICB9XG59XG4vKipcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIGEgbmV3IHBhZ2UgYW5kIGxhdW5jaCBhIHdvcmtzcGFjZSBvbiB0aGF0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpbmcgYW5kIGxhdW5jaGluZyB0aGUgd29ya3NwYWNlLlxuICogQHBhcmFtIG9wdGlvbnMudGFyZ2V0VXJsIFRoZSBVUkwgdG8gbmF2aWdhdGUgdG8uIFdpbGwgYmUgcGFzc2VkIHRvIFtbbmF2aWdhdGVdXS5cbiAqIEBwYXJhbSBvcHRpb25zLmNvbnRleHRLZXkgVGhlIGNvbnRleHQga2V5IHVzZWQgYnkgdGhlIHRhcmdldCBwYWdlLlxuICogQHBhcmFtIG9wdGlvbnMud29ya3NwYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIHRvIGxhdW5jaC5cbiAqIEBwYXJhbSBvcHRpb25zLmFkZGl0aW9uYWxQcm9wcyBBZGRpdGlvbmFsIHByb3BzIHRvIHBhc3MgdG8gdGhlIHdvcmtzcGFjZSBjb21wb25lbnQgYmVpbmcgbGF1bmNoZWQuXG4gKlxuICogQGRlcHJlY2F0ZWQgbWlncmF0ZSB0byB3b3Jrc3BhY2UgdjIgYW5kIGNhbGwgbGF1bmNoV29ya3NwYWNlMiBpbnN0ZWFkLiBTZWU6XG4gKiBodHRwczovL29wZW5tcnMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9kb2NzL3BhZ2VzLzYxNTY3Nzk4MS9Xb3Jrc3BhY2UrdjIrTWlncmF0aW9uK0d1aWRlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRlQW5kTGF1bmNoV29ya3NwYWNlKHsgdGFyZ2V0VXJsLCBjb250ZXh0S2V5LCB3b3Jrc3BhY2VOYW1lLCBhZGRpdGlvbmFsUHJvcHMgfSkge1xuICAgIGNoYW5nZVdvcmtzcGFjZUNvbnRleHQoY29udGV4dEtleSk7XG4gICAgbGF1bmNoV29ya3NwYWNlKHdvcmtzcGFjZU5hbWUsIGFkZGl0aW9uYWxQcm9wcyk7XG4gICAgbmF2aWdhdGUoe1xuICAgICAgICB0bzogdGFyZ2V0VXJsXG4gICAgfSk7XG59XG5jb25zdCBwcm9tcHRCZWZvcmVDbG9zaW5nRmNucyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIHByb21wdEJlZm9yZUNsb3Npbmcod29ya3NwYWNlTmFtZSwgdGVzdEZjbikge1xuICAgIHByb21wdEJlZm9yZUNsb3NpbmdGY25zW3dvcmtzcGFjZU5hbWVdID0gdGVzdEZjbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9tcHRCZWZvcmVDbG9zaW5nRmNuKHdvcmtzcGFjZU5hbWUpIHtcbiAgICByZXR1cm4gcHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnNbd29ya3NwYWNlTmFtZV07XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUHJvbXB0KCkge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcHJvbXB0OiBudWxsXG4gICAgfSk7XG59XG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBpZ25vcmVDaGFuZ2VzOiBmYWxzZSxcbiAgICBvbldvcmtzcGFjZUNsb3NlOiAoKT0+e30sXG4gICAgY2xvc2VXb3Jrc3BhY2VHcm91cDogdHJ1ZVxufTtcbi8qKlxuICogRnVuY3Rpb24gdG8gY2xvc2UgYW4gb3BlbmVkIHdvcmtzcGFjZVxuICogQHBhcmFtIG5hbWUgV29ya3NwYWNlIHJlZ2lzdHJhdGlvbiBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIGNsb3NlIHdvcmtzcGFjZVxuICpcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyIGFuZCBjYWxsIGNsb3NlV29ya3NwYWNlIGZyb20gV29ya3NwYWNlMkRlZmluaXRpb25Qcm9wcyBpbnN0ZWFkLiBTZWU6XG4gKiBodHRwczovL29wZW5tcnMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9kb2NzL3BhZ2VzLzYxNTY3Nzk4MS9Xb3Jrc3BhY2UrdjIrTWlncmF0aW9uK0d1aWRlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3QgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlID0gKCk9PntcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCB3b3Jrc3BhY2VUb0JlQ2xvc2VkID0gc3RhdGUub3BlbldvcmtzcGFjZXMuZmluZCgodyk9PncubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGNvbnN0IG5ld09wZW5Xb3Jrc3BhY2VzID0gc3RhdGUub3BlbldvcmtzcGFjZXMuZmlsdGVyKCh3KT0+dy5uYW1lICE9IG5hbWUpO1xuICAgICAgICBjb25zdCB3b3Jrc3BhY2VHcm91cE5hbWUgPSBzdG9yZS5nZXRTdGF0ZSgpLndvcmtzcGFjZUdyb3VwPy5uYW1lO1xuICAgICAgICBpZiAod29ya3NwYWNlR3JvdXBOYW1lICYmIG9wdGlvbnMuY2xvc2VXb3Jrc3BhY2VHcm91cCkge1xuICAgICAgICAgICAgY2xvc2VXb3Jrc3BhY2VHcm91cCh3b3Jrc3BhY2VHcm91cE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVuc3VyZSBjbG9zZWQgd29ya3NwYWNlIHdpbGwgbm90IHByb21wdFxuICAgICAgICBwcm9tcHRCZWZvcmVDbG9zaW5nKG5hbWUsICgpPT5mYWxzZSk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHByb21wdDogbnVsbCxcbiAgICAgICAgICAgICAgICBvcGVuV29ya3NwYWNlczogbmV3T3BlbldvcmtzcGFjZXMsXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlV2luZG93U3RhdGU6IGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZShuZXdPcGVuV29ya3NwYWNlcz8uWzBdKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBvcHRpb25zPy5vbldvcmtzcGFjZUNsb3NlPy4oKTtcbiAgICB9O1xuICAgIGlmICghY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKG5hbWUsIG9wdGlvbnM/Lmlnbm9yZUNoYW5nZXMpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROYW1lID0gZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uKG5hbWUpLnRpdGxlID8/IG5hbWU7XG4gICAgICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLXdvcmtzcGFjZScsIHVwZGF0ZVN0b3JlV2l0aENsb3NlZFdvcmtzcGFjZSwgY3VycmVudE5hbWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbi8qKlxuICogVGhlIHNldCBvZiB3b3Jrc3BhY2VzIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBwYWdlLiBUaGlzIGZ1bmN0aW9uXG4gKiBzaG91bGQgYmUgdXNlZCB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgcGFnZS4gSWYgdGhlIGN1cnJlbnRcbiAqIHdvcmtzcGFjZSBkYXRhIGlzIGZvciBhIGRpZmZlcmVudCBwYWdlLCB0aGUgd29ya3NwYWNlIHN0YXRlIGlzIGNsZWFyZWQuXG4gKlxuICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHdvcmtzcGFjZSBjb21wb25lbnRzIHdoZW4gdGhleSBtb3VudC5cbiAqIEBpbnRlcm5hbFxuICpcbiAqIEBwYXJhbSBjb250ZXh0S2V5IEFuIGFyYml0cmFyeSBrZXkgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICovIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VXb3Jrc3BhY2VDb250ZXh0KGNvbnRleHRLZXkpIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGlmIChzdGF0ZS5jb250ZXh0ICE9IGNvbnRleHRLZXkpIHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dEtleSxcbiAgICAgICAgICAgIG9wZW5Xb3Jrc3BhY2VzOiBbXSxcbiAgICAgICAgICAgIHByb21wdDogbnVsbFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgY29udGV4dDogJycsXG4gICAgb3BlbldvcmtzcGFjZXM6IFtdLFxuICAgIHByb21wdDogbnVsbCxcbiAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogJ25vcm1hbCcsXG4gICAgd29ya3NwYWNlR3JvdXA6IHVuZGVmaW5lZFxufTtcbmV4cG9ydCBjb25zdCB3b3Jrc3BhY2VTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCd3b3Jrc3BhY2UnLCBpbml0aWFsU3RhdGUpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVN0b3JlKCkge1xuICAgIHJldHVybiB3b3Jrc3BhY2VTdG9yZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh2YWx1ZSkge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgd29ya3NwYWNlV2luZG93U3RhdGU6IHZhbHVlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRVcGRhdGVkV29ya3NwYWNlV2luZG93U3RhdGUod29ya3NwYWNlQXRUb3ApIHtcbiAgICByZXR1cm4gd29ya3NwYWNlQXRUb3A/LnByZWZlcnJlZFdpbmRvd1NpemUgPz8gJ25vcm1hbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvc2VBbGxXb3Jrc3BhY2VzKG9uQ2xvc2luZ1dvcmtzcGFjZXMgPSAoKT0+e30sIGZpbHRlciA9ICgpPT50cnVlKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICAgIGNvbnN0IGNhbkNsb3NlQWxsV29ya3NwYWNlcyA9IHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMuZmlsdGVyKGZpbHRlcikuZXZlcnkoKHsgbmFtZSB9KT0+e1xuICAgICAgICByZXR1cm4gY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKG5hbWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IHVwZGF0ZVdvcmtzcGFjZVN0b3JlID0gKCk9PntcbiAgICAgICAgcmVzZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICAgICAgICBvbkNsb3NpbmdXb3Jrc3BhY2VzPy4oKTtcbiAgICB9O1xuICAgIGlmICghY2FuQ2xvc2VBbGxXb3Jrc3BhY2VzKSB7XG4gICAgICAgIHNob3dXb3Jrc3BhY2VQcm9tcHRzKCdjbG9zaW5nLWFsbC13b3Jrc3BhY2VzJywgdXBkYXRlV29ya3NwYWNlU3RvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZVdvcmtzcGFjZVN0b3JlKCk7XG4gICAgfVxufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBtaWdyYXRlIHRvIHdvcmtzcGFjZSB2Mi4gU2VlOlxuICogaHR0cHM6Ly9vcGVubXJzLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvZG9jcy9wYWdlcy82MTU2Nzc5ODEvV29ya3NwYWNlK3YyK01pZ3JhdGlvbitHdWlkZVxuICovIGV4cG9ydCBmdW5jdGlvbiB1c2VXb3Jrc3BhY2VzKCkge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlV2luZG93U3RhdGUsIG9wZW5Xb3Jrc3BhY2VzLCBwcm9tcHQsIHdvcmtzcGFjZUdyb3VwIH0gPSB1c2VTdG9yZSh3b3Jrc3BhY2VTdG9yZSk7XG4gICAgY29uc3QgbWVtb2lzZWRSZXN1bHRzID0gdXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aXZlOiBvcGVuV29ya3NwYWNlcy5sZW5ndGggPiAwLFxuICAgICAgICAgICAgcHJvbXB0LFxuICAgICAgICAgICAgd29ya3NwYWNlV2luZG93U3RhdGUsXG4gICAgICAgICAgICB3b3Jrc3BhY2VzOiBvcGVuV29ya3NwYWNlcyxcbiAgICAgICAgICAgIHdvcmtzcGFjZUdyb3VwXG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBvcGVuV29ya3NwYWNlcyxcbiAgICAgICAgd29ya3NwYWNlV2luZG93U3RhdGUsXG4gICAgICAgIHByb21wdCxcbiAgICAgICAgd29ya3NwYWNlR3JvdXBcbiAgICBdKTtcbiAgICByZXR1cm4gbWVtb2lzZWRSZXN1bHRzO1xufVxuLyoqXG4gKiBTZXRzIHRoZSBjdXJyZW50IHByb21wdCBhY2NvcmRpbmcgdG8gdGhlIHByb21wdCB0eXBlLlxuICogQHBhcmFtIHByb21wdFR5cGUgRGV0ZXJtaW5lcyB0aGUgdGV4dCBhbmQgYmVoYXZpb3Igb2YgdGhlIHByb21wdFxuICogQHBhcmFtIG9uQ29uZmlybWF0aW9uIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgdXNlciBjb25maXJtcyB0byBjbG9zZSB0aGUgd29ya3NwYWNlXG4gKiBAcGFyYW0gd29ya3NwYWNlVGl0bGUgV29ya3NwYWNlIHRpdGxlIHRvIGJlIHNob3duIGluIHRoZSBwcm9tcHRcbiAqIEByZXR1cm5zXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHNob3dXb3Jrc3BhY2VQcm9tcHRzKHByb21wdFR5cGUsIG9uQ29uZmlybWF0aW9uID0gKCk9Pnt9LCB3b3Jrc3BhY2VUaXRsZSA9ICcnKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICAgIGxldCBwcm9tcHQ7XG4gICAgc3dpdGNoKHByb21wdFR5cGUpe1xuICAgICAgICBjYXNlICdjbG9zaW5nLXdvcmtzcGFjZSc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvbXB0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc1RpdGxlVGV4dCcsICdVbnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKCd1bnNhdmVkQ2hhbmdlc0luT3BlbmVkV29ya3NwYWNlJywgYFlvdSBtYXkgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIG9wZW5lZCB3b3Jrc3BhY2UuIERvIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlc2UgY2hhbmdlcz9gKSxcbiAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb24/LigpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogZ2V0Q29yZVRyYW5zbGF0aW9uKCdkaXNjYXJkJywgJ0Rpc2NhcmQnKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Nsb3NpbmctYWxsLXdvcmtzcGFjZXMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtzcGFjZXNOb3RDbG9zZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLm9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigoeyBuYW1lIH0pPT4hY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKG5hbWUpKS5tYXAoKHsgdGl0bGUgfSwgaW5keCk9PmAke2luZHggKyAxfS4gJHt0aXRsZX1gKTtcbiAgICAgICAgICAgICAgICBwcm9tcHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRDb3JlVHJhbnNsYXRpb24oJ2Nsb3NpbmdBbGxXb3Jrc3BhY2VzUHJvbXB0VGl0bGUnLCAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzJyksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGdldENvcmVUcmFuc2xhdGlvbignY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRCb2R5JywgJ1RoZXJlIG1heSBiZSB1bnNhdmVkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyB3b3Jrc3BhY2VzLiBEbyB5b3Ugd2FudCB0byBkaXNjYXJkIGNoYW5nZXMgaW4gdGhlIGZvbGxvd2luZyB3b3Jrc3BhY2VzPyB7e3dvcmtzcGFjZU5hbWVzfX0nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VOYW1lczogd29ya3NwYWNlc05vdENsb3NlZC5qb2luKCcsJylcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IGdldENvcmVUcmFuc2xhdGlvbignY2xvc2VBbGxPcGVuZWRXb3Jrc3BhY2VzJywgJ0Rpc2NhcmQgY2hhbmdlcyBpbiB7e2NvdW50fX0gd29ya3NwYWNlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiB3b3Jrc3BhY2VzTm90Q2xvc2VkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlLWxhdW5jaGluZy1uZXctd29ya3NwYWNlJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm9tcHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRDb3JlVHJhbnNsYXRpb24oJ3Vuc2F2ZWRDaGFuZ2VzVGl0bGVUZXh0JywgJ1Vuc2F2ZWQgY2hhbmdlcycpLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBnZXRDb3JlVHJhbnNsYXRpb24oJ3Vuc2F2ZWRDaGFuZ2VzSW5Xb3Jrc3BhY2UnLCAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiBcInt7d29ya3NwYWNlTmFtZX19XCIuIFBsZWFzZSBzYXZlIHRoZW0gYmVmb3JlIG9wZW5pbmcgYW5vdGhlciB3b3Jrc3BhY2UuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlTmFtZTogd29ya3NwYWNlVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm1hdGlvbj8uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBnZXRDb3JlVHJhbnNsYXRpb24oJ29wZW5Bbnl3YXknLCAnT3BlbiBhbnl3YXknKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgV29ya3NwYWNlIHN5c3RlbSB0cnlpbmcgdG8gb3BlbiB1bmtub3duIHByb21wdCB0eXBlIFwiJHtwcm9tcHRUeXBlfVwiIGluIGZ1bmN0aW9uIFwic2hvd1dvcmtzcGFjZVByb21wdHNcImApO1xuICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHByb21wdFxuICAgICAgICB9KSk7XG59XG5mdW5jdGlvbiBnZXRXb3Jrc3BhY2VUaXRsZSh3b3Jrc3BhY2UsIGFkZGl0aW9uYWxQcm9wcykge1xuICAgIHJldHVybiBhZGRpdGlvbmFsUHJvcHM/Llsnd29ya3NwYWNlVGl0bGUnXSA/PyB3b3Jrc3BhY2UudGl0bGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzZXRXb3Jrc3BhY2VTdG9yZSgpIHtcbiAgICBnZXRXb3Jrc3BhY2VTdG9yZSgpLnNldFN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG4vKipcbiAqIFRoZSB3b3Jrc3BhY2UgZ3JvdXAgc3RvcmUgaXMgYSBzdG9yZSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3b3Jrc3BhY2UgZ3JvdXAuXG4gKiBJZiB0aGUgd29ya3NwYWNlIGhhcyBpdHMgb3duIHNpZGViYXIsIHRoZSBzdG9yZSB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBUaGlzIHN0b3JlIGNhbiBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgd29ya3NwYWNlIGdyb3VwLlxuICogVGhlIHN0b3JlIHdpbGwgYmUgc2FtZSBmb3IgYWxsIHRoZSB3b3Jrc3BhY2VzIHdpdGggc2FtZSBncm91cCBuYW1lLlxuICpcbiAqIEZvciB3b3Jrc3BhY2VzIGxhdW5jaGVkIHdpdGhvdXQgYSBncm91cCwgdGhlIHN0b3JlIHdpbGwgYmUgdW5kZWZpbmVkLlxuICpcbiAqIFRoZSBzdG9yZSB3aWxsIGJlIGNsZWFyZWQgd2hlbiBhbGwgdGhlIHdvcmtzcGFjZXMgd2l0aCB0aGUgc3RvcmUncyBncm91cCBuYW1lIGFyZSBjbG9zZWQuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUdyb3VwU3RvcmUod29ya3NwYWNlR3JvdXBOYW1lLCBhZGRpdGlvbmFsUHJvcHMgPSB7fSkge1xuICAgIGlmICghd29ya3NwYWNlR3JvdXBOYW1lIHx8IHdvcmtzcGFjZUdyb3VwTmFtZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gZ2V0R2xvYmFsU3RvcmUod29ya3NwYWNlR3JvdXBOYW1lLCB7fSk7XG4gICAgaWYgKGFkZGl0aW9uYWxQcm9wcykge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSgocHJldik9Pih7XG4gICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAuLi5hZGRpdGlvbmFsUHJvcHNcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0b3JlO1xufVxuIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJnZXRXb3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbiIsImdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbiIsIm5hdmlnYXRlIiwiZ2V0R2xvYmFsU3RvcmUiLCJjcmVhdGVHbG9iYWxTdG9yZSIsImdldENvcmVUcmFuc2xhdGlvbiIsInVzZVN0b3JlIiwiY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nIiwibmFtZSIsImlnbm9yZUNoYW5nZXMiLCJwcm9tcHRCZWZvcmVGbiIsImdldFByb21wdEJlZm9yZUNsb3NpbmdGY24iLCJjbG9zZVdvcmtzcGFjZUdyb3VwIiwiZ3JvdXBOYW1lIiwib25Xb3Jrc3BhY2VDbG9zZXVwIiwiX3N0b3JlX2dldFN0YXRlIiwic3RvcmUiLCJnZXRXb3Jrc3BhY2VTdG9yZSIsImN1cnJlbnRXb3Jrc3BhY2VHcm91cCIsImN1cnJlbnRHcm91cE5hbWUiLCJmaWx0ZXIiLCJ3b3Jrc3BhY2UiLCJjbG9zZUFsbFdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VHcm91cFN0b3JlIiwiZ2V0V29ya3NwYWNlR3JvdXBTdG9yZSIsInVuc3Vic2NyaWJlIiwicHJldiIsInVuZGVmaW5lZCIsImxhdW5jaFdvcmtzcGFjZUdyb3VwIiwiYXJncyIsIndvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwic3RhdGUiLCJvbldvcmtzcGFjZUdyb3VwTGF1bmNoIiwid29ya3NwYWNlR3JvdXBDbGVhbnVwIiwid29ya3NwYWNlVG9MYXVuY2giLCJ3b3Jrc3BhY2VHcm91cCIsIl93b3Jrc3BhY2VUb0xhdW5jaF9hZGRpdGlvbmFsUHJvcHMiLCJsYXVuY2hXb3Jrc3BhY2UiLCJwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2UiLCJuZXdXb3Jrc3BhY2VEZXRhaWxzIiwiYWRkaXRpb25hbFByb3BzIiwibmV3V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwicHJvY2VlZCIsImNsb3NlV29ya3NwYWNlIiwib25Xb3Jrc3BhY2VDbG9zZSIsIl93b3Jrc3BhY2VfdGl0bGUiLCJzaG93V29ya3NwYWNlUHJvbXB0cyIsIl9jdXJyZW50V29ya3NwYWNlR3JvdXBfbWVtYmVycyIsIl9zdG9yZV9nZXRTdGF0ZV93b3Jrc3BhY2VHcm91cCIsIm5ld1dvcmtzcGFjZSIsImdldFdvcmtzcGFjZVRpdGxlIiwiY2xvc2VXb3Jrc3BhY2UxIiwib3B0aW9ucyIsImNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlcyIsInByb21wdEJlZm9yZUNsb3NpbmcxIiwidGVzdEZjbiIsInByb21wdEJlZm9yZUNsb3NpbmciLCJzZXRUaXRsZSIsInRpdGxlIiwidGl0bGVOb2RlIiwib3BlbldvcmtzcGFjZXMiLCJ3IiwidXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlIiwid29ya3NwYWNlVG9CZUFkZGVkIiwicmVzdE9mVGhlV29ya3NwYWNlcyIsIndvcmtzcGFjZVdpbmRvd1N0YXRlIiwiZ2V0VXBkYXRlZFdvcmtzcGFjZVdpbmRvd1N0YXRlIiwid29ya3NwYWNlSW5kZXhJbk9wZW5Xb3Jrc3BhY2VzIiwiaXNXb3Jrc3BhY2VBbHJlYWR5T3BlbiIsIm9wZW5lZFdvcmtzcGFjZVdpdGhTYW1lVHlwZSIsIm9wZW5Xb3Jrc3BhY2UiLCJyZXN0T2ZUaGVXb3Jrc3BhY2VzMSIsIm5hdmlnYXRlQW5kTGF1bmNoV29ya3NwYWNlIiwicGFyYW0iLCJ0YXJnZXRVcmwiLCJjb250ZXh0S2V5Iiwid29ya3NwYWNlTmFtZSIsImNoYW5nZVdvcmtzcGFjZUNvbnRleHQiLCJwcm9tcHRCZWZvcmVDbG9zaW5nRmNucyIsImNhbmNlbFByb21wdCIsImRlZmF1bHRPcHRpb25zIiwidXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlIiwid29ya3NwYWNlVG9CZUNsb3NlZCIsIm5ld09wZW5Xb3Jrc3BhY2VzIiwid29ya3NwYWNlR3JvdXBOYW1lIiwiX2dldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbl90aXRsZSIsImN1cnJlbnROYW1lIiwiaW5pdGlhbFN0YXRlIiwid29ya3NwYWNlU3RvcmUiLCJ1cGRhdGVXb3Jrc3BhY2VXaW5kb3dTdGF0ZSIsInZhbHVlIiwid29ya3NwYWNlQXRUb3AiLCJvbkNsb3NpbmdXb3Jrc3BhY2VzIiwiY2FuQ2xvc2VBbGxXb3Jrc3BhY2VzIiwidXBkYXRlV29ya3NwYWNlU3RvcmUiLCJyZXNldFdvcmtzcGFjZVN0b3JlIiwidXNlV29ya3NwYWNlcyIsIl91c2VTdG9yZSIsInByb21wdCIsIm1lbW9pc2VkUmVzdWx0cyIsInByb21wdFR5cGUiLCJvbkNvbmZpcm1hdGlvbiIsIndvcmtzcGFjZVRpdGxlIiwib25Db25maXJtIiwid29ya3NwYWNlc05vdENsb3NlZCIsImluZHgiLCJjb25zb2xlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdDQUFnQyxHQUFtQztBQUMrQjtBQUMvQztBQUNvQjtBQUNSO0FBQ1g7QUFDcEQ7Ozs7O0NBS0MsR0FBVSxTQUFTUSxrQ0FBa0NDLElBQUk7UUFBRUMsZ0JBQUFBLGlFQUFnQjtJQUN4RSxJQUFJQSxlQUFlO1FBQ2YsT0FBTztJQUNYO0lBQ0EsSUFBTUMsaUJBQWlCQywwQkFBMEJIO0lBQ2pELE9BQU8sQ0FBQ0Usa0JBQWtCLENBQUNBO0FBQy9CO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtCQyxHQUFHLFNBQVNFLG9CQUFvQkMsU0FBUyxFQUFFQyxrQkFBa0I7UUFFNUJDO0lBRDlCLElBQU1DLFFBQVFDO0lBQ2QsSUFBTUMseUJBQXdCSCxr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\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/dist/workspaces/workspaces.js\n\n}");
|
|
1958
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n canCloseWorkspaceWithoutPrompting: () => (canCloseWorkspaceWithoutPrompting),\n cancelPrompt: () => (cancelPrompt),\n changeWorkspaceContext: () => (changeWorkspaceContext),\n closeAllWorkspaces: () => (closeAllWorkspaces),\n closeWorkspace: () => (closeWorkspace),\n getPromptBeforeClosingFcn: () => (getPromptBeforeClosingFcn),\n getWorkspaceGroupStore: () => (getWorkspaceGroupStore),\n getWorkspaceStore: () => (getWorkspaceStore),\n launchWorkspace: () => (launchWorkspace),\n launchWorkspaceGroup: () => (launchWorkspaceGroup),\n navigateAndLaunchWorkspace: () => (navigateAndLaunchWorkspace),\n promptBeforeClosing: () => (promptBeforeClosing),\n resetWorkspaceStore: () => (resetWorkspaceStore),\n showWorkspacePrompts: () => (showWorkspacePrompts),\n updateWorkspaceWindowState: () => (updateWorkspaceWindowState),\n useWorkspaces: () => (useWorkspaces),\n workspaceStore: () => (workspaceStore)\n});\n/* import */ var react__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_0);\n/* import */ var _openmrs_esm_extensions__rspack_import_1 = __webpack_require__(\"../../framework/esm-extensions/dist/index.js\");\n/* import */ var _openmrs_esm_navigation__rspack_import_2 = __webpack_require__(\"../../framework/esm-navigation/dist/index.js\");\n/* import */ var _openmrs_esm_state__rspack_import_3 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var _openmrs_esm_translations__rspack_import_4 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _openmrs_esm_react_utils__rspack_import_5 = __webpack_require__(\"../../framework/esm-react-utils/dist/index.js\");\nfunction _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_without_holes(arr) {\n if (Array.isArray(arr)) return _array_like_to_array(arr);\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _non_iterable_spread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_spread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n if (typeof Object.getOwnPropertySymbols === \"function\") {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n ownKeys.forEach(function(key) {\n _define_property(target, key, source[key]);\n });\n }\n return target;\n}\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _object_spread_props(target, source) {\n source = source != null ? source : {};\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _to_consumable_array(arr) {\n return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n/** @module @category Workspace */ \n\n\n\n\n\n/**\n *\n * @param name Name of the workspace\n * @param ignoreChanges If set to true, the \"unsaved changes\" modal will never be shown, even if the `promptBeforeClosing` function returns true. The user will not be prompted before closing.\n * @returns true if the workspace can be closed.\n */ function canCloseWorkspaceWithoutPrompting(name) {\n var ignoreChanges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;\n if (ignoreChanges) {\n return true;\n }\n var promptBeforeFn = getPromptBeforeClosingFcn(name);\n return !promptBeforeFn || !promptBeforeFn();\n}\n/**\n * Closes a workspace group and performs cleanup operations.\n *\n * @param groupName - The name of the workspace group to close\n * @param onWorkspaceCloseup - Optional callback function to execute after closing the workspace group\n * @returns void, or exits early if the current workspace group name doesn't match the provided group name\n *\n * @remarks\n * This function performs the following operations:\n * - Validates if the provided group name matches the current workspace group\n * - Closes all workspaces associated with the group\n * - Clears the workspace group store state\n * - Executes cleanup function if defined in the workspace group\n * - Updates the main workspace store to remove the workspace group\n * - Calls the optional closeup callback if provided\n *\n * @deprecated migrate to workspace v2 and use closeWorkspaceGroup2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function closeWorkspaceGroup(groupName, onWorkspaceCloseup) {\n var _store_getState;\n var store = getWorkspaceStore();\n var currentWorkspaceGroup = (_store_getState = store.getState()) === null || _store_getState === void 0 ? void 0 : _store_getState.workspaceGroup;\n var currentGroupName = currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.name;\n if (!currentGroupName || groupName !== currentGroupName) {\n return;\n }\n var filter = currentGroupName ? function(workspace) {\n return workspace.currentWorkspaceGroup === currentGroupName;\n } : function() {\n return true;\n };\n closeAllWorkspaces(function() {\n // Clearing the workspace group and respective store if the new workspace is not part of the current group, which is handled in the `launchWorkspace` function.\n var workspaceGroupStore = getWorkspaceGroupStore(groupName);\n if (workspaceGroupStore) {\n workspaceGroupStore.setState({}, true);\n var unsubscribe = workspaceGroupStore.subscribe(function() {});\n unsubscribe();\n }\n if (typeof (currentWorkspaceGroup === null || currentWorkspaceGroup === void 0 ? void 0 : currentWorkspaceGroup.cleanup) === 'function') {\n currentWorkspaceGroup.cleanup();\n }\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: undefined\n });\n });\n if (typeof onWorkspaceCloseup === 'function') {\n onWorkspaceCloseup();\n }\n }, filter);\n}\n/**\n * Launches a workspace group with the specified name and configuration.\n * If there are any open workspaces, it will first close them before launching the new workspace group.\n *\n * @param groupName - The name of the workspace group to launch\n * @param args - Configuration object for launching the workspace group\n * @param args.state - The initial state for the workspace group\n * @param args.onWorkspaceGroupLaunch - Optional callback function to be executed after the workspace group is launched\n * @param args.workspaceGroupCleanup - Optional cleanup function to be executed when the workspace group is closed\n *\n * @example\n * launchWorkspaceGroup(\"myGroup\", {\n * state: initialState,\n * onWorkspaceGroupLaunch: () => console.log(\"Workspace group launched\"),\n * workspaceGroupCleanup: () => console.log(\"Cleaning up workspace group\")\n * });\n *\n * @deprecated migrate to workspace v2 and use launchWorkspaceGroup2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function launchWorkspaceGroup(groupName, args) {\n var workspaceGroupRegistration = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceGroupRegistration)(groupName);\n var state = args.state, onWorkspaceGroupLaunch = args.onWorkspaceGroupLaunch, workspaceGroupCleanup = args.workspaceGroupCleanup, workspaceToLaunch = args.workspaceToLaunch;\n var store = getWorkspaceStore();\n if (store.getState().openWorkspaces.length) {\n var workspaceGroup = store.getState().workspaceGroup;\n if (workspaceGroup) {\n closeWorkspaceGroup(workspaceGroup === null || workspaceGroup === void 0 ? void 0 : workspaceGroup.name, function() {\n launchWorkspaceGroup(groupName, args);\n });\n } else {\n closeAllWorkspaces(function() {\n launchWorkspaceGroup(groupName, args);\n });\n }\n } else {\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n workspaceGroup: {\n name: groupName,\n members: workspaceGroupRegistration.members,\n cleanup: workspaceGroupCleanup\n }\n });\n });\n getWorkspaceGroupStore(groupName, state);\n onWorkspaceGroupLaunch === null || onWorkspaceGroupLaunch === void 0 ? void 0 : onWorkspaceGroupLaunch();\n if (workspaceToLaunch) {\n var _workspaceToLaunch_additionalProps;\n launchWorkspace(workspaceToLaunch.name, (_workspaceToLaunch_additionalProps = workspaceToLaunch.additionalProps) !== null && _workspaceToLaunch_additionalProps !== void 0 ? _workspaceToLaunch_additionalProps : {});\n }\n }\n}\nfunction promptBeforeLaunchingWorkspace(workspace, newWorkspaceDetails) {\n var name = newWorkspaceDetails.name, additionalProps = newWorkspaceDetails.additionalProps;\n var newWorkspaceRegistration = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name);\n var proceed = function proceed() {\n closeWorkspace(workspace.name, {\n ignoreChanges: true,\n // Calling the launchWorkspace again, since one of the `if` case\n // might resolve, but we need to check all the cases before launching the form.\n onWorkspaceClose: function onWorkspaceClose() {\n return launchWorkspace(name, additionalProps);\n },\n // If the new workspace is of the same sidebar group, then we don't need to clear the workspace group store.\n closeWorkspaceGroup: false\n });\n };\n if (!canCloseWorkspaceWithoutPrompting(workspace.name)) {\n var _workspace_title;\n showWorkspacePrompts('closing-workspace-launching-new-workspace', proceed, (_workspace_title = workspace.title) !== null && _workspace_title !== void 0 ? _workspace_title : workspace.name);\n } else {\n proceed();\n }\n}\n/**\n * This launches a workspace by its name. The workspace must have been registered.\n * Workspaces should be registered in the `routes.json` file.\n *\n * For the workspace to appear, there must be either a `<WorkspaceOverlay />` or\n * a `<WorkspaceWindow />` component rendered.\n *\n * The behavior of this function is as follows:\n *\n * - If no workspaces are open, or if no other workspaces with the same type are open,\n * it will be opened and focused.\n * - If a workspace with the same name is already open, it will be displayed/focused,\n * if it was not already.\n * - If a workspace is launched and a workspace which cannot be hidden is already open,\n * a confirmation modal will pop up warning about closing the currently open workspace.\n * - If another workspace with the same type is open, the workspace will be brought to\n * the front and then a confirmation modal will pop up warning about closing the opened\n * workspace\n *\n * Note that this function just manipulates the workspace store. The UI logic is handled\n * by the components that display workspaces.\n *\n * Additional props can be passed to the workspace component being launched. Passing a\n * prop named `workspaceTitle` will override the title of the workspace.\n *\n * @param name The name of the workspace to launch\n * @param additionalProps Props to pass to the workspace component being launched. Passing\n * a prop named `workspaceTitle` will override the title of the workspace.\n *\n * @deprecated migrate to workspace v2 and use launchWorkspace2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function launchWorkspace(name, additionalProps) {\n var _currentWorkspaceGroup_members, _store_getState_workspaceGroup;\n var store = getWorkspaceStore();\n var workspace = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name);\n var currentWorkspaceGroup = store.getState().workspaceGroup;\n if (currentWorkspaceGroup && !((_currentWorkspaceGroup_members = currentWorkspaceGroup.members) === null || _currentWorkspaceGroup_members === void 0 ? void 0 : _currentWorkspaceGroup_members.includes(name))) {\n closeWorkspaceGroup(currentWorkspaceGroup.name, function() {\n launchWorkspace(name, additionalProps);\n });\n return;\n }\n var currentGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n var newWorkspace = _object_spread_props(_object_spread({}, workspace), {\n title: getWorkspaceTitle(workspace, additionalProps),\n closeWorkspace: function closeWorkspace1() {\n var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n return closeWorkspace(name, options);\n },\n closeWorkspaceWithSavedChanges: function closeWorkspaceWithSavedChanges(options) {\n return closeWorkspace(name, _object_spread({\n ignoreChanges: true\n }, options));\n },\n promptBeforeClosing: function promptBeforeClosing1(testFcn) {\n return promptBeforeClosing(name, testFcn);\n },\n setTitle: function setTitle(title, titleNode) {\n newWorkspace.title = title;\n newWorkspace.titleNode = titleNode;\n store.setState(function(state) {\n var openWorkspaces = state.openWorkspaces.map(function(w) {\n return w.name === name ? newWorkspace : w;\n });\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces\n });\n });\n },\n currentWorkspaceGroup: currentGroupName,\n additionalProps: additionalProps !== null && additionalProps !== void 0 ? additionalProps : {}\n });\n if (currentGroupName) {\n getWorkspaceGroupStore(currentGroupName, additionalProps);\n }\n function updateStoreWithNewWorkspace(workspaceToBeAdded, restOfTheWorkspaces) {\n store.setState(function(state) {\n var openWorkspaces = [\n workspaceToBeAdded\n ].concat(_to_consumable_array(restOfTheWorkspaces !== null && restOfTheWorkspaces !== void 0 ? restOfTheWorkspaces : state.openWorkspaces));\n var workspaceWindowState = getUpdatedWorkspaceWindowState(workspaceToBeAdded);\n return _object_spread_props(_object_spread({}, state), {\n openWorkspaces: openWorkspaces,\n workspaceWindowState: workspaceWindowState\n });\n });\n }\n var openWorkspaces = store.getState().openWorkspaces;\n var workspaceIndexInOpenWorkspaces = openWorkspaces.findIndex(function(w) {\n return w.name === name;\n });\n var isWorkspaceAlreadyOpen = workspaceIndexInOpenWorkspaces >= 0;\n var openedWorkspaceWithSameType = openWorkspaces.find(function(w) {\n return w.type == newWorkspace.type;\n });\n if (openWorkspaces.length === 0) {\n updateStoreWithNewWorkspace(newWorkspace);\n } else if (!openWorkspaces[0].canHide && workspaceIndexInOpenWorkspaces !== 0) {\n promptBeforeLaunchingWorkspace(openWorkspaces[0], {\n name: name,\n additionalProps: additionalProps\n });\n } else if (isWorkspaceAlreadyOpen) {\n var openWorkspace = openWorkspaces[workspaceIndexInOpenWorkspaces];\n // Create a new object reference so that WorkspaceRenderer's useMemo\n // detects the change and re-renders with the updated additionalProps.\n var updatedWorkspace = _object_spread(_object_spread_props(_object_spread({}, openWorkspace), {\n additionalProps: newWorkspace.additionalProps\n }), openWorkspace.title === getWorkspaceTitle(openWorkspace, openWorkspace.additionalProps) && {\n title: getWorkspaceTitle(newWorkspace, newWorkspace.additionalProps)\n });\n var restOfTheWorkspaces = openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n updateStoreWithNewWorkspace(updatedWorkspace, restOfTheWorkspaces);\n } else if (openedWorkspaceWithSameType) {\n var restOfTheWorkspaces1 = store.getState().openWorkspaces.filter(function(w) {\n return w.type != newWorkspace.type;\n });\n updateStoreWithNewWorkspace(openedWorkspaceWithSameType, restOfTheWorkspaces1);\n promptBeforeLaunchingWorkspace(openedWorkspaceWithSameType, {\n name: name,\n additionalProps: additionalProps\n });\n } else {\n updateStoreWithNewWorkspace(newWorkspace);\n }\n}\n/**\n * Use this function to navigate to a new page and launch a workspace on that page.\n *\n * @param options The options for navigating and launching the workspace.\n * @param options.targetUrl The URL to navigate to. Will be passed to [[navigate]].\n * @param options.contextKey The context key used by the target page.\n * @param options.workspaceName The name of the workspace to launch.\n * @param options.additionalProps Additional props to pass to the workspace component being launched.\n *\n * @deprecated migrate to workspace v2 and call launchWorkspace2 instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function navigateAndLaunchWorkspace(param) {\n var targetUrl = param.targetUrl, contextKey = param.contextKey, workspaceName = param.workspaceName, additionalProps = param.additionalProps;\n changeWorkspaceContext(contextKey);\n launchWorkspace(workspaceName, additionalProps);\n (0,_openmrs_esm_navigation__rspack_import_2.navigate)({\n to: targetUrl\n });\n}\nvar promptBeforeClosingFcns = {};\nfunction promptBeforeClosing(workspaceName, testFcn) {\n promptBeforeClosingFcns[workspaceName] = testFcn;\n}\nfunction getPromptBeforeClosingFcn(workspaceName) {\n return promptBeforeClosingFcns[workspaceName];\n}\nfunction cancelPrompt() {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n prompt: null\n }));\n}\nvar defaultOptions = {\n ignoreChanges: false,\n onWorkspaceClose: function onWorkspaceClose() {},\n closeWorkspaceGroup: true\n};\n/**\n * Function to close an opened workspace\n * @param name Workspace registration name\n * @param options Options to close workspace\n *\n * @deprecated migrate to workspace v2 and call closeWorkspace from Workspace2DefinitionProps instead. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function closeWorkspace(name) {\n var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n options = _object_spread({}, defaultOptions, options);\n var store = getWorkspaceStore();\n var updateStoreWithClosedWorkspace = function updateStoreWithClosedWorkspace() {\n var _store_getState_workspaceGroup, _options_onWorkspaceClose;\n var state = store.getState();\n var workspaceToBeClosed = state.openWorkspaces.find(function(w) {\n return w.name === name;\n });\n var newOpenWorkspaces = state.openWorkspaces.filter(function(w) {\n return w.name != name;\n });\n var workspaceGroupName = (_store_getState_workspaceGroup = store.getState().workspaceGroup) === null || _store_getState_workspaceGroup === void 0 ? void 0 : _store_getState_workspaceGroup.name;\n if (workspaceGroupName && options.closeWorkspaceGroup) {\n closeWorkspaceGroup(workspaceGroupName);\n }\n // ensure closed workspace will not prompt\n promptBeforeClosing(name, function() {\n return false;\n });\n store.setState(function(prev) {\n return _object_spread_props(_object_spread({}, prev), {\n prompt: null,\n openWorkspaces: newOpenWorkspaces,\n workspaceWindowState: getUpdatedWorkspaceWindowState(newOpenWorkspaces === null || newOpenWorkspaces === void 0 ? void 0 : newOpenWorkspaces[0])\n });\n });\n options === null || options === void 0 ? void 0 : (_options_onWorkspaceClose = options.onWorkspaceClose) === null || _options_onWorkspaceClose === void 0 ? void 0 : _options_onWorkspaceClose.call(options);\n };\n if (!canCloseWorkspaceWithoutPrompting(name, options === null || options === void 0 ? void 0 : options.ignoreChanges)) {\n var _getWorkspaceRegistration_title;\n var currentName = (_getWorkspaceRegistration_title = (0,_openmrs_esm_extensions__rspack_import_1.getWorkspaceRegistration)(name).title) !== null && _getWorkspaceRegistration_title !== void 0 ? _getWorkspaceRegistration_title : name;\n showWorkspacePrompts('closing-workspace', updateStoreWithClosedWorkspace, currentName);\n return false;\n } else {\n updateStoreWithClosedWorkspace();\n return true;\n }\n}\n/**\n * The set of workspaces is specific to a particular page. This function\n * should be used when transitioning to a new page. If the current\n * workspace data is for a different page, the workspace state is cleared.\n *\n * This is called by the workspace components when they mount.\n * @internal\n *\n * @param contextKey An arbitrary key to identify the current page\n */ function changeWorkspaceContext(contextKey) {\n var store = getWorkspaceStore();\n var state = store.getState();\n if (state.context != contextKey) {\n store.setState({\n context: contextKey,\n openWorkspaces: [],\n prompt: null\n });\n }\n}\nvar initialState = {\n context: '',\n openWorkspaces: [],\n prompt: null,\n workspaceWindowState: 'normal',\n workspaceGroup: undefined\n};\nvar workspaceStore = (0,_openmrs_esm_state__rspack_import_3.createGlobalStore)('workspace', initialState);\nfunction getWorkspaceStore() {\n return workspaceStore;\n}\nfunction updateWorkspaceWindowState(value) {\n var store = getWorkspaceStore();\n var state = store.getState();\n store.setState(_object_spread_props(_object_spread({}, state), {\n workspaceWindowState: value\n }));\n}\nfunction getUpdatedWorkspaceWindowState(workspaceAtTop) {\n var _ref;\n return (_ref = workspaceAtTop === null || workspaceAtTop === void 0 ? void 0 : workspaceAtTop.preferredWindowSize) !== null && _ref !== void 0 ? _ref : 'normal';\n}\nfunction closeAllWorkspaces() {\n var onClosingWorkspaces = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}, filter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {\n return true;\n };\n var store = getWorkspaceStore();\n var canCloseAllWorkspaces = store.getState().openWorkspaces.filter(filter).every(function(param) {\n var name = param.name;\n return canCloseWorkspaceWithoutPrompting(name);\n });\n var updateWorkspaceStore = function updateWorkspaceStore() {\n resetWorkspaceStore();\n onClosingWorkspaces === null || onClosingWorkspaces === void 0 ? void 0 : onClosingWorkspaces();\n };\n if (!canCloseAllWorkspaces) {\n showWorkspacePrompts('closing-all-workspaces', updateWorkspaceStore);\n } else {\n updateWorkspaceStore();\n }\n}\n/**\n * @deprecated migrate to workspace v2. See:\n * https://openmrs.atlassian.net/wiki/spaces/docs/pages/615677981/Workspace+v2+Migration+Guide\n */ function useWorkspaces() {\n var _useStore = (0,_openmrs_esm_react_utils__rspack_import_5.useStore)(workspaceStore), workspaceWindowState = _useStore.workspaceWindowState, openWorkspaces = _useStore.openWorkspaces, prompt = _useStore.prompt, workspaceGroup = _useStore.workspaceGroup;\n var memoisedResults = (0,react__rspack_import_0.useMemo)(function() {\n return {\n active: openWorkspaces.length > 0,\n prompt: prompt,\n workspaceWindowState: workspaceWindowState,\n workspaces: openWorkspaces,\n workspaceGroup: workspaceGroup\n };\n }, [\n openWorkspaces,\n workspaceWindowState,\n prompt,\n workspaceGroup\n ]);\n return memoisedResults;\n}\n/**\n * Sets the current prompt according to the prompt type.\n * @param promptType Determines the text and behavior of the prompt\n * @param onConfirmation Function to be called after the user confirms to close the workspace\n * @param workspaceTitle Workspace title to be shown in the prompt\n * @returns\n */ function showWorkspacePrompts(promptType) {\n var onConfirmation = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {}, workspaceTitle = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : '';\n var store = getWorkspaceStore();\n var prompt;\n switch(promptType){\n case 'closing-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesInOpenedWorkspace', \"You may have unsaved changes in the opened workspace. Do you want to discard these changes?\"),\n onConfirm: function onConfirm() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('discard', 'Discard')\n };\n break;\n }\n case 'closing-all-workspaces':\n {\n var workspacesNotClosed = store.getState().openWorkspaces.filter(function(param) {\n var name = param.name;\n return !canCloseWorkspaceWithoutPrompting(name);\n }).map(function(param, indx) {\n var title = param.title;\n return \"\".concat(indx + 1, \". \").concat(title);\n });\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closingAllWorkspacesPromptTitle', 'You have unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closingAllWorkspacesPromptBody', 'There may be unsaved changes in the following workspaces. Do you want to discard changes in the following workspaces? {{workspaceNames}}', {\n workspaceNames: workspacesNotClosed.join(',')\n }),\n onConfirm: function onConfirm() {\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('closeAllOpenedWorkspaces', 'Discard changes in {{count}} workspaces', {\n count: workspacesNotClosed.length\n })\n };\n break;\n }\n case 'closing-workspace-launching-new-workspace':\n {\n prompt = {\n title: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesTitleText', 'Unsaved changes'),\n body: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('unsavedChangesInWorkspace', 'There may be unsaved changes in \"{{workspaceName}}\". Please save them before opening another workspace.', {\n workspaceName: workspaceTitle\n }),\n onConfirm: function onConfirm() {\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: null\n });\n });\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n },\n confirmText: (0,_openmrs_esm_translations__rspack_import_4.getCoreTranslation)('openAnyway', 'Open anyway')\n };\n break;\n }\n default:\n {\n console.error('Workspace system trying to open unknown prompt type \"'.concat(promptType, '\" in function \"showWorkspacePrompts\"'));\n onConfirmation === null || onConfirmation === void 0 ? void 0 : onConfirmation();\n return;\n }\n }\n store.setState(function(state) {\n return _object_spread_props(_object_spread({}, state), {\n prompt: prompt\n });\n });\n}\nfunction getWorkspaceTitle(workspace, additionalProps) {\n var _ref;\n return (_ref = additionalProps === null || additionalProps === void 0 ? void 0 : additionalProps['workspaceTitle']) !== null && _ref !== void 0 ? _ref : workspace.title;\n}\nfunction resetWorkspaceStore() {\n getWorkspaceStore().setState(initialState);\n}\n/**\n * The workspace group store is a store that is specific to the workspace group.\n * If the workspace has its own sidebar, the store will be created.\n * This store can be used to store data that is specific to the workspace group.\n * The store will be same for all the workspaces with same group name.\n *\n * For workspaces launched without a group, the store will be undefined.\n *\n * The store will be cleared when all the workspaces with the store's group name are closed.\n */ function getWorkspaceGroupStore(workspaceGroupName) {\n var additionalProps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n if (!workspaceGroupName || workspaceGroupName === 'default') {\n return undefined;\n }\n var store = (0,_openmrs_esm_state__rspack_import_3.getGlobalStore)(workspaceGroupName, {});\n if (additionalProps) {\n store.setState(function(prev) {\n return _object_spread({}, prev, additionalProps);\n });\n }\n return store;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbHRpbjpzd2MtbG9hZGVyIS9ob21lL3J1bm5lci93b3JrL29wZW5tcnMtZXNtLWNvcmUvb3Blbm1ycy1lc20tY29yZS9wYWNrYWdlcy9mcmFtZXdvcmsvZXNtLXN0eWxlZ3VpZGUvZGlzdC93b3Jrc3BhY2VzL3dvcmtzcGFjZXMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tc3R5bGVndWlkZS9kaXN0L3dvcmtzcGFjZXMvd29ya3NwYWNlcy5qcz83ZTkwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBXb3Jrc3BhY2UgKi8gaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgZ2V0V29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24sIGdldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbiB9IGZyb20gXCJAb3Blbm1ycy9lc20tZXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHsgbmF2aWdhdGUgfSBmcm9tIFwiQG9wZW5tcnMvZXNtLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7IGdldEdsb2JhbFN0b3JlLCBjcmVhdGVHbG9iYWxTdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tc3RhdGVcIjtcbmltcG9ydCB7IGdldENvcmVUcmFuc2xhdGlvbiB9IGZyb20gXCJAb3Blbm1ycy9lc20tdHJhbnNsYXRpb25zXCI7XG5pbXBvcnQgeyB1c2VTdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tcmVhY3QtdXRpbHNcIjtcbi8qKlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHdvcmtzcGFjZVxuICogQHBhcmFtIGlnbm9yZUNoYW5nZXMgSWYgc2V0IHRvIHRydWUsIHRoZSBcInVuc2F2ZWQgY2hhbmdlc1wiIG1vZGFsIHdpbGwgbmV2ZXIgYmUgc2hvd24sIGV2ZW4gaWYgdGhlIGBwcm9tcHRCZWZvcmVDbG9zaW5nYCBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoZSB1c2VyIHdpbGwgbm90IGJlIHByb21wdGVkIGJlZm9yZSBjbG9zaW5nLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgd29ya3NwYWNlIGNhbiBiZSBjbG9zZWQuXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGNhbkNsb3NlV29ya3NwYWNlV2l0aG91dFByb21wdGluZyhuYW1lLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UpIHtcbiAgICBpZiAoaWdub3JlQ2hhbmdlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJvbXB0QmVmb3JlRm4gPSBnZXRQcm9tcHRCZWZvcmVDbG9zaW5nRmNuKG5hbWUpO1xuICAgIHJldHVybiAhcHJvbXB0QmVmb3JlRm4gfHwgIXByb21wdEJlZm9yZUZuKCk7XG59XG4vKipcbiAqIENsb3NlcyBhIHdvcmtzcGFjZSBncm91cCBhbmQgcGVyZm9ybXMgY2xlYW51cCBvcGVyYXRpb25zLlxuICpcbiAqIEBwYXJhbSBncm91cE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIGdyb3VwIHRvIGNsb3NlXG4gKiBAcGFyYW0gb25Xb3Jrc3BhY2VDbG9zZXVwIC0gT3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBjbG9zaW5nIHRoZSB3b3Jrc3BhY2UgZ3JvdXBcbiAqIEByZXR1cm5zIHZvaWQsIG9yIGV4aXRzIGVhcmx5IGlmIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBncm91cCBuYW1lIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIGdyb3VwIG5hbWVcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6XG4gKiAtIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgZ3JvdXAgbmFtZSBtYXRjaGVzIHRoZSBjdXJyZW50IHdvcmtzcGFjZSBncm91cFxuICogLSBDbG9zZXMgYWxsIHdvcmtzcGFjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBncm91cFxuICogLSBDbGVhcnMgdGhlIHdvcmtzcGFjZSBncm91cCBzdG9yZSBzdGF0ZVxuICogLSBFeGVjdXRlcyBjbGVhbnVwIGZ1bmN0aW9uIGlmIGRlZmluZWQgaW4gdGhlIHdvcmtzcGFjZSBncm91cFxuICogLSBVcGRhdGVzIHRoZSBtYWluIHdvcmtzcGFjZSBzdG9yZSB0byByZW1vdmUgdGhlIHdvcmtzcGFjZSBncm91cFxuICogLSBDYWxscyB0aGUgb3B0aW9uYWwgY2xvc2V1cCBjYWxsYmFjayBpZiBwcm92aWRlZFxuICpcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyIGFuZCB1c2UgY2xvc2VXb3Jrc3BhY2VHcm91cDIgaW5zdGVhZC4gU2VlOlxuICogaHR0cHM6Ly9vcGVubXJzLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvZG9jcy9wYWdlcy82MTU2Nzc5ODEvV29ya3NwYWNlK3YyK01pZ3JhdGlvbitHdWlkZVxuICovIGZ1bmN0aW9uIGNsb3NlV29ya3NwYWNlR3JvdXAoZ3JvdXBOYW1lLCBvbldvcmtzcGFjZUNsb3NldXApIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3QgY3VycmVudFdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKT8ud29ya3NwYWNlR3JvdXA7XG4gICAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IGN1cnJlbnRXb3Jrc3BhY2VHcm91cD8ubmFtZTtcbiAgICBpZiAoIWN1cnJlbnRHcm91cE5hbWUgfHwgZ3JvdXBOYW1lICE9PSBjdXJyZW50R3JvdXBOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gY3VycmVudEdyb3VwTmFtZSA/ICh3b3Jrc3BhY2UpPT53b3Jrc3BhY2UuY3VycmVudFdvcmtzcGFjZUdyb3VwID09PSBjdXJyZW50R3JvdXBOYW1lIDogKCk9PnRydWU7XG4gICAgY2xvc2VBbGxXb3Jrc3BhY2VzKCgpPT57XG4gICAgICAgIC8vIENsZWFyaW5nIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgYW5kIHJlc3BlY3RpdmUgc3RvcmUgaWYgdGhlIG5ldyB3b3Jrc3BhY2UgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgZ3JvdXAsIHdoaWNoIGlzIGhhbmRsZWQgaW4gdGhlIGBsYXVuY2hXb3Jrc3BhY2VgIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCB3b3Jrc3BhY2VHcm91cFN0b3JlID0gZ2V0V29ya3NwYWNlR3JvdXBTdG9yZShncm91cE5hbWUpO1xuICAgICAgICBpZiAod29ya3NwYWNlR3JvdXBTdG9yZSkge1xuICAgICAgICAgICAgd29ya3NwYWNlR3JvdXBTdG9yZS5zZXRTdGF0ZSh7fSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHdvcmtzcGFjZUdyb3VwU3RvcmUuc3Vic2NyaWJlKCgpPT57fSk7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudFdvcmtzcGFjZUdyb3VwPy5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjdXJyZW50V29ya3NwYWNlR3JvdXAuY2xlYW51cCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZUdyb3VwOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbldvcmtzcGFjZUNsb3NldXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uV29ya3NwYWNlQ2xvc2V1cCgpO1xuICAgICAgICB9XG4gICAgfSwgZmlsdGVyKTtcbn1cbi8qKlxuICogTGF1bmNoZXMgYSB3b3Jrc3BhY2UgZ3JvdXAgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIGNvbmZpZ3VyYXRpb24uXG4gKiBJZiB0aGVyZSBhcmUgYW55IG9wZW4gd29ya3NwYWNlcywgaXQgd2lsbCBmaXJzdCBjbG9zZSB0aGVtIGJlZm9yZSBsYXVuY2hpbmcgdGhlIG5ldyB3b3Jrc3BhY2UgZ3JvdXAuXG4gKlxuICogQHBhcmFtIGdyb3VwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgdG8gbGF1bmNoXG4gKiBAcGFyYW0gYXJncyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBsYXVuY2hpbmcgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHBhcmFtIGFyZ3Muc3RhdGUgLSBUaGUgaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIHdvcmtzcGFjZSBncm91cFxuICogQHBhcmFtIGFyZ3Mub25Xb3Jrc3BhY2VHcm91cExhdW5jaCAtIE9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgaXMgbGF1bmNoZWRcbiAqIEBwYXJhbSBhcmdzLndvcmtzcGFjZUdyb3VwQ2xlYW51cCAtIE9wdGlvbmFsIGNsZWFudXAgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgd29ya3NwYWNlIGdyb3VwIGlzIGNsb3NlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBsYXVuY2hXb3Jrc3BhY2VHcm91cChcIm15R3JvdXBcIiwge1xuICogICBzdGF0ZTogaW5pdGlhbFN0YXRlLFxuICogICBvbldvcmtzcGFjZUdyb3VwTGF1bmNoOiAoKSA9PiBjb25zb2xlLmxvZyhcIldvcmtzcGFjZSBncm91cCBsYXVuY2hlZFwiKSxcbiAqICAgd29ya3NwYWNlR3JvdXBDbGVhbnVwOiAoKSA9PiBjb25zb2xlLmxvZyhcIkNsZWFuaW5nIHVwIHdvcmtzcGFjZSBncm91cFwiKVxuICogfSk7XG4gKlxuICogQGRlcHJlY2F0ZWQgbWlncmF0ZSB0byB3b3Jrc3BhY2UgdjIgYW5kIHVzZSBsYXVuY2hXb3Jrc3BhY2VHcm91cDIgaW5zdGVhZC4gU2VlOlxuICogaHR0cHM6Ly9vcGVubXJzLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvZG9jcy9wYWdlcy82MTU2Nzc5ODEvV29ya3NwYWNlK3YyK01pZ3JhdGlvbitHdWlkZVxuICovIGV4cG9ydCBmdW5jdGlvbiBsYXVuY2hXb3Jrc3BhY2VHcm91cChncm91cE5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VHcm91cFJlZ2lzdHJhdGlvbiA9IGdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uKGdyb3VwTmFtZSk7XG4gICAgY29uc3QgeyBzdGF0ZSwgb25Xb3Jrc3BhY2VHcm91cExhdW5jaCwgd29ya3NwYWNlR3JvdXBDbGVhbnVwLCB3b3Jrc3BhY2VUb0xhdW5jaCB9ID0gYXJncztcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgaWYgKHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZUdyb3VwID0gc3RvcmUuZ2V0U3RhdGUoKS53b3Jrc3BhY2VHcm91cDtcbiAgICAgICAgaWYgKHdvcmtzcGFjZUdyb3VwKSB7XG4gICAgICAgICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKHdvcmtzcGFjZUdyb3VwPy5uYW1lLCAoKT0+e1xuICAgICAgICAgICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb3NlQWxsV29ya3NwYWNlcygoKT0+e1xuICAgICAgICAgICAgICAgIGxhdW5jaFdvcmtzcGFjZUdyb3VwKGdyb3VwTmFtZSwgYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZUdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyczogd29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24ubWVtYmVycyxcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cDogd29ya3NwYWNlR3JvdXBDbGVhbnVwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICBnZXRXb3Jrc3BhY2VHcm91cFN0b3JlKGdyb3VwTmFtZSwgc3RhdGUpO1xuICAgICAgICBvbldvcmtzcGFjZUdyb3VwTGF1bmNoPy4oKTtcbiAgICAgICAgaWYgKHdvcmtzcGFjZVRvTGF1bmNoKSB7XG4gICAgICAgICAgICBsYXVuY2hXb3Jrc3BhY2Uod29ya3NwYWNlVG9MYXVuY2gubmFtZSwgd29ya3NwYWNlVG9MYXVuY2guYWRkaXRpb25hbFByb3BzID8/IHt9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZSh3b3Jrc3BhY2UsIG5ld1dvcmtzcGFjZURldGFpbHMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGFkZGl0aW9uYWxQcm9wcyB9ID0gbmV3V29ya3NwYWNlRGV0YWlscztcbiAgICBjb25zdCBuZXdXb3Jrc3BhY2VSZWdpc3RyYXRpb24gPSBnZXRXb3Jrc3BhY2VSZWdpc3RyYXRpb24obmFtZSk7XG4gICAgY29uc3QgcHJvY2VlZCA9ICgpPT57XG4gICAgICAgIGNsb3NlV29ya3NwYWNlKHdvcmtzcGFjZS5uYW1lLCB7XG4gICAgICAgICAgICBpZ25vcmVDaGFuZ2VzOiB0cnVlLFxuICAgICAgICAgICAgLy8gQ2FsbGluZyB0aGUgbGF1bmNoV29ya3NwYWNlIGFnYWluLCBzaW5jZSBvbmUgb2YgdGhlIGBpZmAgY2FzZVxuICAgICAgICAgICAgLy8gbWlnaHQgcmVzb2x2ZSwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYXNlcyBiZWZvcmUgbGF1bmNoaW5nIHRoZSBmb3JtLlxuICAgICAgICAgICAgb25Xb3Jrc3BhY2VDbG9zZTogKCk9PmxhdW5jaFdvcmtzcGFjZShuYW1lLCBhZGRpdGlvbmFsUHJvcHMpLFxuICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyB3b3Jrc3BhY2UgaXMgb2YgdGhlIHNhbWUgc2lkZWJhciBncm91cCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyIHRoZSB3b3Jrc3BhY2UgZ3JvdXAgc3RvcmUuXG4gICAgICAgICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlmICghY2FuQ2xvc2VXb3Jrc3BhY2VXaXRob3V0UHJvbXB0aW5nKHdvcmtzcGFjZS5uYW1lKSkge1xuICAgICAgICBzaG93V29ya3NwYWNlUHJvbXB0cygnY2xvc2luZy13b3Jrc3BhY2UtbGF1bmNoaW5nLW5ldy13b3Jrc3BhY2UnLCBwcm9jZWVkLCB3b3Jrc3BhY2UudGl0bGUgPz8gd29ya3NwYWNlLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2NlZWQoKTtcbiAgICB9XG59XG4vKipcbiAqIFRoaXMgbGF1bmNoZXMgYSB3b3Jrc3BhY2UgYnkgaXRzIG5hbWUuIFRoZSB3b3Jrc3BhY2UgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC5cbiAqIFdvcmtzcGFjZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgaW4gdGhlIGByb3V0ZXMuanNvbmAgZmlsZS5cbiAqXG4gKiBGb3IgdGhlIHdvcmtzcGFjZSB0byBhcHBlYXIsIHRoZXJlIG11c3QgYmUgZWl0aGVyIGEgYDxXb3Jrc3BhY2VPdmVybGF5IC8+YCBvclxuICogYSBgPFdvcmtzcGFjZVdpbmRvdyAvPmAgY29tcG9uZW50IHJlbmRlcmVkLlxuICpcbiAqIFRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIGZvbGxvd3M6XG4gKlxuICogLSBJZiBubyB3b3Jrc3BhY2VzIGFyZSBvcGVuLCBvciBpZiBubyBvdGhlciB3b3Jrc3BhY2VzIHdpdGggdGhlIHNhbWUgdHlwZSBhcmUgb3BlbixcbiAqICAgaXQgd2lsbCBiZSBvcGVuZWQgYW5kIGZvY3VzZWQuXG4gKiAtIElmIGEgd29ya3NwYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9wZW4sIGl0IHdpbGwgYmUgZGlzcGxheWVkL2ZvY3VzZWQsXG4gKiAgIGlmIGl0IHdhcyBub3QgYWxyZWFkeS5cbiAqIC0gSWYgYSB3b3Jrc3BhY2UgaXMgbGF1bmNoZWQgYW5kIGEgd29ya3NwYWNlIHdoaWNoIGNhbm5vdCBiZSBoaWRkZW4gaXMgYWxyZWFkeSBvcGVuLFxuICogIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbGwgcG9wIHVwIHdhcm5pbmcgYWJvdXQgY2xvc2luZyB0aGUgY3VycmVudGx5IG9wZW4gd29ya3NwYWNlLlxuICogLSBJZiBhbm90aGVyIHdvcmtzcGFjZSB3aXRoIHRoZSBzYW1lIHR5cGUgaXMgb3BlbiwgdGhlIHdvcmtzcGFjZSB3aWxsIGJlIGJyb3VnaHQgdG9cbiAqICAgdGhlIGZyb250IGFuZCB0aGVuIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbGwgcG9wIHVwIHdhcm5pbmcgYWJvdXQgY2xvc2luZyB0aGUgb3BlbmVkXG4gKiAgIHdvcmtzcGFjZVxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGp1c3QgbWFuaXB1bGF0ZXMgdGhlIHdvcmtzcGFjZSBzdG9yZS4gVGhlIFVJIGxvZ2ljIGlzIGhhbmRsZWRcbiAqIGJ5IHRoZSBjb21wb25lbnRzIHRoYXQgZGlzcGxheSB3b3Jrc3BhY2VzLlxuICpcbiAqIEFkZGl0aW9uYWwgcHJvcHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgd29ya3NwYWNlIGNvbXBvbmVudCBiZWluZyBsYXVuY2hlZC4gUGFzc2luZyBhXG4gKiBwcm9wIG5hbWVkIGB3b3Jrc3BhY2VUaXRsZWAgd2lsbCBvdmVycmlkZSB0aGUgdGl0bGUgb2YgdGhlIHdvcmtzcGFjZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlIHRvIGxhdW5jaFxuICogQHBhcmFtIGFkZGl0aW9uYWxQcm9wcyBQcm9wcyB0byBwYXNzIHRvIHRoZSB3b3Jrc3BhY2UgY29tcG9uZW50IGJlaW5nIGxhdW5jaGVkLiBQYXNzaW5nXG4gKiAgICAgICAgICBhIHByb3AgbmFtZWQgYHdvcmtzcGFjZVRpdGxlYCB3aWxsIG92ZXJyaWRlIHRoZSB0aXRsZSBvZiB0aGUgd29ya3NwYWNlLlxuICpcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyIGFuZCB1c2UgbGF1bmNoV29ya3NwYWNlMiBpbnN0ZWFkLiBTZWU6XG4gKiBodHRwczovL29wZW5tcnMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9kb2NzL3BhZ2VzLzYxNTY3Nzk4MS9Xb3Jrc3BhY2UrdjIrTWlncmF0aW9uK0d1aWRlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGxhdW5jaFdvcmtzcGFjZShuYW1lLCBhZGRpdGlvbmFsUHJvcHMpIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3Qgd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uKG5hbWUpO1xuICAgIGNvbnN0IGN1cnJlbnRXb3Jrc3BhY2VHcm91cCA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA7XG4gICAgaWYgKGN1cnJlbnRXb3Jrc3BhY2VHcm91cCAmJiAhY3VycmVudFdvcmtzcGFjZUdyb3VwLm1lbWJlcnM/LmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgIGNsb3NlV29ya3NwYWNlR3JvdXAoY3VycmVudFdvcmtzcGFjZUdyb3VwLm5hbWUsICgpPT57XG4gICAgICAgICAgICBsYXVuY2hXb3Jrc3BhY2UobmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEdyb3VwTmFtZSA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA/Lm5hbWU7XG4gICAgY29uc3QgbmV3V29ya3NwYWNlID0ge1xuICAgICAgICAuLi53b3Jrc3BhY2UsXG4gICAgICAgIHRpdGxlOiBnZXRXb3Jrc3BhY2VUaXRsZSh3b3Jrc3BhY2UsIGFkZGl0aW9uYWxQcm9wcyksXG4gICAgICAgIGNsb3NlV29ya3NwYWNlOiAob3B0aW9ucyA9IHt9KT0+Y2xvc2VXb3Jrc3BhY2UobmFtZSwgb3B0aW9ucyksXG4gICAgICAgIGNsb3NlV29ya3NwYWNlV2l0aFNhdmVkQ2hhbmdlczogKG9wdGlvbnMpPT5jbG9zZVdvcmtzcGFjZShuYW1lLCB7XG4gICAgICAgICAgICAgICAgaWdub3JlQ2hhbmdlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgcHJvbXB0QmVmb3JlQ2xvc2luZzogKHRlc3RGY24pPT5wcm9tcHRCZWZvcmVDbG9zaW5nKG5hbWUsIHRlc3RGY24pLFxuICAgICAgICBzZXRUaXRsZTogKHRpdGxlLCB0aXRsZU5vZGUpPT57XG4gICAgICAgICAgICBuZXdXb3Jrc3BhY2UudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIG5ld1dvcmtzcGFjZS50aXRsZU5vZGUgPSB0aXRsZU5vZGU7XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlbldvcmtzcGFjZXMgPSBzdGF0ZS5vcGVuV29ya3NwYWNlcy5tYXAoKHcpPT53Lm5hbWUgPT09IG5hbWUgPyBuZXdXb3Jrc3BhY2UgOiB3KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlbldvcmtzcGFjZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbnRXb3Jrc3BhY2VHcm91cDogY3VycmVudEdyb3VwTmFtZSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BzOiBhZGRpdGlvbmFsUHJvcHMgPz8ge31cbiAgICB9O1xuICAgIGlmIChjdXJyZW50R3JvdXBOYW1lKSB7XG4gICAgICAgIGdldFdvcmtzcGFjZUdyb3VwU3RvcmUoY3VycmVudEdyb3VwTmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKHdvcmtzcGFjZVRvQmVBZGRlZCwgcmVzdE9mVGhlV29ya3NwYWNlcykge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT57XG4gICAgICAgICAgICBjb25zdCBvcGVuV29ya3NwYWNlcyA9IFtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VUb0JlQWRkZWQsXG4gICAgICAgICAgICAgICAgLi4ucmVzdE9mVGhlV29ya3NwYWNlcyA/PyBzdGF0ZS5vcGVuV29ya3NwYWNlc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxldCB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSA9IGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh3b3Jrc3BhY2VUb0JlQWRkZWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBvcGVuV29ya3NwYWNlcyxcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Xb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcztcbiAgICBjb25zdCB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgPSBvcGVuV29ya3NwYWNlcy5maW5kSW5kZXgoKHcpPT53Lm5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IGlzV29ya3NwYWNlQWxyZWFkeU9wZW4gPSB3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMgPj0gMDtcbiAgICBjb25zdCBvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUgPSBvcGVuV29ya3NwYWNlcy5maW5kKCh3KT0+dy50eXBlID09IG5ld1dvcmtzcGFjZS50eXBlKTtcbiAgICBpZiAob3BlbldvcmtzcGFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShuZXdXb3Jrc3BhY2UpO1xuICAgIH0gZWxzZSBpZiAoIW9wZW5Xb3Jrc3BhY2VzWzBdLmNhbkhpZGUgJiYgd29ya3NwYWNlSW5kZXhJbk9wZW5Xb3Jrc3BhY2VzICE9PSAwKSB7XG4gICAgICAgIHByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZShvcGVuV29ya3NwYWNlc1swXSwge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wc1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzV29ya3NwYWNlQWxyZWFkeU9wZW4pIHtcbiAgICAgICAgY29uc3Qgb3BlbldvcmtzcGFjZSA9IG9wZW5Xb3Jrc3BhY2VzW3dvcmtzcGFjZUluZGV4SW5PcGVuV29ya3NwYWNlc107XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3QgcmVmZXJlbmNlIHNvIHRoYXQgV29ya3NwYWNlUmVuZGVyZXIncyB1c2VNZW1vXG4gICAgICAgIC8vIGRldGVjdHMgdGhlIGNoYW5nZSBhbmQgcmUtcmVuZGVycyB3aXRoIHRoZSB1cGRhdGVkIGFkZGl0aW9uYWxQcm9wcy5cbiAgICAgICAgY29uc3QgdXBkYXRlZFdvcmtzcGFjZSA9IHtcbiAgICAgICAgICAgIC4uLm9wZW5Xb3Jrc3BhY2UsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcHM6IG5ld1dvcmtzcGFjZS5hZGRpdGlvbmFsUHJvcHMsXG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgdGl0bGUgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGJ5IGBzZXRUaXRsZWBcbiAgICAgICAgICAgIC4uLm9wZW5Xb3Jrc3BhY2UudGl0bGUgPT09IGdldFdvcmtzcGFjZVRpdGxlKG9wZW5Xb3Jrc3BhY2UsIG9wZW5Xb3Jrc3BhY2UuYWRkaXRpb25hbFByb3BzKSAmJiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IGdldFdvcmtzcGFjZVRpdGxlKG5ld1dvcmtzcGFjZSwgbmV3V29ya3NwYWNlLmFkZGl0aW9uYWxQcm9wcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdE9mVGhlV29ya3NwYWNlcyA9IG9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodyk9PncubmFtZSAhPSBuYW1lKTtcbiAgICAgICAgdXBkYXRlU3RvcmVXaXRoTmV3V29ya3NwYWNlKHVwZGF0ZWRXb3Jrc3BhY2UsIHJlc3RPZlRoZVdvcmtzcGFjZXMpO1xuICAgIH0gZWxzZSBpZiAob3BlbmVkV29ya3NwYWNlV2l0aFNhbWVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHJlc3RPZlRoZVdvcmtzcGFjZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLm9wZW5Xb3Jrc3BhY2VzLmZpbHRlcigodyk9PncudHlwZSAhPSBuZXdXb3Jrc3BhY2UudHlwZSk7XG4gICAgICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShvcGVuZWRXb3Jrc3BhY2VXaXRoU2FtZVR5cGUsIHJlc3RPZlRoZVdvcmtzcGFjZXMpO1xuICAgICAgICBwcm9tcHRCZWZvcmVMYXVuY2hpbmdXb3Jrc3BhY2Uob3BlbmVkV29ya3NwYWNlV2l0aFNhbWVUeXBlLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BzXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZVN0b3JlV2l0aE5ld1dvcmtzcGFjZShuZXdXb3Jrc3BhY2UpO1xuICAgIH1cbn1cbi8qKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gYSBuZXcgcGFnZSBhbmQgbGF1bmNoIGEgd29ya3NwYWNlIG9uIHRoYXQgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGluZyBhbmQgbGF1bmNoaW5nIHRoZSB3b3Jrc3BhY2UuXG4gKiBAcGFyYW0gb3B0aW9ucy50YXJnZXRVcmwgVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by4gV2lsbCBiZSBwYXNzZWQgdG8gW1tuYXZpZ2F0ZV1dLlxuICogQHBhcmFtIG9wdGlvbnMuY29udGV4dEtleSBUaGUgY29udGV4dCBrZXkgdXNlZCBieSB0aGUgdGFyZ2V0IHBhZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucy53b3Jrc3BhY2VOYW1lIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgdG8gbGF1bmNoLlxuICogQHBhcmFtIG9wdGlvbnMuYWRkaXRpb25hbFByb3BzIEFkZGl0aW9uYWwgcHJvcHMgdG8gcGFzcyB0byB0aGUgd29ya3NwYWNlIGNvbXBvbmVudCBiZWluZyBsYXVuY2hlZC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBtaWdyYXRlIHRvIHdvcmtzcGFjZSB2MiBhbmQgY2FsbCBsYXVuY2hXb3Jrc3BhY2UyIGluc3RlYWQuIFNlZTpcbiAqIGh0dHBzOi8vb3Blbm1ycy5hdGxhc3NpYW4ubmV0L3dpa2kvc3BhY2VzL2RvY3MvcGFnZXMvNjE1Njc3OTgxL1dvcmtzcGFjZSt2MitNaWdyYXRpb24rR3VpZGVcbiAqLyBleHBvcnQgZnVuY3Rpb24gbmF2aWdhdGVBbmRMYXVuY2hXb3Jrc3BhY2UoeyB0YXJnZXRVcmwsIGNvbnRleHRLZXksIHdvcmtzcGFjZU5hbWUsIGFkZGl0aW9uYWxQcm9wcyB9KSB7XG4gICAgY2hhbmdlV29ya3NwYWNlQ29udGV4dChjb250ZXh0S2V5KTtcbiAgICBsYXVuY2hXb3Jrc3BhY2Uod29ya3NwYWNlTmFtZSwgYWRkaXRpb25hbFByb3BzKTtcbiAgICBuYXZpZ2F0ZSh7XG4gICAgICAgIHRvOiB0YXJnZXRVcmxcbiAgICB9KTtcbn1cbmNvbnN0IHByb21wdEJlZm9yZUNsb3NpbmdGY25zID0ge307XG5leHBvcnQgZnVuY3Rpb24gcHJvbXB0QmVmb3JlQ2xvc2luZyh3b3Jrc3BhY2VOYW1lLCB0ZXN0RmNuKSB7XG4gICAgcHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbnNbd29ya3NwYWNlTmFtZV0gPSB0ZXN0RmNuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb21wdEJlZm9yZUNsb3NpbmdGY24od29ya3NwYWNlTmFtZSkge1xuICAgIHJldHVybiBwcm9tcHRCZWZvcmVDbG9zaW5nRmNuc1t3b3Jrc3BhY2VOYW1lXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxQcm9tcHQoKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBwcm9tcHQ6IG51bGxcbiAgICB9KTtcbn1cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGlnbm9yZUNoYW5nZXM6IGZhbHNlLFxuICAgIG9uV29ya3NwYWNlQ2xvc2U6ICgpPT57fSxcbiAgICBjbG9zZVdvcmtzcGFjZUdyb3VwOiB0cnVlXG59O1xuLyoqXG4gKiBGdW5jdGlvbiB0byBjbG9zZSBhbiBvcGVuZWQgd29ya3NwYWNlXG4gKiBAcGFyYW0gbmFtZSBXb3Jrc3BhY2UgcmVnaXN0cmF0aW9uIG5hbWVcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gY2xvc2Ugd29ya3NwYWNlXG4gKlxuICogQGRlcHJlY2F0ZWQgbWlncmF0ZSB0byB3b3Jrc3BhY2UgdjIgYW5kIGNhbGwgY2xvc2VXb3Jrc3BhY2UgZnJvbSBXb3Jrc3BhY2UyRGVmaW5pdGlvblByb3BzIGluc3RlYWQuIFNlZTpcbiAqIGh0dHBzOi8vb3Blbm1ycy5hdGxhc3NpYW4ubmV0L3dpa2kvc3BhY2VzL2RvY3MvcGFnZXMvNjE1Njc3OTgxL1dvcmtzcGFjZSt2MitNaWdyYXRpb24rR3VpZGVcbiAqLyBleHBvcnQgZnVuY3Rpb24gY2xvc2VXb3Jrc3BhY2UobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBjb25zdCB1cGRhdGVTdG9yZVdpdGhDbG9zZWRXb3Jrc3BhY2UgPSAoKT0+e1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZVRvQmVDbG9zZWQgPSBzdGF0ZS5vcGVuV29ya3NwYWNlcy5maW5kKCh3KT0+dy5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgY29uc3QgbmV3T3BlbldvcmtzcGFjZXMgPSBzdGF0ZS5vcGVuV29ya3NwYWNlcy5maWx0ZXIoKHcpPT53Lm5hbWUgIT0gbmFtZSk7XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZUdyb3VwTmFtZSA9IHN0b3JlLmdldFN0YXRlKCkud29ya3NwYWNlR3JvdXA/Lm5hbWU7XG4gICAgICAgIGlmICh3b3Jrc3BhY2VHcm91cE5hbWUgJiYgb3B0aW9ucy5jbG9zZVdvcmtzcGFjZUdyb3VwKSB7XG4gICAgICAgICAgICBjbG9zZVdvcmtzcGFjZUdyb3VwKHdvcmtzcGFjZUdyb3VwTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5zdXJlIGNsb3NlZCB3b3Jrc3BhY2Ugd2lsbCBub3QgcHJvbXB0XG4gICAgICAgIHByb21wdEJlZm9yZUNsb3NpbmcobmFtZSwgKCk9PmZhbHNlKTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoKHByZXYpPT4oe1xuICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgcHJvbXB0OiBudWxsLFxuICAgICAgICAgICAgICAgIG9wZW5Xb3Jrc3BhY2VzOiBuZXdPcGVuV29ya3NwYWNlcyxcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogZ2V0VXBkYXRlZFdvcmtzcGFjZVdpbmRvd1N0YXRlKG5ld09wZW5Xb3Jrc3BhY2VzPy5bMF0pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIG9wdGlvbnM/Lm9uV29ya3NwYWNlQ2xvc2U/LigpO1xuICAgIH07XG4gICAgaWYgKCFjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmcobmFtZSwgb3B0aW9ucz8uaWdub3JlQ2hhbmdlcykpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBnZXRXb3Jrc3BhY2VSZWdpc3RyYXRpb24obmFtZSkudGl0bGUgPz8gbmFtZTtcbiAgICAgICAgc2hvd1dvcmtzcGFjZVByb21wdHMoJ2Nsb3Npbmctd29ya3NwYWNlJywgdXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlLCBjdXJyZW50TmFtZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVTdG9yZVdpdGhDbG9zZWRXb3Jrc3BhY2UoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgc2V0IG9mIHdvcmtzcGFjZXMgaXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHBhZ2UuIFRoaXMgZnVuY3Rpb25cbiAqIHNob3VsZCBiZSB1c2VkIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhIG5ldyBwYWdlLiBJZiB0aGUgY3VycmVudFxuICogd29ya3NwYWNlIGRhdGEgaXMgZm9yIGEgZGlmZmVyZW50IHBhZ2UsIHRoZSB3b3Jrc3BhY2Ugc3RhdGUgaXMgY2xlYXJlZC5cbiAqXG4gKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgd29ya3NwYWNlIGNvbXBvbmVudHMgd2hlbiB0aGV5IG1vdW50LlxuICogQGludGVybmFsXG4gKlxuICogQHBhcmFtIGNvbnRleHRLZXkgQW4gYXJiaXRyYXJ5IGtleSB0byBpZGVudGlmeSB0aGUgY3VycmVudCBwYWdlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVdvcmtzcGFjZUNvbnRleHQoY29udGV4dEtleSkge1xuICAgIGNvbnN0IHN0b3JlID0gZ2V0V29ya3NwYWNlU3RvcmUoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQgIT0gY29udGV4dEtleSkge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0S2V5LFxuICAgICAgICAgICAgb3BlbldvcmtzcGFjZXM6IFtdLFxuICAgICAgICAgICAgcHJvbXB0OiBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBjb250ZXh0OiAnJyxcbiAgICBvcGVuV29ya3NwYWNlczogW10sXG4gICAgcHJvbXB0OiBudWxsLFxuICAgIHdvcmtzcGFjZVdpbmRvd1N0YXRlOiAnbm9ybWFsJyxcbiAgICB3b3Jrc3BhY2VHcm91cDogdW5kZWZpbmVkXG59O1xuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVN0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ3dvcmtzcGFjZScsIGluaXRpYWxTdGF0ZSk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZVN0b3JlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVdvcmtzcGFjZVdpbmRvd1N0YXRlKHZhbHVlKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRXb3Jrc3BhY2VTdG9yZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZTogdmFsdWVcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFVwZGF0ZWRXb3Jrc3BhY2VXaW5kb3dTdGF0ZSh3b3Jrc3BhY2VBdFRvcCkge1xuICAgIHJldHVybiB3b3Jrc3BhY2VBdFRvcD8ucHJlZmVycmVkV2luZG93U2l6ZSA/PyAnbm9ybWFsJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZUFsbFdvcmtzcGFjZXMob25DbG9zaW5nV29ya3NwYWNlcyA9ICgpPT57fSwgZmlsdGVyID0gKCk9PnRydWUpIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgY29uc3QgY2FuQ2xvc2VBbGxXb3Jrc3BhY2VzID0gc3RvcmUuZ2V0U3RhdGUoKS5vcGVuV29ya3NwYWNlcy5maWx0ZXIoZmlsdGVyKS5ldmVyeSgoeyBuYW1lIH0pPT57XG4gICAgICAgIHJldHVybiBjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmcobmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgdXBkYXRlV29ya3NwYWNlU3RvcmUgPSAoKT0+e1xuICAgICAgICByZXNldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgICAgIG9uQ2xvc2luZ1dvcmtzcGFjZXM/LigpO1xuICAgIH07XG4gICAgaWYgKCFjYW5DbG9zZUFsbFdvcmtzcGFjZXMpIHtcbiAgICAgICAgc2hvd1dvcmtzcGFjZVByb21wdHMoJ2Nsb3NpbmctYWxsLXdvcmtzcGFjZXMnLCB1cGRhdGVXb3Jrc3BhY2VTdG9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlV29ya3NwYWNlU3RvcmUoKTtcbiAgICB9XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIG1pZ3JhdGUgdG8gd29ya3NwYWNlIHYyLiBTZWU6XG4gKiBodHRwczovL29wZW5tcnMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9kb2NzL3BhZ2VzLzYxNTY3Nzk4MS9Xb3Jrc3BhY2UrdjIrTWlncmF0aW9uK0d1aWRlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHVzZVdvcmtzcGFjZXMoKSB7XG4gICAgY29uc3QgeyB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSwgb3BlbldvcmtzcGFjZXMsIHByb21wdCwgd29ya3NwYWNlR3JvdXAgfSA9IHVzZVN0b3JlKHdvcmtzcGFjZVN0b3JlKTtcbiAgICBjb25zdCBtZW1vaXNlZFJlc3VsdHMgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhY3RpdmU6IG9wZW5Xb3Jrc3BhY2VzLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICBwcm9tcHQsXG4gICAgICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgICAgICAgIHdvcmtzcGFjZXM6IG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICAgICAgd29ya3NwYWNlR3JvdXBcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIG9wZW5Xb3Jrc3BhY2VzLFxuICAgICAgICB3b3Jrc3BhY2VXaW5kb3dTdGF0ZSxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICB3b3Jrc3BhY2VHcm91cFxuICAgIF0pO1xuICAgIHJldHVybiBtZW1vaXNlZFJlc3VsdHM7XG59XG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgcHJvbXB0IGFjY29yZGluZyB0byB0aGUgcHJvbXB0IHR5cGUuXG4gKiBAcGFyYW0gcHJvbXB0VHlwZSBEZXRlcm1pbmVzIHRoZSB0ZXh0IGFuZCBiZWhhdmlvciBvZiB0aGUgcHJvbXB0XG4gKiBAcGFyYW0gb25Db25maXJtYXRpb24gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIGNvbmZpcm1zIHRvIGNsb3NlIHRoZSB3b3Jrc3BhY2VcbiAqIEBwYXJhbSB3b3Jrc3BhY2VUaXRsZSBXb3Jrc3BhY2UgdGl0bGUgdG8gYmUgc2hvd24gaW4gdGhlIHByb21wdFxuICogQHJldHVybnNcbiAqLyBleHBvcnQgZnVuY3Rpb24gc2hvd1dvcmtzcGFjZVByb21wdHMocHJvbXB0VHlwZSwgb25Db25maXJtYXRpb24gPSAoKT0+e30sIHdvcmtzcGFjZVRpdGxlID0gJycpIHtcbiAgICBjb25zdCBzdG9yZSA9IGdldFdvcmtzcGFjZVN0b3JlKCk7XG4gICAgbGV0IHByb21wdDtcbiAgICBzd2l0Y2gocHJvbXB0VHlwZSl7XG4gICAgICAgIGNhc2UgJ2Nsb3Npbmctd29ya3NwYWNlJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm9tcHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRDb3JlVHJhbnNsYXRpb24oJ3Vuc2F2ZWRDaGFuZ2VzVGl0bGVUZXh0JywgJ1Vuc2F2ZWQgY2hhbmdlcycpLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBnZXRDb3JlVHJhbnNsYXRpb24oJ3Vuc2F2ZWRDaGFuZ2VzSW5PcGVuZWRXb3Jrc3BhY2UnLCBgWW91IG1heSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgb3BlbmVkIHdvcmtzcGFjZS4gRG8geW91IHdhbnQgdG8gZGlzY2FyZCB0aGVzZSBjaGFuZ2VzP2ApLFxuICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm1hdGlvbj8uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBnZXRDb3JlVHJhbnNsYXRpb24oJ2Rpc2NhcmQnLCAnRGlzY2FyZCcpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnY2xvc2luZy1hbGwtd29ya3NwYWNlcyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd29ya3NwYWNlc05vdENsb3NlZCA9IHN0b3JlLmdldFN0YXRlKCkub3BlbldvcmtzcGFjZXMuZmlsdGVyKCh7IG5hbWUgfSk9PiFjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmcobmFtZSkpLm1hcCgoeyB0aXRsZSB9LCBpbmR4KT0+YCR7aW5keCArIDF9LiAke3RpdGxlfWApO1xuICAgICAgICAgICAgICAgIHByb21wdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldENvcmVUcmFuc2xhdGlvbignY2xvc2luZ0FsbFdvcmtzcGFjZXNQcm9tcHRUaXRsZScsICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogZ2V0Q29yZVRyYW5zbGF0aW9uKCdjbG9zaW5nQWxsV29ya3NwYWNlc1Byb21wdEJvZHknLCAnVGhlcmUgbWF5IGJlIHVuc2F2ZWQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIHdvcmtzcGFjZXMuIERvIHlvdSB3YW50IHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIHdvcmtzcGFjZXM/IHt7d29ya3NwYWNlTmFtZXN9fScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZU5hbWVzOiB3b3Jrc3BhY2VzTm90Q2xvc2VkLmpvaW4oJywnKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb24/LigpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogZ2V0Q29yZVRyYW5zbGF0aW9uKCdjbG9zZUFsbE9wZW5lZFdvcmtzcGFjZXMnLCAnRGlzY2FyZCBjaGFuZ2VzIGluIHt7Y291bnR9fSB3b3Jrc3BhY2VzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IHdvcmtzcGFjZXNOb3RDbG9zZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnY2xvc2luZy13b3Jrc3BhY2UtbGF1bmNoaW5nLW5ldy13b3Jrc3BhY2UnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb21wdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldENvcmVUcmFuc2xhdGlvbigndW5zYXZlZENoYW5nZXNUaXRsZVRleHQnLCAnVW5zYXZlZCBjaGFuZ2VzJyksXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGdldENvcmVUcmFuc2xhdGlvbigndW5zYXZlZENoYW5nZXNJbldvcmtzcGFjZScsICdUaGVyZSBtYXkgYmUgdW5zYXZlZCBjaGFuZ2VzIGluIFwie3t3b3Jrc3BhY2VOYW1lfX1cIi4gUGxlYXNlIHNhdmUgdGhlbSBiZWZvcmUgb3BlbmluZyBhbm90aGVyIHdvcmtzcGFjZS4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VOYW1lOiB3b3Jrc3BhY2VUaXRsZVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uPy4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IGdldENvcmVUcmFuc2xhdGlvbignb3BlbkFueXdheScsICdPcGVuIGFueXdheScpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBXb3Jrc3BhY2Ugc3lzdGVtIHRyeWluZyB0byBvcGVuIHVua25vd24gcHJvbXB0IHR5cGUgXCIke3Byb21wdFR5cGV9XCIgaW4gZnVuY3Rpb24gXCJzaG93V29ya3NwYWNlUHJvbXB0c1wiYCk7XG4gICAgICAgICAgICAgICAgb25Db25maXJtYXRpb24/LigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgc3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcHJvbXB0XG4gICAgICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGdldFdvcmtzcGFjZVRpdGxlKHdvcmtzcGFjZSwgYWRkaXRpb25hbFByb3BzKSB7XG4gICAgcmV0dXJuIGFkZGl0aW9uYWxQcm9wcz8uWyd3b3Jrc3BhY2VUaXRsZSddID8/IHdvcmtzcGFjZS50aXRsZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNldFdvcmtzcGFjZVN0b3JlKCkge1xuICAgIGdldFdvcmtzcGFjZVN0b3JlKCkuc2V0U3RhdGUoaW5pdGlhbFN0YXRlKTtcbn1cbi8qKlxuICogVGhlIHdvcmtzcGFjZSBncm91cCBzdG9yZSBpcyBhIHN0b3JlIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHdvcmtzcGFjZSBncm91cC5cbiAqIElmIHRoZSB3b3Jrc3BhY2UgaGFzIGl0cyBvd24gc2lkZWJhciwgdGhlIHN0b3JlIHdpbGwgYmUgY3JlYXRlZC5cbiAqIFRoaXMgc3RvcmUgY2FuIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB3b3Jrc3BhY2UgZ3JvdXAuXG4gKiBUaGUgc3RvcmUgd2lsbCBiZSBzYW1lIGZvciBhbGwgdGhlIHdvcmtzcGFjZXMgd2l0aCBzYW1lIGdyb3VwIG5hbWUuXG4gKlxuICogRm9yIHdvcmtzcGFjZXMgbGF1bmNoZWQgd2l0aG91dCBhIGdyb3VwLCB0aGUgc3RvcmUgd2lsbCBiZSB1bmRlZmluZWQuXG4gKlxuICogVGhlIHN0b3JlIHdpbGwgYmUgY2xlYXJlZCB3aGVuIGFsbCB0aGUgd29ya3NwYWNlcyB3aXRoIHRoZSBzdG9yZSdzIGdyb3VwIG5hbWUgYXJlIGNsb3NlZC5cbiAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlR3JvdXBTdG9yZSh3b3Jrc3BhY2VHcm91cE5hbWUsIGFkZGl0aW9uYWxQcm9wcyA9IHt9KSB7XG4gICAgaWYgKCF3b3Jrc3BhY2VHcm91cE5hbWUgfHwgd29ya3NwYWNlR3JvdXBOYW1lID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRHbG9iYWxTdG9yZSh3b3Jrc3BhY2VHcm91cE5hbWUsIHt9KTtcbiAgICBpZiAoYWRkaXRpb25hbFByb3BzKSB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKChwcmV2KT0+KHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgIC4uLmFkZGl0aW9uYWxQcm9wc1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmU7XG59XG4iXSwibmFtZXMiOlsidXNlTWVtbyIsImdldFdvcmtzcGFjZUdyb3VwUmVnaXN0cmF0aW9uIiwiZ2V0V29ya3NwYWNlUmVnaXN0cmF0aW9uIiwibmF2aWdhdGUiLCJnZXRHbG9iYWxTdG9yZSIsImNyZWF0ZUdsb2JhbFN0b3JlIiwiZ2V0Q29yZVRyYW5zbGF0aW9uIiwidXNlU3RvcmUiLCJjYW5DbG9zZVdvcmtzcGFjZVdpdGhvdXRQcm9tcHRpbmciLCJuYW1lIiwiaWdub3JlQ2hhbmdlcyIsInByb21wdEJlZm9yZUZuIiwiZ2V0UHJvbXB0QmVmb3JlQ2xvc2luZ0ZjbiIsImNsb3NlV29ya3NwYWNlR3JvdXAiLCJncm91cE5hbWUiLCJvbldvcmtzcGFjZUNsb3NldXAiLCJfc3RvcmVfZ2V0U3RhdGUiLCJzdG9yZSIsImdldFdvcmtzcGFjZVN0b3JlIiwiY3VycmVudFdvcmtzcGFjZUdyb3VwIiwiY3VycmVudEdyb3VwTmFtZSIsImZpbHRlciIsIndvcmtzcGFjZSIsImNsb3NlQWxsV29ya3NwYWNlcyIsIndvcmtzcGFjZUdyb3VwU3RvcmUiLCJnZXRXb3Jrc3BhY2VHcm91cFN0b3JlIiwidW5zdWJzY3JpYmUiLCJwcmV2IiwidW5kZWZpbmVkIiwibGF1bmNoV29ya3NwYWNlR3JvdXAiLCJhcmdzIiwid29ya3NwYWNlR3JvdXBSZWdpc3RyYXRpb24iLCJzdGF0ZSIsIm9uV29ya3NwYWNlR3JvdXBMYXVuY2giLCJ3b3Jrc3BhY2VHcm91cENsZWFudXAiLCJ3b3Jrc3BhY2VUb0xhdW5jaCIsIndvcmtzcGFjZUdyb3VwIiwiX3dvcmtzcGFjZVRvTGF1bmNoX2FkZGl0aW9uYWxQcm9wcyIsImxhdW5jaFdvcmtzcGFjZSIsInByb21wdEJlZm9yZUxhdW5jaGluZ1dvcmtzcGFjZSIsIm5ld1dvcmtzcGFjZURldGFpbHMiLCJhZGRpdGlvbmFsUHJvcHMiLCJuZXdXb3Jrc3BhY2VSZWdpc3RyYXRpb24iLCJwcm9jZWVkIiwiY2xvc2VXb3Jrc3BhY2UiLCJvbldvcmtzcGFjZUNsb3NlIiwiX3dvcmtzcGFjZV90aXRsZSIsInNob3dXb3Jrc3BhY2VQcm9tcHRzIiwiX2N1cnJlbnRXb3Jrc3BhY2VHcm91cF9tZW1iZXJzIiwiX3N0b3JlX2dldFN0YXRlX3dvcmtzcGFjZUdyb3VwIiwibmV3V29ya3NwYWNlIiwiZ2V0V29ya3NwYWNlVGl0bGUiLCJjbG9zZVdvcmtzcGFjZTEiLCJvcHRpb25zIiwiY2xvc2VXb3Jrc3BhY2VXaXRoU2F2ZWRDaGFuZ2VzIiwicHJvbXB0QmVmb3JlQ2xvc2luZzEiLCJ0ZXN0RmNuIiwicHJvbXB0QmVmb3JlQ2xvc2luZyIsInNldFRpdGxlIiwidGl0bGUiLCJ0aXRsZU5vZGUiLCJvcGVuV29ya3NwYWNlcyIsInciLCJ1cGRhdGVTdG9yZVdpdGhOZXdXb3Jrc3BhY2UiLCJ3b3Jrc3BhY2VUb0JlQWRkZWQiLCJyZXN0T2ZUaGVXb3Jrc3BhY2VzIiwid29ya3NwYWNlV2luZG93U3RhdGUiLCJnZXRVcGRhdGVkV29ya3NwYWNlV2luZG93U3RhdGUiLCJ3b3Jrc3BhY2VJbmRleEluT3BlbldvcmtzcGFjZXMiLCJpc1dvcmtzcGFjZUFscmVhZHlPcGVuIiwib3BlbmVkV29ya3NwYWNlV2l0aFNhbWVUeXBlIiwib3BlbldvcmtzcGFjZSIsInVwZGF0ZWRXb3Jrc3BhY2UiLCJyZXN0T2ZUaGVXb3Jrc3BhY2VzMSIsIm5hdmlnYXRlQW5kTGF1bmNoV29ya3NwYWNlIiwicGFyYW0iLCJ0YXJnZXRVcmwiLCJjb250ZXh0S2V5Iiwid29ya3NwYWNlTmFtZSIsImNoYW5nZVdvcmtzcGFjZUNvbnRleHQiLCJwcm9tcHRCZWZvcmVDbG9zaW5nRmNucyIsImNhbmNlbFByb21wdCIsImRlZmF1bHRPcHRpb25zIiwidXBkYXRlU3RvcmVXaXRoQ2xvc2VkV29ya3NwYWNlIiwid29ya3NwYWNlVG9CZUNsb3NlZCIsIm5ld09wZW5Xb3Jrc3BhY2VzIiwid29ya3NwYWNlR3JvdXBOYW1lIiwiX2dldFdvcmtzcGFjZVJlZ2lzdHJhdGlvbl90aXRsZSIsImN1cnJlbnROYW1lIiwiaW5pdGlhbFN0YXRlIiwid29ya3NwYWNlU3RvcmUiLCJ1cGRhdGVXb3Jrc3BhY2VXaW5kb3dTdGF0ZSIsInZhbHVlIiwid29ya3NwYWNlQXRUb3AiLCJvbkNsb3NpbmdXb3Jrc3BhY2VzIiwiY2FuQ2xvc2VBbGxXb3Jrc3BhY2VzIiwidXBkYXRlV29ya3NwYWNlU3RvcmUiLCJyZXNldFdvcmtzcGFjZVN0b3JlIiwidXNlV29ya3NwYWNlcyIsIl91c2VTdG9yZSIsInByb21wdCIsIm1lbW9pc2VkUmVzdWx0cyIsInByb21wdFR5cGUiLCJvbkNvbmZpcm1hdGlvbiIsIndvcmtzcGFjZVRpdGxlIiwib25Db25maXJtIiwid29ya3NwYWNlc05vdENsb3NlZCIsImluZHgiLCJjb25zb2xlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdDQUFnQyxHQUFtQztBQUMrQjtBQUMvQztBQUNvQjtBQUNSO0FBQ1g7QUFDcEQ7Ozs7O0NBS0MsR0FBVSxTQUFTUSxrQ0FBa0NDLElBQUk7UUFBRUMsZ0JB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\n//# sourceURL=webpack-internal:///../../framework/esm-styleguide/dist/workspaces/workspaces.js\n\n}");
|
|
1959
1959
|
|
|
1960
1960
|
},
|
|
1961
1961
|
"../../framework/esm-styleguide/dist/workspaces2/action-menu2/action-menu-button2.component.js"(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|