@openmrs/esm-app-shell 5.3.2-pre.1214 → 5.3.2-pre.1219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/.turbo/turbo-build.log +98 -99
  2. package/dist/b66a463116735f62.js +1 -0
  3. package/dist/b66a463116735f62.js.map +1 -0
  4. package/dist/fca8d09359d3b887.js +1 -0
  5. package/dist/{25018673bc6f380f.js.map → fca8d09359d3b887.js.map} +1 -1
  6. package/dist/index.html +1 -1
  7. package/dist/openmrs.711bca70c87dec48.js +2 -0
  8. package/dist/openmrs.711bca70c87dec48.js.map +1 -0
  9. package/dist/service-worker.js +1 -1
  10. package/dist/service-worker.js.map +1 -1
  11. package/lib/{57bf7b27114b3f54.js → 49af280eabf5f1f5.js} +1 -51
  12. package/lib/esm-devtools-app/889.js +1 -1
  13. package/lib/esm-devtools-app/main.js +1 -1
  14. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
  15. package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +3 -3
  16. package/lib/esm-devtools-app/routes.json +1 -1
  17. package/lib/esm-implementer-tools-app/426.js +1 -1
  18. package/lib/esm-implementer-tools-app/560.js +1 -1
  19. package/lib/esm-implementer-tools-app/587.js +1 -1
  20. package/lib/esm-implementer-tools-app/651.js +1 -0
  21. package/lib/esm-implementer-tools-app/651.js.map +1 -0
  22. package/lib/esm-implementer-tools-app/727.js +1 -1
  23. package/lib/esm-implementer-tools-app/738.js +1 -0
  24. package/lib/esm-implementer-tools-app/738.js.map +1 -0
  25. package/lib/esm-implementer-tools-app/79.js +2 -0
  26. package/lib/esm-implementer-tools-app/79.js.map +1 -0
  27. package/lib/esm-implementer-tools-app/889.js +1 -1
  28. package/lib/esm-implementer-tools-app/main.js +1 -1
  29. package/lib/esm-implementer-tools-app/main.js.map +1 -1
  30. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
  31. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +75 -54
  32. package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.map +1 -1
  33. package/lib/esm-implementer-tools-app/routes.json +1 -1
  34. package/lib/esm-login-app/729.js +1 -0
  35. package/lib/esm-login-app/729.js.map +1 -0
  36. package/lib/esm-login-app/889.js +1 -1
  37. package/lib/esm-login-app/main.js +1 -1
  38. package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
  39. package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +31 -31
  40. package/lib/esm-login-app/routes.json +1 -1
  41. package/lib/esm-offline-tools-app/193.js +1 -1
  42. package/lib/esm-offline-tools-app/193.js.map +1 -1
  43. package/lib/esm-offline-tools-app/729.js +1 -0
  44. package/lib/esm-offline-tools-app/729.js.map +1 -0
  45. package/lib/esm-offline-tools-app/889.js +1 -1
  46. package/lib/esm-offline-tools-app/main.js +1 -1
  47. package/lib/esm-offline-tools-app/main.js.map +1 -1
  48. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
  49. package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +32 -32
  50. package/lib/esm-offline-tools-app/routes.json +1 -1
  51. package/lib/esm-primary-navigation-app/729.js +1 -0
  52. package/lib/esm-primary-navigation-app/729.js.map +1 -0
  53. package/lib/esm-primary-navigation-app/889.js +1 -1
  54. package/lib/esm-primary-navigation-app/main.js +1 -1
  55. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
  56. package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +31 -31
  57. package/lib/esm-primary-navigation-app/routes.json +1 -1
  58. package/lib/index.html +1 -1
  59. package/lib/openmrs.js +69 -102
  60. package/lib/service-worker.js +31 -9
  61. package/package.json +3 -3
  62. package/dist/25018673bc6f380f.js +0 -1
  63. package/dist/498a8af91d44612e.js +0 -1
  64. package/dist/498a8af91d44612e.js.map +0 -1
  65. package/dist/openmrs.78072d770743ee7e.js +0 -2
  66. package/dist/openmrs.78072d770743ee7e.js.map +0 -1
  67. package/lib/esm-implementer-tools-app/263.js +0 -1
  68. package/lib/esm-implementer-tools-app/263.js.map +0 -1
  69. package/lib/esm-implementer-tools-app/285.js +0 -2
  70. package/lib/esm-implementer-tools-app/285.js.map +0 -1
  71. package/lib/esm-login-app/263.js +0 -1
  72. package/lib/esm-login-app/263.js.map +0 -1
  73. package/lib/esm-offline-tools-app/263.js +0 -1
  74. package/lib/esm-offline-tools-app/263.js.map +0 -1
  75. package/lib/esm-primary-navigation-app/263.js +0 -1
  76. package/lib/esm-primary-navigation-app/263.js.map +0 -1
  77. /package/dist/{openmrs.78072d770743ee7e.js.LICENSE.txt → openmrs.711bca70c87dec48.js.LICENSE.txt} +0 -0
  78. /package/lib/esm-implementer-tools-app/{285.js.LICENSE.txt → 79.js.LICENSE.txt} +0 -0
package/lib/openmrs.js CHANGED
@@ -973,7 +973,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
973
973
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
974
974
 
975
975
  "use strict";
976
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModalBody: () => (/* binding */ ModalBody),\n/* harmony export */ \"default\": () => (/* binding */ ComposedModal)\n/* harmony export */ });\n/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../_virtual/_rollupPluginBabelHelpers.js */ \"../../../node_modules/@carbon/react/es/_virtual/_rollupPluginBabelHelpers.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ \"../../../node_modules/react-is/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _ModalHeader_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ModalHeader.js */ \"../../../node_modules/@carbon/react/es/components/ComposedModal/ModalHeader.js\");\n/* harmony import */ var _ModalFooter_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ModalFooter.js */ \"../../../node_modules/@carbon/react/es/components/ComposedModal/ModalFooter.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../tools/toggleClass.js */ \"../../../node_modules/@carbon/react/es/tools/toggleClass.js\");\n/* harmony import */ var _prop_types_requiredIfGivenPropIsTruthy_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../prop-types/requiredIfGivenPropIsTruthy.js */ \"../../../node_modules/@carbon/react/es/prop-types/requiredIfGivenPropIsTruthy.js\");\n/* harmony import */ var _internal_wrapFocus_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internal/wrapFocus.js */ \"../../../node_modules/@carbon/react/es/internal/wrapFocus.js\");\n/* harmony import */ var _internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internal/usePrefix.js */ \"../../../node_modules/@carbon/react/es/internal/usePrefix.js\");\n/* harmony import */ var _internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internal/keyboard/match.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/match.js\");\n/* harmony import */ var _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internal/keyboard/keys.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/keys.js\");\n/**\n * Copyright IBM Corp. 2016, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ModalBody = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function ModalBody(_ref, ref) {\n var customClassName = _ref.className, children = _ref.children, hasForm = _ref.hasForm, hasScrollingContent = _ref.hasScrollingContent, rest = _object_without_properties(_ref, [\n \"className\",\n \"children\",\n \"hasForm\",\n \"hasScrollingContent\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__.usePrefix)();\n var contentClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal-content\"), hasForm && \"\".concat(prefix, \"--modal-content--with-form\"), hasScrollingContent && \"\".concat(prefix, \"--modal-scroll-content\"), customClassName);\n var hasScrollingContentProps = hasScrollingContent ? {\n tabIndex: 0,\n role: \"region\"\n } : {};\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__[\"extends\"])({\n className: contentClass\n }, hasScrollingContentProps, rest, {\n ref: ref\n }), children), hasScrollingContent && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--modal-content--overflow-indicator\")\n }));\n});\nvar _obj;\nModalBody.propTypes = (_obj = {}, /**\n * Required props for the accessibility label of the header\n */ // @ts-expect-error: Built-in prop-types > TS logic doesn't jive well with custom validators\n_define_property(_obj, \"aria-label\", (0,_prop_types_requiredIfGivenPropIsTruthy_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"hasScrollingContent\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string))), /**\n * Specify the content to be placed in the ModalBody\n */ _define_property(_obj, \"children\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node)), /**\n * Specify an optional className to be added to the Modal Body node\n */ _define_property(_obj, \"className\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Provide whether the modal content has a form element.\n * If `true` is used here, non-form child content should have `bx--modal-content__regular-content` class.\n */ _define_property(_obj, \"hasForm\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify whether the modal contains scrolling content\n */ _define_property(_obj, \"hasScrollingContent\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), _obj);\nvar ComposedModal = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function ComposedModal(_ref2, ref) {\n var handleKeyDown = function handleKeyDown(evt) {\n if ((0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_7__.match)(evt, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_8__.Escape)) {\n closeModal(evt);\n }\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(evt);\n };\n var handleMousedown = function handleMousedown(evt) {\n var _innerModal_current;\n var isInside = (_innerModal_current = innerModal.current) === null || _innerModal_current === void 0 ? void 0 : _innerModal_current.contains(evt.target);\n if (!isInside && !preventCloseOnClickOutside) {\n closeModal(evt);\n }\n };\n var handleBlur = function handleBlur(_ref3) {\n var oldActiveNode = _ref3.target, currentActiveNode = _ref3.relatedTarget;\n if (open && currentActiveNode && oldActiveNode && innerModal.current) {\n var bodyNode = innerModal.current;\n var startSentinelNode = startSentinel.current;\n var endSentinelNode = endSentinel.current;\n (0,_internal_wrapFocus_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])({\n bodyNode: bodyNode,\n startTrapNode: startSentinelNode,\n endTrapNode: endSentinelNode,\n currentActiveNode: currentActiveNode,\n oldActiveNode: oldActiveNode,\n selectorsFloatingMenus: selectorsFloatingMenus === null || selectorsFloatingMenus === void 0 ? void 0 : selectorsFloatingMenus.filter(Boolean)\n });\n }\n };\n var closeModal = function closeModal(evt) {\n if (!onClose || onClose(evt) !== false) {\n setIsOpen(false);\n }\n };\n var ariaLabelledBy = _ref2[\"aria-labelledby\"], ariaLabel = _ref2[\"aria-label\"], children = _ref2.children, customClassName = _ref2.className, containerClassName = _ref2.containerClassName, danger = _ref2.danger, isFullWidth = _ref2.isFullWidth, onClose = _ref2.onClose, onKeyDown = _ref2.onKeyDown, open = _ref2.open, preventCloseOnClickOutside = _ref2.preventCloseOnClickOutside, selectorPrimaryFocus = _ref2.selectorPrimaryFocus, selectorsFloatingMenus = _ref2.selectorsFloatingMenus, size = _ref2.size, launcherButtonRef = _ref2.launcherButtonRef, rest = _object_without_properties(_ref2, [\n \"aria-labelledby\",\n \"aria-label\",\n \"children\",\n \"className\",\n \"containerClassName\",\n \"danger\",\n \"isFullWidth\",\n \"onClose\",\n \"onKeyDown\",\n \"open\",\n \"preventCloseOnClickOutside\",\n \"selectorPrimaryFocus\",\n \"selectorsFloatingMenus\",\n \"size\",\n \"launcherButtonRef\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__.usePrefix)();\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!open), 2), isOpen = _useState[0], setIsOpen = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!open), 2), wasOpen = _useState1[0], setWasOpen = _useState1[1];\n var innerModal = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var button = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var startSentinel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var endSentinel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n // Kepp track of modal open/close state\n // and propagate it to the document.body\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (open !== wasOpen) {\n setIsOpen(!!open);\n setWasOpen(!!open);\n (0,_tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(document.body, \"\".concat(prefix, \"--body--with-modal-open\"), !!open);\n }\n }, [\n open,\n wasOpen,\n prefix\n ]);\n // Remove the document.body className on unmount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return function() {\n (0,_tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(document.body, \"\".concat(prefix, \"--body--with-modal-open\"), false);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n var modalClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal\"), isOpen && \"is-visible\", danger && \"\".concat(prefix, \"--modal--danger\"), customClassName);\n var containerClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal-container\"), size && \"\".concat(prefix, \"--modal-container--\").concat(size), isFullWidth && \"\".concat(prefix, \"--modal-container--full-width\"), containerClassName);\n // Generate aria-label based on Modal Header label if one is not provided (L253)\n var generatedAriaLabel;\n var childrenWithProps = react__WEBPACK_IMPORTED_MODULE_0___default().Children.toArray(children).map(function(child) {\n switch(true){\n case (0,react_is__WEBPACK_IMPORTED_MODULE_1__.isElement)(child) && child.type === react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ModalHeader_js__WEBPACK_IMPORTED_MODULE_11__.ModalHeader).type:\n {\n var el = child;\n generatedAriaLabel = el.props.label;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(el, {\n closeModal: closeModal\n });\n }\n case (0,react_is__WEBPACK_IMPORTED_MODULE_1__.isElement)(child) && child.type === react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ModalFooter_js__WEBPACK_IMPORTED_MODULE_12__.ModalFooter).type:\n {\n var el1 = child;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(el1, {\n closeModal: closeModal,\n inputref: button\n });\n }\n default:\n return child;\n }\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (!open && launcherButtonRef) {\n setTimeout(function() {\n var _launcherButtonRef_current;\n launcherButtonRef === null || launcherButtonRef === void 0 ? void 0 : (_launcherButtonRef_current = launcherButtonRef.current) === null || _launcherButtonRef_current === void 0 ? void 0 : _launcherButtonRef_current.focus();\n });\n }\n }, [\n open,\n launcherButtonRef\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n var initialFocus = function(focusContainerElement) {\n var containerElement = focusContainerElement || innerModal.current;\n var primaryFocusElement = containerElement ? containerElement.querySelector(selectorPrimaryFocus) : null;\n if (primaryFocusElement) {\n return primaryFocusElement;\n }\n return button && button.current;\n };\n var focusButton = function(focusContainerElement) {\n var target = initialFocus(focusContainerElement);\n if (target) {\n target.focus();\n }\n };\n if (open && isOpen) {\n focusButton(innerModal.current);\n }\n }, [\n open,\n selectorPrimaryFocus,\n isOpen\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__[\"extends\"])({}, rest, {\n role: \"presentation\",\n ref: ref,\n \"aria-hidden\": !open,\n onBlur: handleBlur,\n onMouseDown: handleMousedown,\n onKeyDown: handleKeyDown,\n className: modalClass\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: containerClass,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": ariaLabel ? ariaLabel : generatedAriaLabel,\n \"aria-labelledby\": ariaLabelledBy\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n ref: startSentinel,\n className: \"\".concat(prefix, \"--visually-hidden\")\n }, \"Focus sentinel\"), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: innerModal,\n className: \"\".concat(prefix, \"--modal-container-body\")\n }, childrenWithProps), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n ref: endSentinel,\n className: \"\".concat(prefix, \"--visually-hidden\")\n }, \"Focus sentinel\")));\n});\nvar _obj1;\nComposedModal.propTypes = (_obj1 = {}, /**\n * Specify the aria-label for bx--modal-container\n */ _define_property(_obj1, \"aria-label\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the aria-labelledby for bx--modal-container\n */ _define_property(_obj1, \"aria-labelledby\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the content to be placed in the ComposedModal\n */ _define_property(_obj1, \"children\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node)), /**\n * Specify an optional className to be applied to the modal root node\n */ _define_property(_obj1, \"className\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify an optional className to be applied to the modal node\n */ _define_property(_obj1, \"containerClassName\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify whether the primary button should be replaced with danger button.\n * Note that this prop is not applied if you render primary/danger button by yourself\n */ _define_property(_obj1, \"danger\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify whether the Modal content should have any inner padding.\n */ _define_property(_obj1, \"isFullWidth\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Provide a ref to return focus to once the modal is closed.\n */ // @ts-expect-error: Invalid derived type\n_define_property(_obj1, \"launcherButtonRef\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func),\n prop_types__WEBPACK_IMPORTED_MODULE_6___default().shape({\n current: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().any)\n })\n])), /**\n * Specify an optional handler for closing modal.\n * Returning `false` here prevents closing modal.\n */ _define_property(_obj1, \"onClose\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)), /**\n * Specify an optional handler for the `onKeyDown` event. Called for all\n * `onKeyDown` events that do not close the modal\n */ _define_property(_obj1, \"onKeyDown\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)), /**\n * Specify whether the Modal is currently open\n */ _define_property(_obj1, \"open\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), _define_property(_obj1, \"preventCloseOnClickOutside\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify a CSS selector that matches the DOM element that should be\n * focused when the Modal opens\n */ _define_property(_obj1, \"selectorPrimaryFocus\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the CSS selectors that match the floating menus\n */ _define_property(_obj1, \"selectorsFloatingMenus\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().string))), /**\n * Specify the size variant.\n */ _define_property(_obj1, \"size\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOf([\n \"xs\",\n \"sm\",\n \"md\",\n \"lg\"\n])), _obj1);\nComposedModal.defaultProps = {\n selectorPrimaryFocus: \"[data-modal-primary-focus]\"\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9Db21wb3NlZE1vZGFsL0NvbXBvc2VkTW9kYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0NBS0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWlGO0FBQ2Q7QUFDL0I7QUFDRjtBQUNZO0FBQ0E7QUFDbkI7QUFDeUI7QUFDcUM7QUFDdEM7QUFDSTtBQUNDO0FBQ0E7QUFFekQsSUFBTWlCLFlBQVksV0FBVyxHQUFFZix1REFBeUIsQ0FBQyxTQUFTZSxVQUFVRSxJQUFJLEVBQUVDLEdBQUcsRUFBRTtJQUNyRixJQUNFQyxrQkFLRUYsS0FMRkUsV0FDQUUsV0FJRUosS0FKRkksVUFDQUMsVUFHRUwsS0FIRkssU0FDQUMsc0JBRUVOLEtBRkZNLHFCQUNHQyxrQ0FDRFA7UUFMRkU7UUFDQUU7UUFDQUM7UUFDQUM7O0lBR0YsSUFBTUUsU0FBU2IsaUVBQVNBO0lBQ3hCLElBQU1jLGVBQWVsQixpREFBRUEsQ0FBQyxHQUFVLE9BQVBpQixRQUFPLG9CQUFrQkgsV0FBVyxHQUFVLE9BQVBHLFFBQU8sK0JBQTZCRix1QkFBdUIsR0FBVSxPQUFQRSxRQUFPLDJCQUF5Qkw7SUFDaEssSUFBTU8sMkJBQTJCSixzQkFBc0I7UUFDckRLLFVBQVU7UUFDVkMsTUFBTTtJQUNSLElBQUksQ0FBQyxDQUFDO0lBQ04sT0FBTyxXQUFXLEdBQUU3QiwwREFBNEIsQ0FBQ0EsdURBQXVCLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRUEsMERBQTRCLENBQUMsT0FBT0QsZ0ZBQVFBLENBQUM7UUFDeElvQixXQUFXTztJQUNiLEdBQUdDLDBCQUEwQkgsTUFBTTtRQUNqQ04sS0FBS0E7SUFDUCxJQUFJRyxXQUFXRSx1QkFBdUIsV0FBVyxHQUFFdkIsMERBQTRC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L2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9Db21wb3NlZE1vZGFsL0NvbXBvc2VkTW9kYWwuanM/NThlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxNiwgMjAyM1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZS0yLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pbXBvcnQgeyBleHRlbmRzIGFzIF9leHRlbmRzIH0gZnJvbSAnLi4vLi4vX3ZpcnR1YWwvX3JvbGx1cFBsdWdpbkJhYmVsSGVscGVycy5qcyc7XG5pbXBvcnQgUmVhY3RfX2RlZmF1bHQsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IE1vZGFsSGVhZGVyIH0gZnJvbSAnLi9Nb2RhbEhlYWRlci5qcyc7XG5pbXBvcnQgeyBNb2RhbEZvb3RlciB9IGZyb20gJy4vTW9kYWxGb290ZXIuanMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHRvZ2dsZUNsYXNzIGZyb20gJy4uLy4uL3Rvb2xzL3RvZ2dsZUNsYXNzLmpzJztcbmltcG9ydCByZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkgZnJvbSAnLi4vLi4vcHJvcC10eXBlcy9yZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkuanMnO1xuaW1wb3J0IHdyYXBGb2N1cyBmcm9tICcuLi8uLi9pbnRlcm5hbC93cmFwRm9jdXMuanMnO1xuaW1wb3J0IHsgdXNlUHJlZml4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlUHJlZml4LmpzJztcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwva2V5Ym9hcmQvbWF0Y2guanMnO1xuaW1wb3J0IHsgRXNjYXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwva2V5Ym9hcmQva2V5cy5qcyc7XG5cbmNvbnN0IE1vZGFsQm9keSA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsQm9keShfcmVmLCByZWYpIHtcbiAgbGV0IHtcbiAgICBjbGFzc05hbWU6IGN1c3RvbUNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBoYXNGb3JtLFxuICAgIGhhc1Njcm9sbGluZ0NvbnRlbnQsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjtcbiAgY29uc3QgcHJlZml4ID0gdXNlUHJlZml4KCk7XG4gIGNvbnN0IGNvbnRlbnRDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsLWNvbnRlbnRgLCBoYXNGb3JtICYmIGAke3ByZWZpeH0tLW1vZGFsLWNvbnRlbnQtLXdpdGgtZm9ybWAsIGhhc1Njcm9sbGluZ0NvbnRlbnQgJiYgYCR7cHJlZml4fS0tbW9kYWwtc2Nyb2xsLWNvbnRlbnRgLCBjdXN0b21DbGFzc05hbWUpO1xuICBjb25zdCBoYXNTY3JvbGxpbmdDb250ZW50UHJvcHMgPSBoYXNTY3JvbGxpbmdDb250ZW50ID8ge1xuICAgIHRhYkluZGV4OiAwLFxuICAgIHJvbGU6ICdyZWdpb24nXG4gIH0gOiB7fTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NcbiAgfSwgaGFzU2Nyb2xsaW5nQ29udGVudFByb3BzLCByZXN0LCB7XG4gICAgcmVmOiByZWZcbiAgfSksIGNoaWxkcmVuKSwgaGFzU2Nyb2xsaW5nQ29udGVudCAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LS1tb2RhbC1jb250ZW50LS1vdmVyZmxvdy1pbmRpY2F0b3JgXG4gIH0pKTtcbn0pO1xuTW9kYWxCb2R5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIHByb3BzIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBsYWJlbCBvZiB0aGUgaGVhZGVyXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBCdWlsdC1pbiBwcm9wLXR5cGVzID4gVFMgbG9naWMgZG9lc24ndCBqaXZlIHdlbGwgd2l0aCBjdXN0b20gdmFsaWRhdG9yc1xuICBbJ2FyaWEtbGFiZWwnXTogcmVxdWlyZWRJZkdpdmVuUHJvcElzVHJ1dGh5KCdoYXNTY3JvbGxpbmdDb250ZW50JywgUHJvcFR5cGVzLnN0cmluZyksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBjb250ZW50IHRvIGJlIHBsYWNlZCBpbiB0aGUgTW9kYWxCb2R5XG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB0aGUgTW9kYWwgQm9keSBub2RlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm92aWRlIHdoZXRoZXIgdGhlIG1vZGFsIGNvbnRlbnQgaGFzIGEgZm9ybSBlbGVtZW50LlxuICAgKiBJZiBgdHJ1ZWAgaXMgdXNlZCBoZXJlLCBub24tZm9ybSBjaGlsZCBjb250ZW50IHNob3VsZCBoYXZlIGBieC0tbW9kYWwtY29udGVudF9fcmVndWxhci1jb250ZW50YCBjbGFzcy5cbiAgICovXG4gIGhhc0Zvcm06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBtb2RhbCBjb250YWlucyBzY3JvbGxpbmcgY29udGVudFxuICAgKi9cbiAgaGFzU2Nyb2xsaW5nQ29udGVudDogUHJvcFR5cGVzLmJvb2xcbn07XG5jb25zdCBDb21wb3NlZE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ29tcG9zZWRNb2RhbChfcmVmMiwgcmVmKSB7XG4gIGxldCB7XG4gICAgWydhcmlhLWxhYmVsbGVkYnknXTogYXJpYUxhYmVsbGVkQnksXG4gICAgWydhcmlhLWxhYmVsJ106IGFyaWFMYWJlbCxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWU6IGN1c3RvbUNsYXNzTmFtZSxcbiAgICBjb250YWluZXJDbGFzc05hbWUsXG4gICAgZGFuZ2VyLFxuICAgIGlzRnVsbFdpZHRoLFxuICAgIG9uQ2xvc2UsXG4gICAgb25LZXlEb3duLFxuICAgIG9wZW4sXG4gICAgcHJldmVudENsb3NlT25DbGlja091dHNpZGUsXG4gICAgc2VsZWN0b3JQcmltYXJ5Rm9jdXMsXG4gICAgc2VsZWN0b3JzRmxvYXRpbmdNZW51cyxcbiAgICBzaXplLFxuICAgIGxhdW5jaGVyQnV0dG9uUmVmLFxuICAgIC4uLnJlc3RcbiAgfSA9IF9yZWYyO1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKCEhb3Blbik7XG4gIGNvbnN0IFt3YXNPcGVuLCBzZXRXYXNPcGVuXSA9IHVzZVN0YXRlKCEhb3Blbik7XG4gIGNvbnN0IGlubmVyTW9kYWwgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGJ1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRTZW50aW5lbCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZW5kU2VudGluZWwgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gS2VwcCB0cmFjayBvZiBtb2RhbCBvcGVuL2Nsb3NlIHN0YXRlXG4gIC8vIGFuZCBwcm9wYWdhdGUgaXQgdG8gdGhlIGRvY3VtZW50LmJvZHlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbiAhPT0gd2FzT3Blbikge1xuICAgICAgc2V0SXNPcGVuKCEhb3Blbik7XG4gICAgICBzZXRXYXNPcGVuKCEhb3Blbik7XG4gICAgICB0b2dnbGVDbGFzcyhkb2N1bWVudC5ib2R5LCBgJHtwcmVmaXh9LS1ib2R5LS13aXRoLW1vZGFsLW9wZW5gLCAhIW9wZW4pO1xuICAgIH1cbiAgfSwgW29wZW4sIHdhc09wZW4sIHByZWZpeF0pO1xuICAvLyBSZW1vdmUgdGhlIGRvY3VtZW50LmJvZHkgY2xhc3NOYW1lIG9uIHVubW91bnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdG9nZ2xlQ2xhc3MoZG9jdW1lbnQuYm9keSwgYCR7cHJlZml4fS0tYm9keS0td2l0aC1tb2RhbC1vcGVuYCwgZmFsc2UpO1xuICAgIH07XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2dCkge1xuICAgIGlmIChtYXRjaChldnQsIEVzY2FwZSkpIHtcbiAgICAgIGNsb3NlTW9kYWwoZXZ0KTtcbiAgICB9XG4gICAgb25LZXlEb3duPy4oZXZ0KTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVNb3VzZWRvd24oZXZ0KSB7XG4gICAgY29uc3QgaXNJbnNpZGUgPSBpbm5lck1vZGFsLmN1cnJlbnQ/LmNvbnRhaW5zKGV2dC50YXJnZXQpO1xuICAgIGlmICghaXNJbnNpZGUgJiYgIXByZXZlbnRDbG9zZU9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICBjbG9zZU1vZGFsKGV2dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXIoX3JlZjMpIHtcbiAgICBsZXQge1xuICAgICAgdGFyZ2V0OiBvbGRBY3RpdmVOb2RlLFxuICAgICAgcmVsYXRlZFRhcmdldDogY3VycmVudEFjdGl2ZU5vZGVcbiAgICB9ID0gX3JlZjM7XG4gICAgaWYgKG9wZW4gJiYgY3VycmVudEFjdGl2ZU5vZGUgJiYgb2xkQWN0aXZlTm9kZSAmJiBpbm5lck1vZGFsLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudDogYm9keU5vZGVcbiAgICAgIH0gPSBpbm5lck1vZGFsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiBzdGFydFNlbnRpbmVsTm9kZVxuICAgICAgfSA9IHN0YXJ0U2VudGluZWw7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnQ6IGVuZFNlbnRpbmVsTm9kZVxuICAgICAgfSA9IGVuZFNlbnRpbmVsO1xuICAgICAgd3JhcEZvY3VzKHtcbiAgICAgICAgYm9keU5vZGUsXG4gICAgICAgIHN0YXJ0VHJhcE5vZGU6IHN0YXJ0U2VudGluZWxOb2RlLFxuICAgICAgICBlbmRUcmFwTm9kZTogZW5kU2VudGluZWxOb2RlLFxuICAgICAgICBjdXJyZW50QWN0aXZlTm9kZSxcbiAgICAgICAgb2xkQWN0aXZlTm9kZSxcbiAgICAgICAgc2VsZWN0b3JzRmxvYXRpbmdNZW51czogc2VsZWN0b3JzRmxvYXRpbmdNZW51cz8uZmlsdGVyKEJvb2xlYW4pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VNb2RhbChldnQpIHtcbiAgICBpZiAoIW9uQ2xvc2UgfHwgb25DbG9zZShldnQpICE9PSBmYWxzZSkge1xuICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kYWxDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsYCwgaXNPcGVuICYmICdpcy12aXNpYmxlJywgZGFuZ2VyICYmIGAke3ByZWZpeH0tLW1vZGFsLS1kYW5nZXJgLCBjdXN0b21DbGFzc05hbWUpO1xuICBjb25zdCBjb250YWluZXJDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsLWNvbnRhaW5lcmAsIHNpemUgJiYgYCR7cHJlZml4fS0tbW9kYWwtY29udGFpbmVyLS0ke3NpemV9YCwgaXNGdWxsV2lkdGggJiYgYCR7cHJlZml4fS0tbW9kYWwtY29udGFpbmVyLS1mdWxsLXdpZHRoYCwgY29udGFpbmVyQ2xhc3NOYW1lKTtcblxuICAvLyBHZW5lcmF0ZSBhcmlhLWxhYmVsIGJhc2VkIG9uIE1vZGFsIEhlYWRlciBsYWJlbCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkIChMMjUzKVxuICBsZXQgZ2VuZXJhdGVkQXJpYUxhYmVsO1xuICBjb25zdCBjaGlsZHJlbldpdGhQcm9wcyA9IFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLm1hcChjaGlsZCA9PiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGlzRWxlbWVudChjaGlsZCkgJiYgY2hpbGQudHlwZSA9PT0gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChNb2RhbEhlYWRlcikudHlwZTpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGVsID0gY2hpbGQ7XG4gICAgICAgICAgZ2VuZXJhdGVkQXJpYUxhYmVsID0gZWwucHJvcHMubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jbG9uZUVsZW1lbnQoZWwsIHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBpc0VsZW1lbnQoY2hpbGQpICYmIGNoaWxkLnR5cGUgPT09IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTW9kYWxGb290ZXIpLnR5cGU6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBlbCA9IGNoaWxkO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY2xvbmVFbGVtZW50KGVsLCB7XG4gICAgICAgICAgICBjbG9zZU1vZGFsLFxuICAgICAgICAgICAgaW5wdXRyZWY6IGJ1dHRvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gJiYgbGF1bmNoZXJCdXR0b25SZWYpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsYXVuY2hlckJ1dHRvblJlZj8uY3VycmVudD8uZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW29wZW4sIGxhdW5jaGVyQnV0dG9uUmVmXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbEZvY3VzID0gZm9jdXNDb250YWluZXJFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBmb2N1c0NvbnRhaW5lckVsZW1lbnQgfHwgaW5uZXJNb2RhbC5jdXJyZW50O1xuICAgICAgY29uc3QgcHJpbWFyeUZvY3VzRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQgPyBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JQcmltYXJ5Rm9jdXMpIDogbnVsbDtcbiAgICAgIGlmIChwcmltYXJ5Rm9jdXNFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBwcmltYXJ5Rm9jdXNFbGVtZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1dHRvbiAmJiBidXR0b24uY3VycmVudDtcbiAgICB9O1xuICAgIGNvbnN0IGZvY3VzQnV0dG9uID0gZm9jdXNDb250YWluZXJFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGluaXRpYWxGb2N1cyhmb2N1c0NvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChvcGVuICYmIGlzT3Blbikge1xuICAgICAgZm9jdXNCdXR0b24oaW5uZXJNb2RhbC5jdXJyZW50KTtcbiAgICB9XG4gIH0sIFtvcGVuLCBzZWxlY3RvclByaW1hcnlGb2N1cywgaXNPcGVuXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgcmVmOiByZWYsXG4gICAgXCJhcmlhLWhpZGRlblwiOiAhb3BlbixcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlZG93bixcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgY2xhc3NOYW1lOiBtb2RhbENsYXNzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250YWluZXJDbGFzcyxcbiAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgIFwiYXJpYS1tb2RhbFwiOiBcInRydWVcIixcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogZ2VuZXJhdGVkQXJpYUxhYmVsLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZEJ5XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHJlZjogc3RhcnRTZW50aW5lbCxcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXZpc3VhbGx5LWhpZGRlbmBcbiAgfSwgXCJGb2N1cyBzZW50aW5lbFwiKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogaW5uZXJNb2RhbCxcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLW1vZGFsLWNvbnRhaW5lci1ib2R5YFxuICB9LCBjaGlsZHJlbldpdGhQcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHJlZjogZW5kU2VudGluZWwsXG4gICAgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LS12aXN1YWxseS1oaWRkZW5gXG4gIH0sIFwiRm9jdXMgc2VudGluZWxcIikpKTtcbn0pO1xuQ29tcG9zZWRNb2RhbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBhcmlhLWxhYmVsIGZvciBieC0tbW9kYWwtY29udGFpbmVyXG4gICAqL1xuICBbJ2FyaWEtbGFiZWwnXTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGFyaWEtbGFiZWxsZWRieSBmb3IgYngtLW1vZGFsLWNvbnRhaW5lclxuICAgKi9cbiAgWydhcmlhLWxhYmVsbGVkYnknXTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGNvbnRlbnQgdG8gYmUgcGxhY2VkIGluIHRoZSBDb21wb3NlZE1vZGFsXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBtb2RhbCByb290IG5vZGVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgYW4gb3B0aW9uYWwgY2xhc3NOYW1lIHRvIGJlIGFwcGxpZWQgdG8gdGhlIG1vZGFsIG5vZGVcbiAgICovXG4gIGNvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgcHJpbWFyeSBidXR0b24gc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggZGFuZ2VyIGJ1dHRvbi5cbiAgICogTm90ZSB0aGF0IHRoaXMgcHJvcCBpcyBub3QgYXBwbGllZCBpZiB5b3UgcmVuZGVyIHByaW1hcnkvZGFuZ2VyIGJ1dHRvbiBieSB5b3Vyc2VsZlxuICAgKi9cbiAgZGFuZ2VyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgTW9kYWwgY29udGVudCBzaG91bGQgaGF2ZSBhbnkgaW5uZXIgcGFkZGluZy5cbiAgICovXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3ZpZGUgYSByZWYgdG8gcmV0dXJuIGZvY3VzIHRvIG9uY2UgdGhlIG1vZGFsIGlzIGNsb3NlZC5cbiAgICovXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IEludmFsaWQgZGVyaXZlZCB0eXBlXG4gIGxhdW5jaGVyQnV0dG9uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuYW55XG4gIH0pXSksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGhhbmRsZXIgZm9yIGNsb3NpbmcgbW9kYWwuXG4gICAqIFJldHVybmluZyBgZmFsc2VgIGhlcmUgcHJldmVudHMgY2xvc2luZyBtb2RhbC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBoYW5kbGVyIGZvciB0aGUgYG9uS2V5RG93bmAgZXZlbnQuIENhbGxlZCBmb3IgYWxsXG4gICAqIGBvbktleURvd25gIGV2ZW50cyB0aGF0IGRvIG5vdCBjbG9zZSB0aGUgbW9kYWxcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIE1vZGFsIGlzIGN1cnJlbnRseSBvcGVuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJldmVudENsb3NlT25DbGlja091dHNpZGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU3BlY2lmeSBhIENTUyBzZWxlY3RvciB0aGF0IG1hdGNoZXMgdGhlIERPTSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlXG4gICAqIGZvY3VzZWQgd2hlbiB0aGUgTW9kYWwgb3BlbnNcbiAgICovXG4gIHNlbGVjdG9yUHJpbWFyeUZvY3VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgQ1NTIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBmbG9hdGluZyBtZW51c1xuICAgKi9cbiAgc2VsZWN0b3JzRmxvYXRpbmdNZW51czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzaXplIHZhcmlhbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWyd4cycsICdzbScsICdtZCcsICdsZyddKVxufTtcbkNvbXBvc2VkTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBzZWxlY3RvclByaW1hcnlGb2N1czogJ1tkYXRhLW1vZGFsLXByaW1hcnktZm9jdXNdJ1xufTtcblxuZXhwb3J0IHsgTW9kYWxCb2R5LCBDb21wb3NlZE1vZGFsIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6WyJleHRlbmRzIiwiX2V4dGVuZHMiLCJSZWFjdF9fZGVmYXVsdCIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaXNFbGVtZW50IiwiUHJvcFR5cGVzIiwiTW9kYWxIZWFkZXIiLCJNb2RhbEZvb3RlciIsImN4IiwidG9nZ2xlQ2xhc3MiLCJyZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkiLCJ3cmFwRm9jdXMiLCJ1c2VQcmVmaXgiLCJtYXRjaCIsIkVzY2FwZSIsIk1vZGFsQm9keSIsImZvcndhcmRSZWYiLCJfcmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiY3VzdG9tQ2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJoYXNGb3JtIiwiaGFzU2Nyb2xsaW5nQ29udGVudCIsInJlc3QiLCJwcmVmaXgiLCJjb250ZW50Q2xhc3MiLCJoYXNTY3JvbGxpbmdDb250ZW50UHJvcHMiLCJ0YWJJbmRleCIsInJvbGUiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJub2RlIiwiYm9vbCIsIkNvbXBvc2VkTW9kYWwiLCJfcmVmMiIsImhhbmRsZUtleURvd24iLCJldnQiLCJjbG9zZU1vZGFsIiwib25LZXlEb3duIiwiaGFuZGxlTW91c2Vkb3duIiwiaW5uZXJNb2RhbCIsImlzSW5zaWRlIiwiY3VycmVudCIsImNvbnRhaW5zIiwidGFyZ2V0IiwicHJldmVudENsb3NlT25DbGlja091dHNpZGUiLCJoYW5kbGVCbHVyIiwiX3JlZjMiLCJvbGRBY3RpdmVOb2RlIiwicmVsYXRlZFRhcmdldCIsImN1cnJlbnRBY3RpdmVOb2RlIiwib3BlbiIsImJvZHlOb2RlIiwic3RhcnRTZW50aW5lbE5vZGUiLCJzdGFydFNlbnRpbmVsIiwiZW5kU2VudGluZWxOb2RlIiwiZW5kU2VudGluZWwiLCJzdGFydFRyYXBOb2RlIiwiZW5kVHJhcE5vZGUiLCJzZWxlY3RvcnNGbG9hdGluZ01lbnVzIiwiZmlsdGVyIiwiQm9vbGVhbiIsIm9uQ2xvc2UiLCJzZXRJc09wZW4iLCJhcmlhTGFiZWxsZWRCeSIsImFyaWFMYWJlbCIsImNvbnRhaW5lckNsYXNzTmFtZSIsImRhbmdlciIsImlzRnVsbFdpZHRoIiwic2VsZWN0b3JQcmltYXJ5Rm9jdXMiLCJzaXplIiwibGF1bmNoZXJCdXR0b25SZWYiLCJpc09wZW4iLCJ3YXNPcGVuIiwic2V0V2FzT3BlbiIsImJ1dHRvbiIsImRvY3VtZW50IiwiYm9keSIsIm1vZGFsQ2xhc3MiLCJjb250YWluZXJDbGFzcyIsImdlbmVyYXRlZEFyaWFMYWJlbCIsImNoaWxkcmVuV2l0aFByb3BzIiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwibWFwIiwiY2hpbGQiLCJ0eXBlIiwiZWwiLCJwcm9wcyIsImxhYmVsIiwiY2xvbmVFbGVtZW50IiwiaW5wdXRyZWYiLCJzZXRUaW1lb3V0IiwiZm9jdXMiLCJpbml0aWFsRm9jdXMiLCJmb2N1c0NvbnRhaW5lckVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwicHJpbWFyeUZvY3VzRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1c0J1dHRvbiIsIm9uQmx1ciIsIm9uTW91c2VEb3duIiwib25lT2ZUeXBlIiwiZnVuYyIsInNoYXBlIiwiYW55IiwiYXJyYXlPZiIsIm9uZU9mIiwiZGVmYXVsdFByb3BzIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/es/components/ComposedModal/ComposedModal.js\n");
976
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModalBody: () => (/* binding */ ModalBody),\n/* harmony export */ \"default\": () => (/* binding */ ComposedModal)\n/* harmony export */ });\n/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../_virtual/_rollupPluginBabelHelpers.js */ \"../../../node_modules/@carbon/react/es/_virtual/_rollupPluginBabelHelpers.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ \"../../../node_modules/@carbon/react/node_modules/react-is/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _ModalHeader_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ModalHeader.js */ \"../../../node_modules/@carbon/react/es/components/ComposedModal/ModalHeader.js\");\n/* harmony import */ var _ModalFooter_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ModalFooter.js */ \"../../../node_modules/@carbon/react/es/components/ComposedModal/ModalFooter.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../tools/toggleClass.js */ \"../../../node_modules/@carbon/react/es/tools/toggleClass.js\");\n/* harmony import */ var _prop_types_requiredIfGivenPropIsTruthy_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../prop-types/requiredIfGivenPropIsTruthy.js */ \"../../../node_modules/@carbon/react/es/prop-types/requiredIfGivenPropIsTruthy.js\");\n/* harmony import */ var _internal_wrapFocus_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internal/wrapFocus.js */ \"../../../node_modules/@carbon/react/es/internal/wrapFocus.js\");\n/* harmony import */ var _internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internal/usePrefix.js */ \"../../../node_modules/@carbon/react/es/internal/usePrefix.js\");\n/* harmony import */ var _internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internal/keyboard/match.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/match.js\");\n/* harmony import */ var _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internal/keyboard/keys.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/keys.js\");\n/**\n * Copyright IBM Corp. 2016, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ModalBody = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function ModalBody(_ref, ref) {\n var customClassName = _ref.className, children = _ref.children, hasForm = _ref.hasForm, hasScrollingContent = _ref.hasScrollingContent, rest = _object_without_properties(_ref, [\n \"className\",\n \"children\",\n \"hasForm\",\n \"hasScrollingContent\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__.usePrefix)();\n var contentClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal-content\"), hasForm && \"\".concat(prefix, \"--modal-content--with-form\"), hasScrollingContent && \"\".concat(prefix, \"--modal-scroll-content\"), customClassName);\n var hasScrollingContentProps = hasScrollingContent ? {\n tabIndex: 0,\n role: \"region\"\n } : {};\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__[\"extends\"])({\n className: contentClass\n }, hasScrollingContentProps, rest, {\n ref: ref\n }), children), hasScrollingContent && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--modal-content--overflow-indicator\")\n }));\n});\nvar _obj;\nModalBody.propTypes = (_obj = {}, /**\n * Required props for the accessibility label of the header\n */ // @ts-expect-error: Built-in prop-types > TS logic doesn't jive well with custom validators\n_define_property(_obj, \"aria-label\", (0,_prop_types_requiredIfGivenPropIsTruthy_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(\"hasScrollingContent\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string))), /**\n * Specify the content to be placed in the ModalBody\n */ _define_property(_obj, \"children\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node)), /**\n * Specify an optional className to be added to the Modal Body node\n */ _define_property(_obj, \"className\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Provide whether the modal content has a form element.\n * If `true` is used here, non-form child content should have `bx--modal-content__regular-content` class.\n */ _define_property(_obj, \"hasForm\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify whether the modal contains scrolling content\n */ _define_property(_obj, \"hasScrollingContent\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), _obj);\nvar ComposedModal = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function ComposedModal(_ref2, ref) {\n var handleKeyDown = function handleKeyDown(evt) {\n if ((0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_7__.match)(evt, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_8__.Escape)) {\n closeModal(evt);\n }\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(evt);\n };\n var handleMousedown = function handleMousedown(evt) {\n var _innerModal_current;\n var isInside = (_innerModal_current = innerModal.current) === null || _innerModal_current === void 0 ? void 0 : _innerModal_current.contains(evt.target);\n if (!isInside && !preventCloseOnClickOutside) {\n closeModal(evt);\n }\n };\n var handleBlur = function handleBlur(_ref3) {\n var oldActiveNode = _ref3.target, currentActiveNode = _ref3.relatedTarget;\n if (open && currentActiveNode && oldActiveNode && innerModal.current) {\n var bodyNode = innerModal.current;\n var startSentinelNode = startSentinel.current;\n var endSentinelNode = endSentinel.current;\n (0,_internal_wrapFocus_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])({\n bodyNode: bodyNode,\n startTrapNode: startSentinelNode,\n endTrapNode: endSentinelNode,\n currentActiveNode: currentActiveNode,\n oldActiveNode: oldActiveNode,\n selectorsFloatingMenus: selectorsFloatingMenus === null || selectorsFloatingMenus === void 0 ? void 0 : selectorsFloatingMenus.filter(Boolean)\n });\n }\n };\n var closeModal = function closeModal(evt) {\n if (!onClose || onClose(evt) !== false) {\n setIsOpen(false);\n }\n };\n var ariaLabelledBy = _ref2[\"aria-labelledby\"], ariaLabel = _ref2[\"aria-label\"], children = _ref2.children, customClassName = _ref2.className, containerClassName = _ref2.containerClassName, danger = _ref2.danger, isFullWidth = _ref2.isFullWidth, onClose = _ref2.onClose, onKeyDown = _ref2.onKeyDown, open = _ref2.open, preventCloseOnClickOutside = _ref2.preventCloseOnClickOutside, selectorPrimaryFocus = _ref2.selectorPrimaryFocus, selectorsFloatingMenus = _ref2.selectorsFloatingMenus, size = _ref2.size, launcherButtonRef = _ref2.launcherButtonRef, rest = _object_without_properties(_ref2, [\n \"aria-labelledby\",\n \"aria-label\",\n \"children\",\n \"className\",\n \"containerClassName\",\n \"danger\",\n \"isFullWidth\",\n \"onClose\",\n \"onKeyDown\",\n \"open\",\n \"preventCloseOnClickOutside\",\n \"selectorPrimaryFocus\",\n \"selectorsFloatingMenus\",\n \"size\",\n \"launcherButtonRef\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_3__.usePrefix)();\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!open), 2), isOpen = _useState[0], setIsOpen = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!!open), 2), wasOpen = _useState1[0], setWasOpen = _useState1[1];\n var innerModal = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var button = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var startSentinel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n var endSentinel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n // Kepp track of modal open/close state\n // and propagate it to the document.body\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (open !== wasOpen) {\n setIsOpen(!!open);\n setWasOpen(!!open);\n (0,_tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(document.body, \"\".concat(prefix, \"--body--with-modal-open\"), !!open);\n }\n }, [\n open,\n wasOpen,\n prefix\n ]);\n // Remove the document.body className on unmount\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n return function() {\n (0,_tools_toggleClass_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(document.body, \"\".concat(prefix, \"--body--with-modal-open\"), false);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n var modalClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal\"), isOpen && \"is-visible\", danger && \"\".concat(prefix, \"--modal--danger\"), customClassName);\n var containerClass = classnames__WEBPACK_IMPORTED_MODULE_2___default()(\"\".concat(prefix, \"--modal-container\"), size && \"\".concat(prefix, \"--modal-container--\").concat(size), isFullWidth && \"\".concat(prefix, \"--modal-container--full-width\"), containerClassName);\n // Generate aria-label based on Modal Header label if one is not provided (L253)\n var generatedAriaLabel;\n var childrenWithProps = react__WEBPACK_IMPORTED_MODULE_0___default().Children.toArray(children).map(function(child) {\n switch(true){\n case (0,react_is__WEBPACK_IMPORTED_MODULE_1__.isElement)(child) && child.type === react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ModalHeader_js__WEBPACK_IMPORTED_MODULE_11__.ModalHeader).type:\n {\n var el = child;\n generatedAriaLabel = el.props.label;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(el, {\n closeModal: closeModal\n });\n }\n case (0,react_is__WEBPACK_IMPORTED_MODULE_1__.isElement)(child) && child.type === react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ModalFooter_js__WEBPACK_IMPORTED_MODULE_12__.ModalFooter).type:\n {\n var el1 = child;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().cloneElement(el1, {\n closeModal: closeModal,\n inputref: button\n });\n }\n default:\n return child;\n }\n });\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n if (!open && launcherButtonRef) {\n setTimeout(function() {\n var _launcherButtonRef_current;\n launcherButtonRef === null || launcherButtonRef === void 0 ? void 0 : (_launcherButtonRef_current = launcherButtonRef.current) === null || _launcherButtonRef_current === void 0 ? void 0 : _launcherButtonRef_current.focus();\n });\n }\n }, [\n open,\n launcherButtonRef\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function() {\n var initialFocus = function(focusContainerElement) {\n var containerElement = focusContainerElement || innerModal.current;\n var primaryFocusElement = containerElement ? containerElement.querySelector(selectorPrimaryFocus) : null;\n if (primaryFocusElement) {\n return primaryFocusElement;\n }\n return button && button.current;\n };\n var focusButton = function(focusContainerElement) {\n var target = initialFocus(focusContainerElement);\n if (target) {\n target.focus();\n }\n };\n if (open && isOpen) {\n focusButton(innerModal.current);\n }\n }, [\n open,\n selectorPrimaryFocus,\n isOpen\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_4__[\"extends\"])({}, rest, {\n role: \"presentation\",\n ref: ref,\n \"aria-hidden\": !open,\n onBlur: handleBlur,\n onMouseDown: handleMousedown,\n onKeyDown: handleKeyDown,\n className: modalClass\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n className: containerClass,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": ariaLabel ? ariaLabel : generatedAriaLabel,\n \"aria-labelledby\": ariaLabelledBy\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n ref: startSentinel,\n className: \"\".concat(prefix, \"--visually-hidden\")\n }, \"Focus sentinel\"), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n ref: innerModal,\n className: \"\".concat(prefix, \"--modal-container-body\")\n }, childrenWithProps), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n type: \"button\",\n ref: endSentinel,\n className: \"\".concat(prefix, \"--visually-hidden\")\n }, \"Focus sentinel\")));\n});\nvar _obj1;\nComposedModal.propTypes = (_obj1 = {}, /**\n * Specify the aria-label for bx--modal-container\n */ _define_property(_obj1, \"aria-label\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the aria-labelledby for bx--modal-container\n */ _define_property(_obj1, \"aria-labelledby\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the content to be placed in the ComposedModal\n */ _define_property(_obj1, \"children\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().node)), /**\n * Specify an optional className to be applied to the modal root node\n */ _define_property(_obj1, \"className\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify an optional className to be applied to the modal node\n */ _define_property(_obj1, \"containerClassName\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify whether the primary button should be replaced with danger button.\n * Note that this prop is not applied if you render primary/danger button by yourself\n */ _define_property(_obj1, \"danger\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify whether the Modal content should have any inner padding.\n */ _define_property(_obj1, \"isFullWidth\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Provide a ref to return focus to once the modal is closed.\n */ // @ts-expect-error: Invalid derived type\n_define_property(_obj1, \"launcherButtonRef\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func),\n prop_types__WEBPACK_IMPORTED_MODULE_6___default().shape({\n current: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().any)\n })\n])), /**\n * Specify an optional handler for closing modal.\n * Returning `false` here prevents closing modal.\n */ _define_property(_obj1, \"onClose\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)), /**\n * Specify an optional handler for the `onKeyDown` event. Called for all\n * `onKeyDown` events that do not close the modal\n */ _define_property(_obj1, \"onKeyDown\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)), /**\n * Specify whether the Modal is currently open\n */ _define_property(_obj1, \"open\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), _define_property(_obj1, \"preventCloseOnClickOutside\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().bool)), /**\n * Specify a CSS selector that matches the DOM element that should be\n * focused when the Modal opens\n */ _define_property(_obj1, \"selectorPrimaryFocus\", (prop_types__WEBPACK_IMPORTED_MODULE_6___default().string)), /**\n * Specify the CSS selectors that match the floating menus\n */ _define_property(_obj1, \"selectorsFloatingMenus\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().string))), /**\n * Specify the size variant.\n */ _define_property(_obj1, \"size\", prop_types__WEBPACK_IMPORTED_MODULE_6___default().oneOf([\n \"xs\",\n \"sm\",\n \"md\",\n \"lg\"\n])), _obj1);\nComposedModal.defaultProps = {\n selectorPrimaryFocus: \"[data-modal-primary-focus]\"\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9Db21wb3NlZE1vZGFsL0NvbXBvc2VkTW9kYWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0NBS0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWlGO0FBQ2Q7QUFDL0I7QUFDRjtBQUNZO0FBQ0E7QUFDbkI7QUFDeUI7QUFDcUM7QUFDdEM7QUFDSTtBQUNDO0FBQ0E7QUFFekQsSUFBTWlCLFlBQVksV0FBVyxHQUFFZix1REFBeUIsQ0FBQyxTQUFTZSxVQUFVRSxJQUFJLEVBQUVDLEdBQUcsRUFBRTtJQUNyRixJQUNFQyxrQkFLRUYsS0FMRkUsV0FDQUUsV0FJRUosS0FKRkksVUFDQUMsVUFHRUwsS0FIRkssU0FDQUMsc0JBRUVOLEtBRkZNLHFCQUNHQyxrQ0FDRFA7UUFMRkU7UUFDQUU7UUFDQUM7UUFDQUM7O0lBR0YsSUFBTUUsU0FBU2IsaUVBQVNBO0lBQ3hCLElBQU1jLGVBQWVsQixpREFBRUEsQ0FBQyxHQUFVLE9BQVBpQixRQUFPLG9CQUFrQkgsV0FBVyxHQUFVLE9BQVBHLFFBQU8sK0JBQTZCRix1QkFBdUIsR0FBVSxPQUFQRSxRQUFPLDJCQUF5Qkw7SUFDaEssSUFBTU8sMkJBQTJCSixzQkFBc0I7UUFDckRLLFVBQVU7UUFDVkMsTUFBTTtJQUNSLElBQUksQ0FBQyxDQUFDO0lBQ04sT0FBTyxXQUFXLEdBQUU3QiwwREFBNEIsQ0FBQ0EsdURBQXVCLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRUEsMERBQTRCLENBQUMsT0FBT0QsZ0ZBQVFBLENBQUM7UUFDeElvQixXQUFXTztJQUNiLEdBQUdDLDBCQUEwQkgsTUFBTTtRQUNqQ04sS0FBS0E7SUFDUCxJQUFJRyxXQUFXRSx1QkFBdUIsV0FBVyxHQUFFdkIsMERBQTRC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L2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9Db21wb3NlZE1vZGFsL0NvbXBvc2VkTW9kYWwuanM/NThlYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxNiwgMjAyM1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZS0yLjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pbXBvcnQgeyBleHRlbmRzIGFzIF9leHRlbmRzIH0gZnJvbSAnLi4vLi4vX3ZpcnR1YWwvX3JvbGx1cFBsdWdpbkJhYmVsSGVscGVycy5qcyc7XG5pbXBvcnQgUmVhY3RfX2RlZmF1bHQsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IE1vZGFsSGVhZGVyIH0gZnJvbSAnLi9Nb2RhbEhlYWRlci5qcyc7XG5pbXBvcnQgeyBNb2RhbEZvb3RlciB9IGZyb20gJy4vTW9kYWxGb290ZXIuanMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHRvZ2dsZUNsYXNzIGZyb20gJy4uLy4uL3Rvb2xzL3RvZ2dsZUNsYXNzLmpzJztcbmltcG9ydCByZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkgZnJvbSAnLi4vLi4vcHJvcC10eXBlcy9yZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkuanMnO1xuaW1wb3J0IHdyYXBGb2N1cyBmcm9tICcuLi8uLi9pbnRlcm5hbC93cmFwRm9jdXMuanMnO1xuaW1wb3J0IHsgdXNlUHJlZml4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlUHJlZml4LmpzJztcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwva2V5Ym9hcmQvbWF0Y2guanMnO1xuaW1wb3J0IHsgRXNjYXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwva2V5Ym9hcmQva2V5cy5qcyc7XG5cbmNvbnN0IE1vZGFsQm9keSA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1vZGFsQm9keShfcmVmLCByZWYpIHtcbiAgbGV0IHtcbiAgICBjbGFzc05hbWU6IGN1c3RvbUNsYXNzTmFtZSxcbiAgICBjaGlsZHJlbixcbiAgICBoYXNGb3JtLFxuICAgIGhhc1Njcm9sbGluZ0NvbnRlbnQsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjtcbiAgY29uc3QgcHJlZml4ID0gdXNlUHJlZml4KCk7XG4gIGNvbnN0IGNvbnRlbnRDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsLWNvbnRlbnRgLCBoYXNGb3JtICYmIGAke3ByZWZpeH0tLW1vZGFsLWNvbnRlbnQtLXdpdGgtZm9ybWAsIGhhc1Njcm9sbGluZ0NvbnRlbnQgJiYgYCR7cHJlZml4fS0tbW9kYWwtc2Nyb2xsLWNvbnRlbnRgLCBjdXN0b21DbGFzc05hbWUpO1xuICBjb25zdCBoYXNTY3JvbGxpbmdDb250ZW50UHJvcHMgPSBoYXNTY3JvbGxpbmdDb250ZW50ID8ge1xuICAgIHRhYkluZGV4OiAwLFxuICAgIHJvbGU6ICdyZWdpb24nXG4gIH0gOiB7fTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0X19kZWZhdWx0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NcbiAgfSwgaGFzU2Nyb2xsaW5nQ29udGVudFByb3BzLCByZXN0LCB7XG4gICAgcmVmOiByZWZcbiAgfSksIGNoaWxkcmVuKSwgaGFzU2Nyb2xsaW5nQ29udGVudCAmJiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LS1tb2RhbC1jb250ZW50LS1vdmVyZmxvdy1pbmRpY2F0b3JgXG4gIH0pKTtcbn0pO1xuTW9kYWxCb2R5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIHByb3BzIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBsYWJlbCBvZiB0aGUgaGVhZGVyXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBCdWlsdC1pbiBwcm9wLXR5cGVzID4gVFMgbG9naWMgZG9lc24ndCBqaXZlIHdlbGwgd2l0aCBjdXN0b20gdmFsaWRhdG9yc1xuICBbJ2FyaWEtbGFiZWwnXTogcmVxdWlyZWRJZkdpdmVuUHJvcElzVHJ1dGh5KCdoYXNTY3JvbGxpbmdDb250ZW50JywgUHJvcFR5cGVzLnN0cmluZyksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBjb250ZW50IHRvIGJlIHBsYWNlZCBpbiB0aGUgTW9kYWxCb2R5XG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB0aGUgTW9kYWwgQm9keSBub2RlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm92aWRlIHdoZXRoZXIgdGhlIG1vZGFsIGNvbnRlbnQgaGFzIGEgZm9ybSBlbGVtZW50LlxuICAgKiBJZiBgdHJ1ZWAgaXMgdXNlZCBoZXJlLCBub24tZm9ybSBjaGlsZCBjb250ZW50IHNob3VsZCBoYXZlIGBieC0tbW9kYWwtY29udGVudF9fcmVndWxhci1jb250ZW50YCBjbGFzcy5cbiAgICovXG4gIGhhc0Zvcm06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBtb2RhbCBjb250YWlucyBzY3JvbGxpbmcgY29udGVudFxuICAgKi9cbiAgaGFzU2Nyb2xsaW5nQ29udGVudDogUHJvcFR5cGVzLmJvb2xcbn07XG5jb25zdCBDb21wb3NlZE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ29tcG9zZWRNb2RhbChfcmVmMiwgcmVmKSB7XG4gIGxldCB7XG4gICAgWydhcmlhLWxhYmVsbGVkYnknXTogYXJpYUxhYmVsbGVkQnksXG4gICAgWydhcmlhLWxhYmVsJ106IGFyaWFMYWJlbCxcbiAgICBjaGlsZHJlbixcbiAgICBjbGFzc05hbWU6IGN1c3RvbUNsYXNzTmFtZSxcbiAgICBjb250YWluZXJDbGFzc05hbWUsXG4gICAgZGFuZ2VyLFxuICAgIGlzRnVsbFdpZHRoLFxuICAgIG9uQ2xvc2UsXG4gICAgb25LZXlEb3duLFxuICAgIG9wZW4sXG4gICAgcHJldmVudENsb3NlT25DbGlja091dHNpZGUsXG4gICAgc2VsZWN0b3JQcmltYXJ5Rm9jdXMsXG4gICAgc2VsZWN0b3JzRmxvYXRpbmdNZW51cyxcbiAgICBzaXplLFxuICAgIGxhdW5jaGVyQnV0dG9uUmVmLFxuICAgIC4uLnJlc3RcbiAgfSA9IF9yZWYyO1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKCEhb3Blbik7XG4gIGNvbnN0IFt3YXNPcGVuLCBzZXRXYXNPcGVuXSA9IHVzZVN0YXRlKCEhb3Blbik7XG4gIGNvbnN0IGlubmVyTW9kYWwgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGJ1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRTZW50aW5lbCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZW5kU2VudGluZWwgPSB1c2VSZWYobnVsbCk7XG5cbiAgLy8gS2VwcCB0cmFjayBvZiBtb2RhbCBvcGVuL2Nsb3NlIHN0YXRlXG4gIC8vIGFuZCBwcm9wYWdhdGUgaXQgdG8gdGhlIGRvY3VtZW50LmJvZHlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BlbiAhPT0gd2FzT3Blbikge1xuICAgICAgc2V0SXNPcGVuKCEhb3Blbik7XG4gICAgICBzZXRXYXNPcGVuKCEhb3Blbik7XG4gICAgICB0b2dnbGVDbGFzcyhkb2N1bWVudC5ib2R5LCBgJHtwcmVmaXh9LS1ib2R5LS13aXRoLW1vZGFsLW9wZW5gLCAhIW9wZW4pO1xuICAgIH1cbiAgfSwgW29wZW4sIHdhc09wZW4sIHByZWZpeF0pO1xuICAvLyBSZW1vdmUgdGhlIGRvY3VtZW50LmJvZHkgY2xhc3NOYW1lIG9uIHVubW91bnRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdG9nZ2xlQ2xhc3MoZG9jdW1lbnQuYm9keSwgYCR7cHJlZml4fS0tYm9keS0td2l0aC1tb2RhbC1vcGVuYCwgZmFsc2UpO1xuICAgIH07XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2dCkge1xuICAgIGlmIChtYXRjaChldnQsIEVzY2FwZSkpIHtcbiAgICAgIGNsb3NlTW9kYWwoZXZ0KTtcbiAgICB9XG4gICAgb25LZXlEb3duPy4oZXZ0KTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVNb3VzZWRvd24oZXZ0KSB7XG4gICAgY29uc3QgaXNJbnNpZGUgPSBpbm5lck1vZGFsLmN1cnJlbnQ/LmNvbnRhaW5zKGV2dC50YXJnZXQpO1xuICAgIGlmICghaXNJbnNpZGUgJiYgIXByZXZlbnRDbG9zZU9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICBjbG9zZU1vZGFsKGV2dCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXIoX3JlZjMpIHtcbiAgICBsZXQge1xuICAgICAgdGFyZ2V0OiBvbGRBY3RpdmVOb2RlLFxuICAgICAgcmVsYXRlZFRhcmdldDogY3VycmVudEFjdGl2ZU5vZGVcbiAgICB9ID0gX3JlZjM7XG4gICAgaWYgKG9wZW4gJiYgY3VycmVudEFjdGl2ZU5vZGUgJiYgb2xkQWN0aXZlTm9kZSAmJiBpbm5lck1vZGFsLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3VycmVudDogYm9keU5vZGVcbiAgICAgIH0gPSBpbm5lck1vZGFsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiBzdGFydFNlbnRpbmVsTm9kZVxuICAgICAgfSA9IHN0YXJ0U2VudGluZWw7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnQ6IGVuZFNlbnRpbmVsTm9kZVxuICAgICAgfSA9IGVuZFNlbnRpbmVsO1xuICAgICAgd3JhcEZvY3VzKHtcbiAgICAgICAgYm9keU5vZGUsXG4gICAgICAgIHN0YXJ0VHJhcE5vZGU6IHN0YXJ0U2VudGluZWxOb2RlLFxuICAgICAgICBlbmRUcmFwTm9kZTogZW5kU2VudGluZWxOb2RlLFxuICAgICAgICBjdXJyZW50QWN0aXZlTm9kZSxcbiAgICAgICAgb2xkQWN0aXZlTm9kZSxcbiAgICAgICAgc2VsZWN0b3JzRmxvYXRpbmdNZW51czogc2VsZWN0b3JzRmxvYXRpbmdNZW51cz8uZmlsdGVyKEJvb2xlYW4pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VNb2RhbChldnQpIHtcbiAgICBpZiAoIW9uQ2xvc2UgfHwgb25DbG9zZShldnQpICE9PSBmYWxzZSkge1xuICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbW9kYWxDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsYCwgaXNPcGVuICYmICdpcy12aXNpYmxlJywgZGFuZ2VyICYmIGAke3ByZWZpeH0tLW1vZGFsLS1kYW5nZXJgLCBjdXN0b21DbGFzc05hbWUpO1xuICBjb25zdCBjb250YWluZXJDbGFzcyA9IGN4KGAke3ByZWZpeH0tLW1vZGFsLWNvbnRhaW5lcmAsIHNpemUgJiYgYCR7cHJlZml4fS0tbW9kYWwtY29udGFpbmVyLS0ke3NpemV9YCwgaXNGdWxsV2lkdGggJiYgYCR7cHJlZml4fS0tbW9kYWwtY29udGFpbmVyLS1mdWxsLXdpZHRoYCwgY29udGFpbmVyQ2xhc3NOYW1lKTtcblxuICAvLyBHZW5lcmF0ZSBhcmlhLWxhYmVsIGJhc2VkIG9uIE1vZGFsIEhlYWRlciBsYWJlbCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkIChMMjUzKVxuICBsZXQgZ2VuZXJhdGVkQXJpYUxhYmVsO1xuICBjb25zdCBjaGlsZHJlbldpdGhQcm9wcyA9IFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLm1hcChjaGlsZCA9PiB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGlzRWxlbWVudChjaGlsZCkgJiYgY2hpbGQudHlwZSA9PT0gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChNb2RhbEhlYWRlcikudHlwZTpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGVsID0gY2hpbGQ7XG4gICAgICAgICAgZ2VuZXJhdGVkQXJpYUxhYmVsID0gZWwucHJvcHMubGFiZWw7XG4gICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jbG9uZUVsZW1lbnQoZWwsIHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgY2FzZSBpc0VsZW1lbnQoY2hpbGQpICYmIGNoaWxkLnR5cGUgPT09IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoTW9kYWxGb290ZXIpLnR5cGU6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBlbCA9IGNoaWxkO1xuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY2xvbmVFbGVtZW50KGVsLCB7XG4gICAgICAgICAgICBjbG9zZU1vZGFsLFxuICAgICAgICAgICAgaW5wdXRyZWY6IGJ1dHRvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gJiYgbGF1bmNoZXJCdXR0b25SZWYpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsYXVuY2hlckJ1dHRvblJlZj8uY3VycmVudD8uZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW29wZW4sIGxhdW5jaGVyQnV0dG9uUmVmXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbEZvY3VzID0gZm9jdXNDb250YWluZXJFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBmb2N1c0NvbnRhaW5lckVsZW1lbnQgfHwgaW5uZXJNb2RhbC5jdXJyZW50O1xuICAgICAgY29uc3QgcHJpbWFyeUZvY3VzRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQgPyBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JQcmltYXJ5Rm9jdXMpIDogbnVsbDtcbiAgICAgIGlmIChwcmltYXJ5Rm9jdXNFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBwcmltYXJ5Rm9jdXNFbGVtZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1dHRvbiAmJiBidXR0b24uY3VycmVudDtcbiAgICB9O1xuICAgIGNvbnN0IGZvY3VzQnV0dG9uID0gZm9jdXNDb250YWluZXJFbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGluaXRpYWxGb2N1cyhmb2N1c0NvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChvcGVuICYmIGlzT3Blbikge1xuICAgICAgZm9jdXNCdXR0b24oaW5uZXJNb2RhbC5jdXJyZW50KTtcbiAgICB9XG4gIH0sIFtvcGVuLCBzZWxlY3RvclByaW1hcnlGb2N1cywgaXNPcGVuXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgcmVmOiByZWYsXG4gICAgXCJhcmlhLWhpZGRlblwiOiAhb3BlbixcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlZG93bixcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgY2xhc3NOYW1lOiBtb2RhbENsYXNzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250YWluZXJDbGFzcyxcbiAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgIFwiYXJpYS1tb2RhbFwiOiBcInRydWVcIixcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogZ2VuZXJhdGVkQXJpYUxhYmVsLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZEJ5XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHJlZjogc3RhcnRTZW50aW5lbCxcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXZpc3VhbGx5LWhpZGRlbmBcbiAgfSwgXCJGb2N1cyBzZW50aW5lbFwiKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogaW5uZXJNb2RhbCxcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLW1vZGFsLWNvbnRhaW5lci1ib2R5YFxuICB9LCBjaGlsZHJlbldpdGhQcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHJlZjogZW5kU2VudGluZWwsXG4gICAgY2xhc3NOYW1lOiBgJHtwcmVmaXh9LS12aXN1YWxseS1oaWRkZW5gXG4gIH0sIFwiRm9jdXMgc2VudGluZWxcIikpKTtcbn0pO1xuQ29tcG9zZWRNb2RhbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBhcmlhLWxhYmVsIGZvciBieC0tbW9kYWwtY29udGFpbmVyXG4gICAqL1xuICBbJ2FyaWEtbGFiZWwnXTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGFyaWEtbGFiZWxsZWRieSBmb3IgYngtLW1vZGFsLWNvbnRhaW5lclxuICAgKi9cbiAgWydhcmlhLWxhYmVsbGVkYnknXTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGNvbnRlbnQgdG8gYmUgcGxhY2VkIGluIHRoZSBDb21wb3NlZE1vZGFsXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBtb2RhbCByb290IG5vZGVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgYW4gb3B0aW9uYWwgY2xhc3NOYW1lIHRvIGJlIGFwcGxpZWQgdG8gdGhlIG1vZGFsIG5vZGVcbiAgICovXG4gIGNvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgcHJpbWFyeSBidXR0b24gc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggZGFuZ2VyIGJ1dHRvbi5cbiAgICogTm90ZSB0aGF0IHRoaXMgcHJvcCBpcyBub3QgYXBwbGllZCBpZiB5b3UgcmVuZGVyIHByaW1hcnkvZGFuZ2VyIGJ1dHRvbiBieSB5b3Vyc2VsZlxuICAgKi9cbiAgZGFuZ2VyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgTW9kYWwgY29udGVudCBzaG91bGQgaGF2ZSBhbnkgaW5uZXIgcGFkZGluZy5cbiAgICovXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFByb3ZpZGUgYSByZWYgdG8gcmV0dXJuIGZvY3VzIHRvIG9uY2UgdGhlIG1vZGFsIGlzIGNsb3NlZC5cbiAgICovXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IEludmFsaWQgZGVyaXZlZCB0eXBlXG4gIGxhdW5jaGVyQnV0dG9uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuYW55XG4gIH0pXSksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGhhbmRsZXIgZm9yIGNsb3NpbmcgbW9kYWwuXG4gICAqIFJldHVybmluZyBgZmFsc2VgIGhlcmUgcHJldmVudHMgY2xvc2luZyBtb2RhbC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBoYW5kbGVyIGZvciB0aGUgYG9uS2V5RG93bmAgZXZlbnQuIENhbGxlZCBmb3IgYWxsXG4gICAqIGBvbktleURvd25gIGV2ZW50cyB0aGF0IGRvIG5vdCBjbG9zZSB0aGUgbW9kYWxcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIE1vZGFsIGlzIGN1cnJlbnRseSBvcGVuXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJldmVudENsb3NlT25DbGlja091dHNpZGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU3BlY2lmeSBhIENTUyBzZWxlY3RvciB0aGF0IG1hdGNoZXMgdGhlIERPTSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlXG4gICAqIGZvY3VzZWQgd2hlbiB0aGUgTW9kYWwgb3BlbnNcbiAgICovXG4gIHNlbGVjdG9yUHJpbWFyeUZvY3VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgQ1NTIHNlbGVjdG9ycyB0aGF0IG1hdGNoIHRoZSBmbG9hdGluZyBtZW51c1xuICAgKi9cbiAgc2VsZWN0b3JzRmxvYXRpbmdNZW51czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzaXplIHZhcmlhbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWyd4cycsICdzbScsICdtZCcsICdsZyddKVxufTtcbkNvbXBvc2VkTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICBzZWxlY3RvclByaW1hcnlGb2N1czogJ1tkYXRhLW1vZGFsLXByaW1hcnktZm9jdXNdJ1xufTtcblxuZXhwb3J0IHsgTW9kYWxCb2R5LCBDb21wb3NlZE1vZGFsIGFzIGRlZmF1bHQgfTtcbiJdLCJuYW1lcyI6WyJleHRlbmRzIiwiX2V4dGVuZHMiLCJSZWFjdF9fZGVmYXVsdCIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaXNFbGVtZW50IiwiUHJvcFR5cGVzIiwiTW9kYWxIZWFkZXIiLCJNb2RhbEZvb3RlciIsImN4IiwidG9nZ2xlQ2xhc3MiLCJyZXF1aXJlZElmR2l2ZW5Qcm9wSXNUcnV0aHkiLCJ3cmFwRm9jdXMiLCJ1c2VQcmVmaXgiLCJtYXRjaCIsIkVzY2FwZSIsIk1vZGFsQm9keSIsImZvcndhcmRSZWYiLCJfcmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiY3VzdG9tQ2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJoYXNGb3JtIiwiaGFzU2Nyb2xsaW5nQ29udGVudCIsInJlc3QiLCJwcmVmaXgiLCJjb250ZW50Q2xhc3MiLCJoYXNTY3JvbGxpbmdDb250ZW50UHJvcHMiLCJ0YWJJbmRleCIsInJvbGUiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJub2RlIiwiYm9vbCIsIkNvbXBvc2VkTW9kYWwiLCJfcmVmMiIsImhhbmRsZUtleURvd24iLCJldnQiLCJjbG9zZU1vZGFsIiwib25LZXlEb3duIiwiaGFuZGxlTW91c2Vkb3duIiwiaW5uZXJNb2RhbCIsImlzSW5zaWRlIiwiY3VycmVudCIsImNvbnRhaW5zIiwidGFyZ2V0IiwicHJldmVudENsb3NlT25DbGlja091dHNpZGUiLCJoYW5kbGVCbHVyIiwiX3JlZjMiLCJvbGRBY3RpdmVOb2RlIiwicmVsYXRlZFRhcmdldCIsImN1cnJlbnRBY3RpdmVOb2RlIiwib3BlbiIsImJvZHlOb2RlIiwic3RhcnRTZW50aW5lbE5vZGUiLCJzdGFydFNlbnRpbmVsIiwiZW5kU2VudGluZWxOb2RlIiwiZW5kU2VudGluZWwiLCJzdGFydFRyYXBOb2RlIiwiZW5kVHJhcE5vZGUiLCJzZWxlY3RvcnNGbG9hdGluZ01lbnVzIiwiZmlsdGVyIiwiQm9vbGVhbiIsIm9uQ2xvc2UiLCJzZXRJc09wZW4iLCJhcmlhTGFiZWxsZWRCeSIsImFyaWFMYWJlbCIsImNvbnRhaW5lckNsYXNzTmFtZSIsImRhbmdlciIsImlzRnVsbFdpZHRoIiwic2VsZWN0b3JQcmltYXJ5Rm9jdXMiLCJzaXplIiwibGF1bmNoZXJCdXR0b25SZWYiLCJpc09wZW4iLCJ3YXNPcGVuIiwic2V0V2FzT3BlbiIsImJ1dHRvbiIsImRvY3VtZW50IiwiYm9keSIsIm1vZGFsQ2xhc3MiLCJjb250YWluZXJDbGFzcyIsImdlbmVyYXRlZEFyaWFMYWJlbCIsImNoaWxkcmVuV2l0aFByb3BzIiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwibWFwIiwiY2hpbGQiLCJ0eXBlIiwiZWwiLCJwcm9wcyIsImxhYmVsIiwiY2xvbmVFbGVtZW50IiwiaW5wdXRyZWYiLCJzZXRUaW1lb3V0IiwiZm9jdXMiLCJpbml0aWFsRm9jdXMiLCJmb2N1c0NvbnRhaW5lckVsZW1lbnQiLCJjb250YWluZXJFbGVtZW50IiwicHJpbWFyeUZvY3VzRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1c0J1dHRvbiIsIm9uQmx1ciIsIm9uTW91c2VEb3duIiwib25lT2ZUeXBlIiwiZnVuYyIsInNoYXBlIiwiYW55IiwiYXJyYXlPZiIsIm9uZU9mIiwiZGVmYXVsdFByb3BzIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/es/components/ComposedModal/ComposedModal.js\n");
977
977
 
978
978
  /***/ }),
979
979
 
@@ -2865,7 +2865,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2865
2865
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2866
2866
 
2867
2867
  "use strict";
2868
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IconTab: () => (/* binding */ IconTab),\n/* harmony export */ Tab: () => (/* binding */ Tab),\n/* harmony export */ TabList: () => (/* binding */ TabList),\n/* harmony export */ TabPanel: () => (/* binding */ TabPanel),\n/* harmony export */ TabPanels: () => (/* binding */ TabPanels),\n/* harmony export */ Tabs: () => (/* binding */ Tabs)\n/* harmony export */ });\n/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../_virtual/_rollupPluginBabelHelpers.js */ \"../../../node_modules/@carbon/react/es/_virtual/_rollupPluginBabelHelpers.js\");\n/* harmony import */ var _carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @carbon/icons-react */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-2.js\");\n/* harmony import */ var _carbon_icons_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @carbon/icons-react */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-3.js\");\n/* harmony import */ var _carbon_layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @carbon/layout */ \"../../../node_modules/@carbon/layout/es/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.debounce */ \"../../../node_modules/lodash.debounce/index.js\");\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-is */ \"../../../node_modules/react-is/index.js\");\n/* harmony import */ var _Tooltip_Tooltip_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../Tooltip/Tooltip.js */ \"../../../node_modules/@carbon/react/es/components/Tooltip/Tooltip.js\");\n/* harmony import */ var _internal_useControllableState_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../internal/useControllableState.js */ \"../../../node_modules/@carbon/react/es/internal/useControllableState.js\");\n/* harmony import */ var _internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../internal/useEffectOnce.js */ \"../../../node_modules/@carbon/react/es/internal/useEffectOnce.js\");\n/* harmony import */ var _internal_useId_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internal/useId.js */ \"../../../node_modules/@carbon/react/es/internal/useId.js\");\n/* harmony import */ var _internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../internal/useIsomorphicEffect.js */ \"../../../node_modules/@carbon/react/es/internal/useIsomorphicEffect.js\");\n/* harmony import */ var _internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../internal/useMergedRefs.js */ \"../../../node_modules/@carbon/react/es/internal/useMergedRefs.js\");\n/* harmony import */ var _internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../internal/useNoInteractiveChildren.js */ \"../../../node_modules/@carbon/react/es/internal/useNoInteractiveChildren.js\");\n/* harmony import */ var _internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../internal/usePrefix.js */ \"../../../node_modules/@carbon/react/es/internal/usePrefix.js\");\n/* harmony import */ var _usePressable_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./usePressable.js */ \"../../../node_modules/@carbon/react/es/components/Tabs/usePressable.js\");\n/* harmony import */ var _prop_types_deprecate_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../prop-types/deprecate.js */ \"../../../node_modules/@carbon/react/es/prop-types/deprecate.js\");\n/* harmony import */ var _internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../internal/useEvent.js */ \"../../../node_modules/@carbon/react/es/internal/useEvent.js\");\n/* harmony import */ var _internal_useMatchMedia_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../internal/useMatchMedia.js */ \"../../../node_modules/@carbon/react/es/internal/useMatchMedia.js\");\n/* harmony import */ var _internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internal/keyboard/match.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/match.js\");\n/* harmony import */ var _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internal/keyboard/keys.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/keys.js\");\n/**\n * Copyright IBM Corp. 2016, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _ChevronLeft, _ChevronRight, _Close;\n// Used to manage the overall state of the Tabs\nvar TabsContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext({\n baseId: \"\",\n activeIndex: 0,\n defaultSelectedIndex: 0,\n dismissable: false,\n onTabCloseRequest: function onTabCloseRequest() {},\n setActiveIndex: function setActiveIndex() {},\n selectedIndex: 0,\n setSelectedIndex: function setSelectedIndex() {}\n});\n// Used to keep track of position in a tablist\nvar TabContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext({\n index: 0,\n hasSecondaryLabel: false\n});\nvar lgMediaQuery = \"(min-width: \".concat(_carbon_layout__WEBPACK_IMPORTED_MODULE_0__.breakpoints.lg.width, \")\");\n// Used to keep track of position in a list of tab panels\nvar TabPanelContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext(0);\n/**\n * Tabs\n */ function Tabs(_ref) {\n var children = _ref.children, _ref_defaultSelectedIndex = _ref.defaultSelectedIndex, defaultSelectedIndex = _ref_defaultSelectedIndex === void 0 ? 0 : _ref_defaultSelectedIndex, onChange = _ref.onChange, controlledSelectedIndex = _ref.selectedIndex, dismissable = _ref.dismissable, onTabCloseRequest = _ref.onTabCloseRequest;\n var baseId = (0,_internal_useId_js__WEBPACK_IMPORTED_MODULE_5__.useId)(\"ccs\");\n // The active index is used to track the element which has focus in our tablist\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(defaultSelectedIndex), 2), activeIndex = _useState[0], setActiveIndex = _useState[1];\n // The selected index is used for the tab/panel pairing which is \"visible\"\n var _useControllableState = _sliced_to_array((0,_internal_useControllableState_js__WEBPACK_IMPORTED_MODULE_6__.useControllableState)({\n value: controlledSelectedIndex,\n defaultValue: defaultSelectedIndex,\n onChange: function(value) {\n return onChange === null || onChange === void 0 ? void 0 : onChange({\n selectedIndex: value\n });\n }\n }), 2), selectedIndex = _useControllableState[0], setSelectedIndex = _useControllableState[1];\n var value = {\n baseId: baseId,\n activeIndex: activeIndex,\n defaultSelectedIndex: defaultSelectedIndex,\n dismissable: dismissable,\n onTabCloseRequest: onTabCloseRequest,\n setActiveIndex: setActiveIndex,\n selectedIndex: selectedIndex,\n setSelectedIndex: setSelectedIndex\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabsContext.Provider, {\n value: value\n }, children);\n}\nTabs.propTypes = {\n /**\n * Provide child elements to be rendered inside the `Tabs`.\n * These elements should render either `TabsList` or `TabsPanels`\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify which content tab should be initially selected when the component\n * is first rendered\n */ defaultSelectedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Whether the render Tab children should be dismissable.\n */ dismissable: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Provide an optional function which is called whenever the state of the\n * `Tabs` changes\n */ onChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * If specifying the `onTabCloseRequest` prop, provide a callback function\n * responsible for removing the tab when close button is pressed on one of the Tab elements\n */ onTabCloseRequest: function(props) {\n if (props.dismissable && !props.onTabCloseRequest) {\n return new Error(\"dismissable property specified without also providing an onTabCloseRequest property.\");\n }\n return undefined;\n },\n /**\n * Control which content panel is currently selected. This puts the component\n * in a controlled mode and should be used along with `onChange`\n */ selectedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number)\n};\n/**\n * Get the next index for a given keyboard event\n * given a count of the total items and the current index\n */ function getNextIndex(event, total, index) {\n switch(true){\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowRight):\n return (index + 1) % total;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowLeft):\n return (total + index - 1) % total;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Home):\n return 0;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.End):\n return total - 1;\n default:\n return index;\n }\n}\n/**\n * TabList\n */ function TabList(_ref2) {\n var onKeyDown = function onKeyDown(event) {\n if ((0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.matches)(event, [\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowRight,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowLeft,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Home,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.End\n ])) {\n var _tabs_current_nextIndex;\n event.preventDefault();\n var activeTabs = tabs.current.filter(function(tab) {\n return !tab.disabled;\n });\n var currentIndex = activeTabs.indexOf(tabs.current[activation === \"automatic\" ? selectedIndex : activeIndex]);\n var nextIndex = tabs.current.indexOf(activeTabs[getNextIndex(event, activeTabs.length, currentIndex)]);\n if (activation === \"automatic\") {\n setSelectedIndex(nextIndex);\n } else if (activation === \"manual\") {\n setActiveIndex(nextIndex);\n }\n (_tabs_current_nextIndex = tabs.current[nextIndex]) === null || _tabs_current_nextIndex === void 0 ? void 0 : _tabs_current_nextIndex.focus();\n }\n };\n var _ref2_activation = _ref2.activation, activation = _ref2_activation === void 0 ? \"automatic\" : _ref2_activation, label = _ref2[\"aria-label\"], children = _ref2.children, customClassName = _ref2.className, _ref2_contained = _ref2.contained, contained = _ref2_contained === void 0 ? false : _ref2_contained, _ref2_fullWidth = _ref2.fullWidth, fullWidth = _ref2_fullWidth === void 0 ? false : _ref2_fullWidth, iconSize = _ref2.iconSize, leftOverflowButtonProps = _ref2.leftOverflowButtonProps, light = _ref2.light, rightOverflowButtonProps = _ref2.rightOverflowButtonProps, _ref2_scrollDebounceWait = _ref2.scrollDebounceWait, scrollDebounceWait = _ref2_scrollDebounceWait === void 0 ? 200 : _ref2_scrollDebounceWait, scrollIntoView = _ref2.scrollIntoView, rest = _object_without_properties(_ref2, [\n \"activation\",\n \"aria-label\",\n \"children\",\n \"className\",\n \"contained\",\n \"fullWidth\",\n \"iconSize\",\n \"leftOverflowButtonProps\",\n \"light\",\n \"rightOverflowButtonProps\",\n \"scrollDebounceWait\",\n \"scrollIntoView\"\n ]);\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), activeIndex = _React__default_useContext.activeIndex, selectedIndex = _React__default_useContext.selectedIndex, setSelectedIndex = _React__default_useContext.setSelectedIndex, setActiveIndex = _React__default_useContext.setActiveIndex, dismissable = _React__default_useContext.dismissable;\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var ref = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var previousButton = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var nextButton = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), isScrollable = _useState[0], setIsScrollable = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(0), 2), scrollLeft = _useState1[0], setScrollLeft = _useState1[1];\n var hasSecondaryLabelTabs = false;\n if (contained) {\n hasSecondaryLabelTabs = react__WEBPACK_IMPORTED_MODULE_3___default().Children.toArray(children).some(function(child) {\n return (0,react_is__WEBPACK_IMPORTED_MODULE_4__.isElement)(child) && !!child.props.secondaryLabel;\n });\n }\n var isLg = (0,_internal_useMatchMedia_js__WEBPACK_IMPORTED_MODULE_11__.useMatchMedia)(lgMediaQuery);\n var distributeWidth = fullWidth && contained && isLg && react__WEBPACK_IMPORTED_MODULE_3___default().Children.toArray(children).length < 9;\n var _obj;\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs\"), (_obj = {}, _define_property(_obj, \"\".concat(prefix, \"--tabs--contained\"), contained), _define_property(_obj, \"\".concat(prefix, \"--tabs--light\"), light), _define_property(_obj, \"\".concat(prefix, \"--tabs__icon--default\"), iconSize === \"default\"), _define_property(_obj, \"\".concat(prefix, \"--tabs__icon--lg\"), iconSize === \"lg\"), // TODO: V12 - Remove this class\n _define_property(_obj, \"\".concat(prefix, \"--layout--size-lg\"), iconSize === \"lg\"), _define_property(_obj, \"\".concat(prefix, \"--tabs--tall\"), hasSecondaryLabelTabs), _define_property(_obj, \"\".concat(prefix, \"--tabs--full-width\"), distributeWidth), _obj), customClassName);\n // Previous Button\n // VISIBLE IF:\n // SCROLLABLE\n // AND SCROLL_LEFT > 0\n var buttonWidth = 44;\n // Next Button\n // VISIBLE IF:\n // SCROLLABLE\n // AND SCROLL_LEFT + CLIENT_WIDTH < SCROLL_WIDTH\n var _useState2 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false), 2), isNextButtonVisible = _useState2[0], setIsNextButtonVisible = _useState2[1];\n var isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false;\n var previousButtonClasses = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab--overflow-nav-button\"), \"\".concat(prefix, \"--tab--overflow-nav-button--previous\"), _define_property({}, \"\".concat(prefix, \"--tab--overflow-nav-button--hidden\"), !isPreviousButtonVisible));\n var nextButtonClasses = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab--overflow-nav-button\"), \"\".concat(prefix, \"--tab--overflow-nav-button--next\"), _define_property({}, \"\".concat(prefix, \"--tab--overflow-nav-button--hidden\"), !isNextButtonVisible));\n var tabs = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)([]);\n var debouncedOnScroll = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)(function() {\n return lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(function(event) {\n setScrollLeft(event.target.scrollLeft);\n }, scrollDebounceWait);\n }, [\n scrollDebounceWait\n ]);\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n var tab = tabs.current[selectedIndex];\n if (scrollIntoView && tab) {\n tab.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\"\n });\n }\n });\n (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function() {\n setIsNextButtonVisible(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);\n if (dismissable) {\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n }\n }, [\n scrollLeft,\n children,\n dismissable\n ]);\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n if (tabs.current[selectedIndex].disabled) {\n var activeTabs = tabs.current.filter(function(tab) {\n return !tab.disabled;\n });\n if (activeTabs.length > 0) {\n var tab = activeTabs[0];\n setSelectedIndex(tabs.current.indexOf(tab));\n }\n }\n });\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n var handler = function handler() {\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n };\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n var debouncedHandler = lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(handler, 200);\n window.addEventListener(\"resize\", debouncedHandler);\n return function() {\n debouncedHandler.cancel();\n window.removeEventListener(\"resize\", debouncedHandler);\n };\n }, []);\n // updates scroll location for all scroll behavior.\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n if (scrollLeft !== null && ref.current) {\n ref.current.scrollLeft = scrollLeft;\n }\n }, [\n scrollLeft\n ]);\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n if (!isScrollable || !ref.current) {\n return;\n }\n var tab = activation === \"manual\" ? tabs.current[activeIndex] : tabs.current[selectedIndex];\n if (tab) {\n // The width of the \"scroll buttons\"\n // The start and end position of the selected tab\n var _tab_getBoundingClientRect = tab.getBoundingClientRect(), tabWidth = _tab_getBoundingClientRect.width;\n var start = tab.offsetLeft;\n var end = tab.offsetLeft + tabWidth;\n // The start and end of the visible area for the tabs\n var visibleStart = ref.current.scrollLeft + buttonWidth;\n var visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth;\n // The beginning of the tab is clipped and not visible\n if (start < visibleStart) {\n setScrollLeft(start - buttonWidth);\n }\n // The end of the tab is clipped and not visible\n if (end > visibleEnd) {\n setScrollLeft(end + buttonWidth - ref.current.clientWidth);\n }\n }\n }, [\n activation,\n activeIndex,\n selectedIndex,\n isScrollable,\n children\n ]);\n (0,_usePressable_js__WEBPACK_IMPORTED_MODULE_14__.usePressable)(previousButton, {\n onPress: function onPress(_ref3) {\n var longPress = _ref3.longPress;\n if (!longPress && ref.current) {\n setScrollLeft(Math.max(scrollLeft - ref.current.scrollWidth / tabs.current.length * 1.5, 0));\n }\n },\n onLongPress: function onLongPress() {\n return createLongPressBehavior(ref, \"backward\", setScrollLeft);\n }\n });\n (0,_usePressable_js__WEBPACK_IMPORTED_MODULE_14__.usePressable)(nextButton, {\n onPress: function onPress(_ref4) {\n var longPress = _ref4.longPress;\n if (!longPress && ref.current) {\n setScrollLeft(Math.min(scrollLeft + ref.current.scrollWidth / tabs.current.length * 1.5, ref.current.scrollWidth - ref.current.clientWidth));\n }\n },\n onLongPress: function onLongPress() {\n return createLongPressBehavior(ref, \"forward\", setScrollLeft);\n }\n });\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: className\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"button\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n \"aria-hidden\": \"true\",\n tabIndex: -1,\n \"aria-label\": \"Scroll left\",\n ref: previousButton,\n className: previousButtonClasses,\n type: \"button\"\n }, leftOverflowButtonProps), _ChevronLeft || (_ChevronLeft = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__.ChevronLeft, null))), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-label\": label,\n ref: ref,\n role: \"tablist\",\n className: \"\".concat(prefix, \"--tab--list\"),\n onScroll: debouncedOnScroll,\n onKeyDown: onKeyDown\n }), react__WEBPACK_IMPORTED_MODULE_3___default().Children.map(children, function(child, index) {\n return !(0,react_is__WEBPACK_IMPORTED_MODULE_4__.isElement)(child) ? null : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabContext.Provider, {\n value: {\n index: index,\n hasSecondaryLabel: hasSecondaryLabelTabs,\n contained: contained\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().cloneElement(child, {\n ref: function(node) {\n tabs.current[index] = node;\n }\n }));\n })), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"button\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n \"aria-hidden\": \"true\",\n tabIndex: -1,\n \"aria-label\": \"Scroll right\",\n ref: nextButton,\n className: nextButtonClasses,\n type: \"button\"\n }, rightOverflowButtonProps), _ChevronRight || (_ChevronRight = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__.ChevronRight, null))));\n}\nTabList.propTypes = {\n /**\n * Specify whether the content tab should be activated automatically or\n * manually\n */ activation: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOf([\n \"automatic\",\n \"manual\"\n ]),\n /**\n * Provide an accessible label to be read when a user interacts with this\n * component\n */ \"aria-label\": (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n /**\n * Provide child elements to be rendered inside `ContentTabs`.\n * These elements should render a `ContentTab`\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to the container node\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Specify whether component is contained type\n */ contained: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Used for tabs within a grid, this makes it so tabs span the full container width and have the same width. Only available on contained tabs with <9 children\n */ fullWidth: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * If using `IconTab`, specify the size of the icon being used.\n */ iconSize: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOf([\n \"default\",\n \"lg\"\n ]),\n /**\n * Provide the props that describe the left overflow button\n */ leftOverflowButtonProps: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n /**\n * Specify whether to use the light component variant\n */ light: (0,_prop_types_deprecate_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"])((prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool), \"The `light` prop for `TabList` has \" + \"been deprecated in favor of the new `Layer` component. It will be removed in the next major release.\"),\n /**\n * Provide the props that describe the right overflow button\n */ rightOverflowButtonProps: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n /**\n * Optionally provide a delay (in milliseconds) passed to the lodash\n * debounce of the onScroll handler. This will impact the responsiveness\n * of scroll arrow buttons rendering when scrolling to the first or last tab.\n */ scrollDebounceWait: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Choose whether to automatically scroll\n * to newly selected tabs on component rerender\n */ scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool)\n};\n/**\n * Helper function to set up the behavior when a button is \"long pressed\".\n * This function will take a ref to the tablist, a direction, and a setter\n * for scrollLeft and will update the scroll position within a requestAnimationFrame.\n *\n * It returns a cleanup function to be run\n * when the long press is deactivated\n */ function createLongPressBehavior(ref, direction, setScrollLeft) {\n var node = ref.current;\n if (!node) {\n return function() {};\n }\n // We manually override the scroll behavior to be \"auto\".\n // If it is set as smooth, this animation does not update correctly\n var defaultScrollBehavior = node === null || node === void 0 ? void 0 : node.style[\"scroll-behavior\"];\n node.style[\"scroll-behavior\"] = \"auto\";\n var scrollDelta = direction === \"forward\" ? 5 : -5;\n var frameId = null;\n function tick() {\n if (!node) {\n return;\n }\n node.scrollLeft = node.scrollLeft + scrollDelta;\n frameId = requestAnimationFrame(tick);\n }\n frameId = requestAnimationFrame(tick);\n return function() {\n // Restore the previous scroll behavior\n node.style[\"scroll-behavior\"] = defaultScrollBehavior;\n // Make sure that our `scrollLeft` value is in sync with the existing\n // `ref` after our requestAnimationFrame loop above\n setScrollLeft(node.scrollLeft);\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n/**\n * Tab\n */ var Tab = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_3__.forwardRef)(function Tab(_ref5, forwardRef) {\n var _ref5_as = _ref5.as, as = _ref5_as === void 0 ? \"button\" : _ref5_as, children = _ref5.children, customClassName = _ref5.className, disabled = _ref5.disabled, onClick = _ref5.onClick, onKeyDown = _ref5.onKeyDown, secondaryLabel = _ref5.secondaryLabel, Icon = _ref5.renderIcon, rest = _object_without_properties(_ref5, [\n \"as\",\n \"children\",\n \"className\",\n \"disabled\",\n \"onClick\",\n \"onKeyDown\",\n \"secondaryLabel\",\n \"renderIcon\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), selectedIndex = _React__default_useContext.selectedIndex, setSelectedIndex = _React__default_useContext.setSelectedIndex, baseId = _React__default_useContext.baseId, dismissable = _React__default_useContext.dismissable, onTabCloseRequest = _React__default_useContext.onTabCloseRequest;\n var _React__default_useContext1 = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabContext), index = _React__default_useContext1.index, hasSecondaryLabel = _React__default_useContext1.hasSecondaryLabel, contained = _React__default_useContext1.contained;\n var dismissIconRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var tabRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var ref = (0,_internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__.useMergedRefs)([\n forwardRef,\n tabRef\n ]);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), ignoreHover = _useState[0], setIgnoreHover = _useState[1];\n var id = \"\".concat(baseId, \"-tab-\").concat(index);\n var panelId = \"\".concat(baseId, \"-tabpanel-\").concat(index);\n var _obj;\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item\"), \"\".concat(prefix, \"--tabs__nav-link\"), (_obj = {}, _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--selected\"), selectedIndex === index), _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--disabled\"), disabled), _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--hover-off\"), ignoreHover), _obj), customClassName);\n var BaseComponent = as;\n var onDismissIconMouseEnter = function(evt) {\n if (contained && tabRef.current) {\n evt.stopPropagation();\n setIgnoreHover(true);\n tabRef.current.classList.add(\"\".concat(prefix, \"--tabs__nav-item--hover-off\"));\n }\n };\n var onDismissIconMouseLeave = function() {\n if (contained && tabRef.current) {\n tabRef.current.classList.remove(\"\".concat(prefix, \"--tabs__nav-item--hover-off\"));\n setIgnoreHover(false);\n }\n };\n (0,_internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__.useEvent)(dismissIconRef, \"mouseover\", onDismissIconMouseEnter);\n (0,_internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__.useEvent)(dismissIconRef, \"mouseleave\", onDismissIconMouseLeave);\n var handleClose = function(evt) {\n evt.stopPropagation();\n onTabCloseRequest === null || onTabCloseRequest === void 0 ? void 0 : onTabCloseRequest(index);\n };\n var handleKeyDown = function(event) {\n if (dismissable && (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Delete)) {\n handleClose(event);\n }\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);\n };\n var DismissIcon = /*#__PURE__*/ // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n role: \"button\",\n tabIndex: -1,\n \"aria-hidden\": true,\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--close-icon\"), _define_property({}, \"\".concat(prefix, \"--visually-hidden\"), !dismissable)),\n onClick: handleClose,\n \"aria-label\": \"Close tab\",\n title: \"Close tab\",\n ref: dismissIconRef\n }, _Close || (_Close = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_20__.Close, null)));\n var hasIcon = Icon !== null && Icon !== void 0 ? Icon : dismissable;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(BaseComponent, (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-controls\": panelId,\n \"aria-disabled\": disabled,\n \"aria-selected\": selectedIndex === index,\n ref: ref,\n id: id,\n role: \"tab\",\n className: className,\n disabled: disabled,\n onClick: function(evt) {\n if (disabled) {\n return;\n }\n setSelectedIndex(index);\n onClick === null || onClick === void 0 ? void 0 : onClick(evt);\n },\n onKeyDown: handleKeyDown,\n tabIndex: selectedIndex === index ? \"0\" : \"-1\",\n type: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-label-wrapper\")\n }, dismissable && Icon && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item--icon-left\")\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Icon, {\n size: 16\n })), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"span\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-label\"),\n title: children\n }, children), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--icon\"), _define_property({}, \"\".concat(prefix, \"--visually-hidden\"), !hasIcon))\n }, DismissIcon, !dismissable && Icon && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Icon, {\n size: 16\n }))), hasSecondaryLabel && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-secondary-label\"),\n title: secondaryLabel\n }, secondaryLabel));\n});\nTab.propTypes = {\n /**\n * Provide a custom element to render instead of the default button\n */ // @ts-expect-error: Invalid prop type derivation\n as: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().elementType)\n ]),\n /**\n * Provide child elements to be rendered inside `Tab`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to your Tab\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Whether your Tab is disabled.\n */ disabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Provide a handler that is invoked when a user clicks on the control\n */ onClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * Provide a handler that is invoked on the key down event for the control\n */ onKeyDown: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /*\n * An optional parameter to allow overriding the anchor rendering.\n * Useful for using Tab along with react-router or other client\n * side router libraries.\n **/ renderButton: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * Optional prop to render an icon next to the label.\n * Can be a React component class\n */ // @ts-expect-error: Invalid prop type derivation\n renderIcon: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n ]),\n /*\n * An optional label to render under the primary tab label.\n /* This prop is only useful for conained tabs\n **/ secondaryLabel: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n/**\n * IconTab\n */ var IconTab = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().forwardRef(function IconTab(_ref6, ref) {\n var children = _ref6.children, customClassName = _ref6.className, _ref6_defaultOpen = _ref6.defaultOpen, defaultOpen = _ref6_defaultOpen === void 0 ? false : _ref6_defaultOpen, enterDelayMs = _ref6.enterDelayMs, leaveDelayMs = _ref6.leaveDelayMs, label = _ref6.label, rest = _object_without_properties(_ref6, [\n \"children\",\n \"className\",\n \"defaultOpen\",\n \"enterDelayMs\",\n \"leaveDelayMs\",\n \"label\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var classNames = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--icon-only\"), customClassName);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_Tooltip_Tooltip_js__WEBPACK_IMPORTED_MODULE_21__.Tooltip, {\n align: \"bottom\",\n defaultOpen: defaultOpen,\n className: \"\".concat(prefix, \"--icon-tooltip\"),\n enterDelayMs: enterDelayMs,\n label: label,\n leaveDelayMs: leaveDelayMs\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Tab, (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n className: classNames,\n ref: ref\n }, rest), children));\n});\nIconTab.propTypes = {\n /**\n * Provide an icon to be rendered inside `IconTab` as the visual label for Tab.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to your Tab\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Specify whether the tooltip for the icon should be open when it first renders\n */ defaultOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Specify the duration in milliseconds to delay before displaying the tooltip for the icon.\n */ enterDelayMs: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Provide the label to be rendered inside the Tooltip. The label will use\n * `aria-labelledby` and will fully describe the child node that is provided.\n * This means that if you have text in the child node it will not be\n * announced to the screen reader.\n */ label: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node).isRequired,\n /**\n * Specify the duration in milliseconds to delay before hiding the tooltip\n */ leaveDelayMs: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number)\n};\n/**\n * TabPanel\n */ var TabPanel = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().forwardRef(function TabPanel(_ref7, forwardRef) {\n var children = _ref7.children, customClassName = _ref7.className, rest = _object_without_properties(_ref7, [\n \"children\",\n \"className\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var panel = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var ref = (0,_internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__.useMergedRefs)([\n forwardRef,\n panel\n ]);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(0), 2), tabIndex = _useState[0], setTabIndex = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), interactiveContent = _useState1[0], setInteractiveContent = _useState1[1];\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), selectedIndex = _React__default_useContext.selectedIndex, baseId = _React__default_useContext.baseId;\n var index = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabPanelContext);\n var id = \"\".concat(baseId, \"-tabpanel-\").concat(index);\n var tabId = \"\".concat(baseId, \"-tab-\").concat(index);\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab-content\"), customClassName, _define_property({}, \"\".concat(prefix, \"--tab-content--interactive\"), interactiveContent));\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n if (!panel.current) {\n return;\n }\n var content = (0,_internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__.getInteractiveContent)(panel.current);\n if (content) {\n setInteractiveContent(true);\n setTabIndex(-1);\n }\n });\n // tabindex should only be 0 if no interactive content in children\n (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function() {\n var callback = function callback() {\n var content = (0,_internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__.getInteractiveContent)(node);\n if (content) {\n setInteractiveContent(true);\n setTabIndex(-1);\n } else {\n setInteractiveContent(false);\n setTabIndex(0);\n }\n };\n var node = panel.current;\n if (!node) {\n return;\n }\n var observer = new MutationObserver(callback);\n observer.observe(node, {\n childList: true,\n subtree: true\n });\n return function() {\n return observer.disconnect();\n };\n }, []);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-labelledby\": tabId,\n id: id,\n className: className,\n ref: ref,\n role: \"tabpanel\",\n tabIndex: tabIndex,\n hidden: selectedIndex !== index\n }), children);\n});\nTabPanel.propTypes = {\n /**\n * Provide child elements to be rendered inside `TabPanel`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to TabPanel.\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n/**\n * TabPanels\n */ function TabPanels(_ref8) {\n var children = _ref8.children;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react__WEBPACK_IMPORTED_MODULE_3___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_3___default().Children.map(children, function(child, index) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabPanelContext.Provider, {\n value: index\n }, child);\n }));\n}\nTabPanels.propTypes = {\n /**\n * Provide child elements to be rendered inside `TabPanels`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node)\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9UYWJzL1RhYnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0NBS0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWlGO0FBQ1g7QUFDMUI7QUFDakI7QUFDVztBQUNKO0FBQzBEO0FBQ3hEO0FBQ0k7QUFDTztBQUM4QjtBQUNkO0FBQ2hCO0FBQ3dCO0FBQ1I7QUFDbUI7QUFDM0I7QUFDUDtBQUNLO0FBQ0E7QUFDVTtBQUNFO0FBQ3lCO0FBRTNGLElBQUltQyxjQUFjQyxlQUFlQztBQUVqQywrQ0FBK0M7QUFFL0MsSUFBTUMsY0FBYyxXQUFXLEdBQUU3QiwwREFBNEIsQ0FBQztJQUM1RCtCLFFBQVE7SUFDUkMsYUFBYTtJQUNiQyxzQkFBc0I7SUFDdEJDLGFBQWEsS0FBSztJQUNsQkMsbUJBQUFBLFNBQUFBLG9CQUFvQixDQUFDO0lBQ3JCQyxnQkFBQUEsU0FBQUEsaUJBQWlCLENBQUM7SUFDbEJDLGVBQWU7SUFDZkMsa0JBQUFBLFNBQUFBLG1CQUFtQixDQUFDO0FBQ3RCO0FBRUEsOENBQThDO0FBQzlDLElBQU1DLGFBQWEsV0FBVyxHQUFFdkMsMERBQTRCLENBQUM7SUFDM0R3QyxPQUFPO0lBQ1BDLG1CQUFtQixLQUFLO0FBQzFCO0FBQ0EsSUFBTUMsZUFBZSxlQUFvQyxPQUFyQjlDLHVEQUFXQSxDQUFDK0MsRUFBRSxDQUFDQyxLQUFLLEVBQUM7QUFFekQseURBQXlEO0FBQ3pELElBQU1DLGtCQUFrQixXQUFXLEdBQUU3QywwREFBNEIsQ0FBQztBQUVsRTs7Q0FFQyxHQUVELFNBQVM4QyxLQUFLQyxJQUFJLEVBQUU7SUFDbEIsSUFDRUMsV0FNRUQsS0FORkMsc0NBTUVELEtBTEZkLHNCQUFBQSw4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SSxPQUFPLFdBQVcsR0FBRXhDLDBEQUE0QixDQUFDNkMsZ0JBQWdCUyxRQUFRLEVBQUU7WUFDekVILE9BQU9YO1FBQ1QsR0FBR21FO0lBQ0w7QUFDRjtBQUNBNEcsVUFBVWhLLFNBQVMsR0FBRztJQUNwQjs7R0FFQyxHQUNEUCxVQUFVakQsd0RBQWM7QUFDMUI7QUFFNEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2FyYm9uL3JlYWN0L2VzL2NvbXBvbmVudHMvVGFicy9UYWJzLmpzP2Y5MTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTYsIDIwMjNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUtMi4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kcyBhcyBfZXh0ZW5kcyB9IGZyb20gJy4uLy4uL192aXJ0dWFsL19yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMnO1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCwgQ2xvc2UgfSBmcm9tICdAY2FyYm9uL2ljb25zLXJlYWN0JztcbmltcG9ydCB7IGJyZWFrcG9pbnRzIH0gZnJvbSAnQGNhcmJvbi9sYXlvdXQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC5kZWJvdW5jZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgJy4uL1Rvb2x0aXAvRGVmaW5pdGlvblRvb2x0aXAuanMnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL1Rvb2x0aXAvVG9vbHRpcC5qcyc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3VzZUNvbnRyb2xsYWJsZVN0YXRlLmpzJztcbmltcG9ydCB7IHVzZUVmZmVjdE9uY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VFZmZlY3RPbmNlLmpzJztcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlSWQuanMnO1xuaW1wb3J0IHVzZUlzb21vcnBoaWNFZmZlY3QgZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlSXNvbW9ycGhpY0VmZmVjdC5qcyc7XG5pbXBvcnQgeyB1c2VNZXJnZWRSZWZzIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlTWVyZ2VkUmVmcy5qcyc7XG5pbXBvcnQgeyBnZXRJbnRlcmFjdGl2ZUNvbnRlbnQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VOb0ludGVyYWN0aXZlQ2hpbGRyZW4uanMnO1xuaW1wb3J0IHsgdXNlUHJlZml4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlUHJlZml4LmpzJztcbmltcG9ydCB7IHVzZVByZXNzYWJsZSB9IGZyb20gJy4vdXNlUHJlc3NhYmxlLmpzJztcbmltcG9ydCBkZXByZWNhdGUgZnJvbSAnLi4vLi4vcHJvcC10eXBlcy9kZXByZWNhdGUuanMnO1xuaW1wb3J0IHsgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VFdmVudC5qcyc7XG5pbXBvcnQgeyB1c2VNYXRjaE1lZGlhIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlTWF0Y2hNZWRpYS5qcyc7XG5pbXBvcnQgeyBtYXRjaGVzLCBtYXRjaCB9IGZyb20gJy4uLy4uL2ludGVybmFsL2tleWJvYXJkL21hdGNoLmpzJztcbmltcG9ydCB7IEFycm93UmlnaHQsIEFycm93TGVmdCwgSG9tZSwgRW5kLCBEZWxldGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9rZXlib2FyZC9rZXlzLmpzJztcblxudmFyIF9DaGV2cm9uTGVmdCwgX0NoZXZyb25SaWdodCwgX0Nsb3NlO1xuXG4vLyBVc2VkIHRvIG1hbmFnZSB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgVGFic1xuXG5jb25zdCBUYWJzQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVDb250ZXh0KHtcbiAgYmFzZUlkOiAnJyxcbiAgYWN0aXZlSW5kZXg6IDAsXG4gIGRlZmF1bHRTZWxlY3RlZEluZGV4OiAwLFxuICBkaXNtaXNzYWJsZTogZmFsc2UsXG4gIG9uVGFiQ2xvc2VSZXF1ZXN0KCkge30sXG4gIHNldEFjdGl2ZUluZGV4KCkge30sXG4gIHNlbGVjdGVkSW5kZXg6IDAsXG4gIHNldFNlbGVjdGVkSW5kZXgoKSB7fVxufSk7XG5cbi8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwb3NpdGlvbiBpbiBhIHRhYmxpc3RcbmNvbnN0IFRhYkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlQ29udGV4dCh7XG4gIGluZGV4OiAwLFxuICBoYXNTZWNvbmRhcnlMYWJlbDogZmFsc2Vcbn0pO1xuY29uc3QgbGdNZWRpYVF1ZXJ5ID0gYChtaW4td2lkdGg6ICR7YnJlYWtwb2ludHMubGcud2lkdGh9KWA7XG5cbi8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwb3NpdGlvbiBpbiBhIGxpc3Qgb2YgdGFiIHBhbmVsc1xuY29uc3QgVGFiUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUNvbnRleHQoMCk7XG5cbi8qKlxuICogVGFic1xuICovXG5cbmZ1bmN0aW9uIFRhYnMoX3JlZikge1xuICBsZXQge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlZmF1bHRTZWxlY3RlZEluZGV4ID0gMCxcbiAgICBvbkNoYW5nZSxcbiAgICBzZWxlY3RlZEluZGV4OiBjb250cm9sbGVkU2VsZWN0ZWRJbmRleCxcbiAgICBkaXNtaXNzYWJsZSxcbiAgICBvblRhYkNsb3NlUmVxdWVzdFxuICB9ID0gX3JlZjtcbiAgY29uc3QgYmFzZUlkID0gdXNlSWQoJ2NjcycpO1xuICAvLyBUaGUgYWN0aXZlIGluZGV4IGlzIHVzZWQgdG8gdHJhY2sgdGhlIGVsZW1lbnQgd2hpY2ggaGFzIGZvY3VzIGluIG91ciB0YWJsaXN0XG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoZGVmYXVsdFNlbGVjdGVkSW5kZXgpO1xuICAvLyBUaGUgc2VsZWN0ZWQgaW5kZXggaXMgdXNlZCBmb3IgdGhlIHRhYi9wYW5lbCBwYWlyaW5nIHdoaWNoIGlzIFwidmlzaWJsZVwiXG4gIGNvbnN0IFtzZWxlY3RlZEluZGV4LCBzZXRTZWxlY3RlZEluZGV4XSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICB2YWx1ZTogY29udHJvbGxlZFNlbGVjdGVkSW5kZXgsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0U2VsZWN0ZWRJbmRleCxcbiAgICBvbkNoYW5nZTogdmFsdWUgPT4gb25DaGFuZ2U/Lih7XG4gICAgICBzZWxlY3RlZEluZGV4OiB2YWx1ZVxuICAgIH0pXG4gIH0pO1xuICBjb25zdCB2YWx1ZSA9IHtcbiAgICBiYXNlSWQsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgZGVmYXVsdFNlbGVjdGVkSW5kZXgsXG4gICAgZGlzbWlzc2FibGUsXG4gICAgb25UYWJDbG9zZVJlcXVlc3QsXG4gICAgc2V0QWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJbmRleCxcbiAgICBzZXRTZWxlY3RlZEluZGV4XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUYWJzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5UYWJzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBgVGFic2AuXG4gICAqIFRoZXNlIGVsZW1lbnRzIHNob3VsZCByZW5kZXIgZWl0aGVyIGBUYWJzTGlzdGAgb3IgYFRhYnNQYW5lbHNgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoaWNoIGNvbnRlbnQgdGFiIHNob3VsZCBiZSBpbml0aWFsbHkgc2VsZWN0ZWQgd2hlbiB0aGUgY29tcG9uZW50XG4gICAqIGlzIGZpcnN0IHJlbmRlcmVkXG4gICAqL1xuICBkZWZhdWx0U2VsZWN0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlbmRlciBUYWIgY2hpbGRyZW4gc2hvdWxkIGJlIGRpc21pc3NhYmxlLlxuICAgKi9cbiAgZGlzbWlzc2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvdmlkZSBhbiBvcHRpb25hbCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIHRoZVxuICAgKiBgVGFic2AgY2hhbmdlc1xuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgc3BlY2lmeWluZyB0aGUgYG9uVGFiQ2xvc2VSZXF1ZXN0YCBwcm9wLCBwcm92aWRlIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIHRoZSB0YWIgd2hlbiBjbG9zZSBidXR0b24gaXMgcHJlc3NlZCBvbiBvbmUgb2YgdGhlIFRhYiBlbGVtZW50c1xuICAgKi9cbiAgb25UYWJDbG9zZVJlcXVlc3Q6IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzbWlzc2FibGUgJiYgIXByb3BzLm9uVGFiQ2xvc2VSZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdkaXNtaXNzYWJsZSBwcm9wZXJ0eSBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHByb3ZpZGluZyBhbiBvblRhYkNsb3NlUmVxdWVzdCBwcm9wZXJ0eS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcbiAgLyoqXG4gICAqIENvbnRyb2wgd2hpY2ggY29udGVudCBwYW5lbCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIFRoaXMgcHV0cyB0aGUgY29tcG9uZW50XG4gICAqIGluIGEgY29udHJvbGxlZCBtb2RlIGFuZCBzaG91bGQgYmUgdXNlZCBhbG9uZyB3aXRoIGBvbkNoYW5nZWBcbiAgICovXG4gIHNlbGVjdGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGluZGV4IGZvciBhIGdpdmVuIGtleWJvYXJkIGV2ZW50XG4gKiBnaXZlbiBhIGNvdW50IG9mIHRoZSB0b3RhbCBpdGVtcyBhbmQgdGhlIGN1cnJlbnQgaW5kZXhcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dEluZGV4KGV2ZW50LCB0b3RhbCwgaW5kZXgpIHtcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSBtYXRjaChldmVudCwgQXJyb3dSaWdodCk6XG4gICAgICByZXR1cm4gKGluZGV4ICsgMSkgJSB0b3RhbDtcbiAgICBjYXNlIG1hdGNoKGV2ZW50LCBBcnJvd0xlZnQpOlxuICAgICAgcmV0dXJuICh0b3RhbCArIGluZGV4IC0gMSkgJSB0b3RhbDtcbiAgICBjYXNlIG1hdGNoKGV2ZW50LCBIb21lKTpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgbWF0Y2goZXZlbnQsIEVuZCk6XG4gICAgICByZXR1cm4gdG90YWwgLSAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaW5kZXg7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWJMaXN0XG4gKi9cblxuZnVuY3Rpb24gVGFiTGlzdChfcmVmMikge1xuICBsZXQge1xuICAgIGFjdGl2YXRpb24gPSAnYXV0b21hdGljJyxcbiAgICAnYXJpYS1sYWJlbCc6IGxhYmVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZTogY3VzdG9tQ2xhc3NOYW1lLFxuICAgIGNvbnRhaW5lZCA9IGZhbHNlLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGljb25TaXplLFxuICAgIGxlZnRPdmVyZmxvd0J1dHRvblByb3BzLFxuICAgIGxpZ2h0LFxuICAgIHJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wcyxcbiAgICBzY3JvbGxEZWJvdW5jZVdhaXQgPSAyMDAsXG4gICAgc2Nyb2xsSW50b1ZpZXcsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBzZWxlY3RlZEluZGV4LFxuICAgIHNldFNlbGVjdGVkSW5kZXgsXG4gICAgc2V0QWN0aXZlSW5kZXgsXG4gICAgZGlzbWlzc2FibGVcbiAgfSA9IFJlYWN0X19kZWZhdWx0LnVzZUNvbnRleHQoVGFic0NvbnRleHQpO1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgcmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBwcmV2aW91c0J1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgbmV4dEJ1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2lzU2Nyb2xsYWJsZSwgc2V0SXNTY3JvbGxhYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Njcm9sbExlZnQsIHNldFNjcm9sbExlZnRdID0gdXNlU3RhdGUoMCk7XG4gIGxldCBoYXNTZWNvbmRhcnlMYWJlbFRhYnMgPSBmYWxzZTtcbiAgaWYgKGNvbnRhaW5lZCkge1xuICAgIGhhc1NlY29uZGFyeUxhYmVsVGFicyA9IFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLnNvbWUoY2hpbGQgPT4ge1xuICAgICAgcmV0dXJuIGlzRWxlbWVudChjaGlsZCkgJiYgISFjaGlsZC5wcm9wcy5zZWNvbmRhcnlMYWJlbDtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBpc0xnID0gdXNlTWF0Y2hNZWRpYShsZ01lZGlhUXVlcnkpO1xuICBjb25zdCBkaXN0cmlidXRlV2lkdGggPSBmdWxsV2lkdGggJiYgY29udGFpbmVkICYmIGlzTGcgJiYgUmVhY3RfX2RlZmF1bHQuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikubGVuZ3RoIDwgOTtcbiAgY29uc3QgY2xhc3NOYW1lID0gY3goYCR7cHJlZml4fS0tdGFic2AsIHtcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tY29udGFpbmVkYF06IGNvbnRhaW5lZCxcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tbGlnaHRgXTogbGlnaHQsXG4gICAgW2Ake3ByZWZpeH0tLXRhYnNfX2ljb24tLWRlZmF1bHRgXTogaWNvblNpemUgPT09ICdkZWZhdWx0JyxcbiAgICBbYCR7cHJlZml4fS0tdGFic19faWNvbi0tbGdgXTogaWNvblNpemUgPT09ICdsZycsXG4gICAgLy8gVE9ETzogVjEyIC0gUmVtb3ZlIHRoaXMgY2xhc3NcbiAgICBbYCR7cHJlZml4fS0tbGF5b3V0LS1zaXplLWxnYF06IGljb25TaXplID09PSAnbGcnLFxuICAgIFtgJHtwcmVmaXh9LS10YWJzLS10YWxsYF06IGhhc1NlY29uZGFyeUxhYmVsVGFicyxcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tZnVsbC13aWR0aGBdOiBkaXN0cmlidXRlV2lkdGhcbiAgfSwgY3VzdG9tQ2xhc3NOYW1lKTtcblxuICAvLyBQcmV2aW91cyBCdXR0b25cbiAgLy8gVklTSUJMRSBJRjpcbiAgLy8gICBTQ1JPTExBQkxFXG4gIC8vICAgQU5EIFNDUk9MTF9MRUZUID4gMFxuICBjb25zdCBidXR0b25XaWR0aCA9IDQ0O1xuICAvLyBOZXh0IEJ1dHRvblxuICAvLyBWSVNJQkxFIElGOlxuICAvLyAgIFNDUk9MTEFCTEVcbiAgLy8gICBBTkQgU0NST0xMX0xFRlQgKyBDTElFTlRfV0lEVEggPCBTQ1JPTExfV0lEVEhcbiAgY29uc3QgW2lzTmV4dEJ1dHRvblZpc2libGUsIHNldElzTmV4dEJ1dHRvblZpc2libGVdID0gdXNlU3RhdGUocmVmLmN1cnJlbnQgPyBzY3JvbGxMZWZ0ICsgYnV0dG9uV2lkdGggKyByZWYuY3VycmVudC5jbGllbnRXaWR0aCA8IHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoIDogZmFsc2UpO1xuICBjb25zdCBpc1ByZXZpb3VzQnV0dG9uVmlzaWJsZSA9IHJlZi5jdXJyZW50ID8gaXNTY3JvbGxhYmxlICYmIHNjcm9sbExlZnQgPiAwIDogZmFsc2U7XG4gIGNvbnN0IHByZXZpb3VzQnV0dG9uQ2xhc3NlcyA9IGN4KGAke3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbmAsIGAke3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0tcHJldmlvdXNgLCB7XG4gICAgW2Ake3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0taGlkZGVuYF06ICFpc1ByZXZpb3VzQnV0dG9uVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgbmV4dEJ1dHRvbkNsYXNzZXMgPSBjeChgJHtwcmVmaXh9LS10YWItLW92ZXJmbG93LW5hdi1idXR0b25gLCBgJHtwcmVmaXh9LS10YWItLW92ZXJmbG93LW5hdi1idXR0b24tLW5leHRgLCB7XG4gICAgW2Ake3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0taGlkZGVuYF06ICFpc05leHRCdXR0b25WaXNpYmxlXG4gIH0pO1xuICBjb25zdCB0YWJzID0gdXNlUmVmKFtdKTtcbiAgY29uc3QgZGVib3VuY2VkT25TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIGRlYm91bmNlKGV2ZW50ID0+IHtcbiAgICAgIHNldFNjcm9sbExlZnQoZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQpO1xuICAgIH0sIHNjcm9sbERlYm91bmNlV2FpdCk7XG4gIH0sIFtzY3JvbGxEZWJvdW5jZVdhaXRdKTtcbiAgZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKG1hdGNoZXMoZXZlbnQsIFtBcnJvd1JpZ2h0LCBBcnJvd0xlZnQsIEhvbWUsIEVuZF0pKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgYWN0aXZlVGFicyA9IHRhYnMuY3VycmVudC5maWx0ZXIodGFiID0+ICF0YWIuZGlzYWJsZWQpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWN0aXZlVGFicy5pbmRleE9mKHRhYnMuY3VycmVudFthY3RpdmF0aW9uID09PSAnYXV0b21hdGljJyA/IHNlbGVjdGVkSW5kZXggOiBhY3RpdmVJbmRleF0pO1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGFicy5jdXJyZW50LmluZGV4T2YoYWN0aXZlVGFic1tnZXROZXh0SW5kZXgoZXZlbnQsIGFjdGl2ZVRhYnMubGVuZ3RoLCBjdXJyZW50SW5kZXgpXSk7XG4gICAgICBpZiAoYWN0aXZhdGlvbiA9PT0gJ2F1dG9tYXRpYycpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChuZXh0SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnbWFudWFsJykge1xuICAgICAgICBzZXRBY3RpdmVJbmRleChuZXh0SW5kZXgpO1xuICAgICAgfVxuICAgICAgdGFicy5jdXJyZW50W25leHRJbmRleF0/LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIHVzZUVmZmVjdE9uY2UoKCkgPT4ge1xuICAgIGNvbnN0IHRhYiA9IHRhYnMuY3VycmVudFtzZWxlY3RlZEluZGV4XTtcbiAgICBpZiAoc2Nyb2xsSW50b1ZpZXcgJiYgdGFiKSB7XG4gICAgICB0YWIuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc05leHRCdXR0b25WaXNpYmxlKHJlZi5jdXJyZW50ID8gc2Nyb2xsTGVmdCArIGJ1dHRvbldpZHRoICsgcmVmLmN1cnJlbnQuY2xpZW50V2lkdGggPCByZWYuY3VycmVudC5zY3JvbGxXaWR0aCA6IGZhbHNlKTtcbiAgICBpZiAoZGlzbWlzc2FibGUpIHtcbiAgICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgICBzZXRJc1Njcm9sbGFibGUocmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5jbGllbnRXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2Nyb2xsTGVmdCwgY2hpbGRyZW4sIGRpc21pc3NhYmxlXSk7XG4gIHVzZUVmZmVjdE9uY2UoKCkgPT4ge1xuICAgIGlmICh0YWJzLmN1cnJlbnRbc2VsZWN0ZWRJbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVRhYnMgPSB0YWJzLmN1cnJlbnQuZmlsdGVyKHRhYiA9PiB7XG4gICAgICAgIHJldHVybiAhdGFiLmRpc2FibGVkO1xuICAgICAgfSk7XG4gICAgICBpZiAoYWN0aXZlVGFicy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IGFjdGl2ZVRhYnNbMF07XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgodGFicy5jdXJyZW50LmluZGV4T2YodGFiKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdXNlSXNvbW9ycGhpY0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICBzZXRJc1Njcm9sbGFibGUocmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5jbGllbnRXaWR0aCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0SXNTY3JvbGxhYmxlKHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gcmVmLmN1cnJlbnQuY2xpZW50V2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZWJvdW5jZWRIYW5kbGVyID0gZGVib3VuY2UoaGFuZGxlciwgMjAwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkSGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRlYm91bmNlZEhhbmRsZXIuY2FuY2VsKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkSGFuZGxlcik7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIHVwZGF0ZXMgc2Nyb2xsIGxvY2F0aW9uIGZvciBhbGwgc2Nyb2xsIGJlaGF2aW9yLlxuICB1c2VJc29tb3JwaGljRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gbnVsbCAmJiByZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgfVxuICB9LCBbc2Nyb2xsTGVmdF0pO1xuICB1c2VJc29tb3JwaGljRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzU2Nyb2xsYWJsZSB8fCAhcmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFiID0gYWN0aXZhdGlvbiA9PT0gJ21hbnVhbCcgPyB0YWJzLmN1cnJlbnRbYWN0aXZlSW5kZXhdIDogdGFicy5jdXJyZW50W3NlbGVjdGVkSW5kZXhdO1xuICAgIGlmICh0YWIpIHtcbiAgICAgIC8vIFRoZSB3aWR0aCBvZiB0aGUgXCJzY3JvbGwgYnV0dG9uc1wiXG5cbiAgICAgIC8vIFRoZSBzdGFydCBhbmQgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCB0YWJcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGg6IHRhYldpZHRoXG4gICAgICB9ID0gdGFiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0YWIub2Zmc2V0TGVmdDtcbiAgICAgIGNvbnN0IGVuZCA9IHRhYi5vZmZzZXRMZWZ0ICsgdGFiV2lkdGg7XG5cbiAgICAgIC8vIFRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB2aXNpYmxlIGFyZWEgZm9yIHRoZSB0YWJzXG4gICAgICBjb25zdCB2aXNpYmxlU3RhcnQgPSByZWYuY3VycmVudC5zY3JvbGxMZWZ0ICsgYnV0dG9uV2lkdGg7XG4gICAgICBjb25zdCB2aXNpYmxlRW5kID0gcmVmLmN1cnJlbnQuc2Nyb2xsTGVmdCArIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoIC0gYnV0dG9uV2lkdGg7XG5cbiAgICAgIC8vIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhYiBpcyBjbGlwcGVkIGFuZCBub3QgdmlzaWJsZVxuICAgICAgaWYgKHN0YXJ0IDwgdmlzaWJsZVN0YXJ0KSB7XG4gICAgICAgIHNldFNjcm9sbExlZnQoc3RhcnQgLSBidXR0b25XaWR0aCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBlbmQgb2YgdGhlIHRhYiBpcyBjbGlwcGVkIGFuZCBub3QgdmlzaWJsZVxuICAgICAgaWYgKGVuZCA+IHZpc2libGVFbmQpIHtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChlbmQgKyBidXR0b25XaWR0aCAtIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthY3RpdmF0aW9uLCBhY3RpdmVJbmRleCwgc2VsZWN0ZWRJbmRleCwgaXNTY3JvbGxhYmxlLCBjaGlsZHJlbl0pO1xuICB1c2VQcmVzc2FibGUocHJldmlvdXNCdXR0b24sIHtcbiAgICBvblByZXNzKF9yZWYzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBsb25nUHJlc3NcbiAgICAgIH0gPSBfcmVmMztcbiAgICAgIGlmICghbG9uZ1ByZXNzICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldFNjcm9sbExlZnQoTWF0aC5tYXgoc2Nyb2xsTGVmdCAtIHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoIC8gdGFicy5jdXJyZW50Lmxlbmd0aCAqIDEuNSwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Mb25nUHJlc3MoKSB7XG4gICAgICByZXR1cm4gY3JlYXRlTG9uZ1ByZXNzQmVoYXZpb3IocmVmLCAnYmFja3dhcmQnLCBzZXRTY3JvbGxMZWZ0KTtcbiAgICB9XG4gIH0pO1xuICB1c2VQcmVzc2FibGUobmV4dEJ1dHRvbiwge1xuICAgIG9uUHJlc3MoX3JlZjQpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGxvbmdQcmVzc1xuICAgICAgfSA9IF9yZWY0O1xuICAgICAgaWYgKCFsb25nUHJlc3MgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChNYXRoLm1pbihzY3JvbGxMZWZ0ICsgcmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggLyB0YWJzLmN1cnJlbnQubGVuZ3RoICogMS41LCByZWYuY3VycmVudC5zY3JvbGxXaWR0aCAtIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkxvbmdQcmVzcygpIHtcbiAgICAgIHJldHVybiBjcmVhdGVMb25nUHJlc3NCZWhhdmlvcihyZWYsICdmb3J3YXJkJywgc2V0U2Nyb2xsTGVmdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiU2Nyb2xsIGxlZnRcIixcbiAgICByZWY6IHByZXZpb3VzQnV0dG9uLFxuICAgIGNsYXNzTmFtZTogcHJldmlvdXNCdXR0b25DbGFzc2VzLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSwgbGVmdE92ZXJmbG93QnV0dG9uUHJvcHMpLCBfQ2hldnJvbkxlZnQgfHwgKF9DaGV2cm9uTGVmdCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KENoZXZyb25MZWZ0LCBudWxsKSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbCxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInRhYmxpc3RcIixcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYi0tbGlzdGAsXG4gICAgb25TY3JvbGw6IGRlYm91bmNlZE9uU2Nyb2xsLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0pLCBSZWFjdF9fZGVmYXVsdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gIWlzRWxlbWVudChjaGlsZCkgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVGFiQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGhhc1NlY29uZGFyeUxhYmVsOiBoYXNTZWNvbmRhcnlMYWJlbFRhYnMsXG4gICAgICAgIGNvbnRhaW5lZFxuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIHJlZjogbm9kZSA9PiB7XG4gICAgICAgIHRhYnMuY3VycmVudFtpbmRleF0gPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiU2Nyb2xsIHJpZ2h0XCIsXG4gICAgcmVmOiBuZXh0QnV0dG9uLFxuICAgIGNsYXNzTmFtZTogbmV4dEJ1dHRvbkNsYXNzZXMsXG4gICAgdHlwZTogXCJidXR0b25cIlxuICB9LCByaWdodE92ZXJmbG93QnV0dG9uUHJvcHMpLCBfQ2hldnJvblJpZ2h0IHx8IChfQ2hldnJvblJpZ2h0ID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0LCBudWxsKSkpKTtcbn1cblRhYkxpc3QucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBjb250ZW50IHRhYiBzaG91bGQgYmUgYWN0aXZhdGVkIGF1dG9tYXRpY2FsbHkgb3JcbiAgICogbWFudWFsbHlcbiAgICovXG4gIGFjdGl2YXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2F1dG9tYXRpYycsICdtYW51YWwnXSksXG4gIC8qKlxuICAgKiBQcm92aWRlIGFuIGFjY2Vzc2libGUgbGFiZWwgdG8gYmUgcmVhZCB3aGVuIGEgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGlzXG4gICAqIGNvbXBvbmVudFxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm92aWRlIGNoaWxkIGVsZW1lbnRzIHRvIGJlIHJlbmRlcmVkIGluc2lkZSBgQ29udGVudFRhYnNgLlxuICAgKiBUaGVzZSBlbGVtZW50cyBzaG91bGQgcmVuZGVyIGEgYENvbnRlbnRUYWJgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB0aGUgY29udGFpbmVyIG5vZGVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciBjb21wb25lbnQgaXMgY29udGFpbmVkIHR5cGVcbiAgICovXG4gIGNvbnRhaW5lZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBVc2VkIGZvciB0YWJzIHdpdGhpbiBhIGdyaWQsIHRoaXMgbWFrZXMgaXQgc28gdGFicyBzcGFuIHRoZSBmdWxsIGNvbnRhaW5lciB3aWR0aCBhbmQgaGF2ZSB0aGUgc2FtZSB3aWR0aC4gT25seSBhdmFpbGFibGUgb24gY29udGFpbmVkIHRhYnMgd2l0aCA8OSBjaGlsZHJlblxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIHVzaW5nIGBJY29uVGFiYCwgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBiZWluZyB1c2VkLlxuICAgKi9cbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAnbGcnXSksXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBwcm9wcyB0aGF0IGRlc2NyaWJlIHRoZSBsZWZ0IG92ZXJmbG93IGJ1dHRvblxuICAgKi9cbiAgbGVmdE92ZXJmbG93QnV0dG9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSBsaWdodCBjb21wb25lbnQgdmFyaWFudFxuICAgKi9cbiAgbGlnaHQ6IGRlcHJlY2F0ZShQcm9wVHlwZXMuYm9vbCwgJ1RoZSBgbGlnaHRgIHByb3AgZm9yIGBUYWJMaXN0YCBoYXMgJyArICdiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBgTGF5ZXJgIGNvbXBvbmVudC4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuJyksXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBwcm9wcyB0aGF0IGRlc2NyaWJlIHRoZSByaWdodCBvdmVyZmxvdyBidXR0b25cbiAgICovXG4gIHJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgcHJvdmlkZSBhIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIHBhc3NlZCB0byB0aGUgbG9kYXNoXG4gICAqIGRlYm91bmNlIG9mIHRoZSBvblNjcm9sbCBoYW5kbGVyLiBUaGlzIHdpbGwgaW1wYWN0IHRoZSByZXNwb25zaXZlbmVzc1xuICAgKiBvZiBzY3JvbGwgYXJyb3cgYnV0dG9ucyByZW5kZXJpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGZpcnN0IG9yIGxhc3QgdGFiLlxuICAgKi9cbiAgc2Nyb2xsRGVib3VuY2VXYWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogQ2hvb3NlIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzY3JvbGxcbiAgICogdG8gbmV3bHkgc2VsZWN0ZWQgdGFicyBvbiBjb21wb25lbnQgcmVyZW5kZXJcbiAgICovXG4gIHNjcm9sbEludG9WaWV3OiBQcm9wVHlwZXMuYm9vbFxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSBiZWhhdmlvciB3aGVuIGEgYnV0dG9uIGlzIFwibG9uZyBwcmVzc2VkXCIuXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZiB0byB0aGUgdGFibGlzdCwgYSBkaXJlY3Rpb24sIGFuZCBhIHNldHRlclxuICogZm9yIHNjcm9sbExlZnQgYW5kIHdpbGwgdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gd2l0aGluIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuICpcbiAqIEl0IHJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIHJ1blxuICogd2hlbiB0aGUgbG9uZyBwcmVzcyBpcyBkZWFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVMb25nUHJlc3NCZWhhdmlvcihyZWYsIGRpcmVjdGlvbiwgc2V0U2Nyb2xsTGVmdCkge1xuICBjb25zdCBub2RlID0gcmVmLmN1cnJlbnQ7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIC8vIFdlIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSBzY3JvbGwgYmVoYXZpb3IgdG8gYmUgXCJhdXRvXCIuXG4gIC8vIElmIGl0IGlzIHNldCBhcyBzbW9vdGgsIHRoaXMgYW5pbWF0aW9uIGRvZXMgbm90IHVwZGF0ZSBjb3JyZWN0bHlcbiAgY29uc3QgZGVmYXVsdFNjcm9sbEJlaGF2aW9yID0gbm9kZT8uc3R5bGVbJ3Njcm9sbC1iZWhhdmlvciddO1xuICBub2RlLnN0eWxlWydzY3JvbGwtYmVoYXZpb3InXSA9ICdhdXRvJztcbiAgY29uc3Qgc2Nyb2xsRGVsdGEgPSBkaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IDUgOiAtNTtcbiAgbGV0IGZyYW1lSWQgPSBudWxsO1xuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNjcm9sbExlZnQgPSBub2RlLnNjcm9sbExlZnQgKyBzY3JvbGxEZWx0YTtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICB9XG4gIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgLy8gUmVzdG9yZSB0aGUgcHJldmlvdXMgc2Nyb2xsIGJlaGF2aW9yXG4gICAgbm9kZS5zdHlsZVsnc2Nyb2xsLWJlaGF2aW9yJ10gPSBkZWZhdWx0U2Nyb2xsQmVoYXZpb3I7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgYHNjcm9sbExlZnRgIHZhbHVlIGlzIGluIHN5bmMgd2l0aCB0aGUgZXhpc3RpbmdcbiAgICAvLyBgcmVmYCBhZnRlciBvdXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AgYWJvdmVcbiAgICBzZXRTY3JvbGxMZWZ0KG5vZGUuc2Nyb2xsTGVmdCk7XG4gICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUYWJcbiAqL1xuXG5jb25zdCBUYWIgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiBUYWIoX3JlZjUsIGZvcndhcmRSZWYpIHtcbiAgbGV0IHtcbiAgICBhcyA9ICdidXR0b24nLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZTogY3VzdG9tQ2xhc3NOYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIHNlY29uZGFyeUxhYmVsLFxuICAgIHJlbmRlckljb246IEljb24sXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjU7XG4gIGNvbnN0IHByZWZpeCA9IHVzZVByZWZpeCgpO1xuICBjb25zdCB7XG4gICAgc2VsZWN0ZWRJbmRleCxcbiAgICBzZXRTZWxlY3RlZEluZGV4LFxuICAgIGJhc2VJZCxcbiAgICBkaXNtaXNzYWJsZSxcbiAgICBvblRhYkNsb3NlUmVxdWVzdFxuICB9ID0gUmVhY3RfX2RlZmF1bHQudXNlQ29udGV4dChUYWJzQ29udGV4dCk7XG4gIGNvbnN0IHtcbiAgICBpbmRleCxcbiAgICBoYXNTZWNvbmRhcnlMYWJlbCxcbiAgICBjb250YWluZWRcbiAgfSA9IFJlYWN0X19kZWZhdWx0LnVzZUNvbnRleHQoVGFiQ29udGV4dCk7XG4gIGNvbnN0IGRpc21pc3NJY29uUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB0YWJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlZiA9IHVzZU1lcmdlZFJlZnMoW2ZvcndhcmRSZWYsIHRhYlJlZl0pO1xuICBjb25zdCBbaWdub3JlSG92ZXIsIHNldElnbm9yZUhvdmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWQgPSBgJHtiYXNlSWR9LXRhYi0ke2luZGV4fWA7XG4gIGNvbnN0IHBhbmVsSWQgPSBgJHtiYXNlSWR9LXRhYnBhbmVsLSR7aW5kZXh9YDtcbiAgY29uc3QgY2xhc3NOYW1lID0gY3goYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW1gLCBgJHtwcmVmaXh9LS10YWJzX19uYXYtbGlua2AsIHtcbiAgICBbYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLXNlbGVjdGVkYF06IHNlbGVjdGVkSW5kZXggPT09IGluZGV4LFxuICAgIFtgJHtwcmVmaXh9LS10YWJzX19uYXYtaXRlbS0tZGlzYWJsZWRgXTogZGlzYWJsZWQsXG4gICAgW2Ake3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1ob3Zlci1vZmZgXTogaWdub3JlSG92ZXJcbiAgfSwgY3VzdG9tQ2xhc3NOYW1lKTtcbiAgY29uc3QgQmFzZUNvbXBvbmVudCA9IGFzO1xuICBjb25zdCBvbkRpc21pc3NJY29uTW91c2VFbnRlciA9IGV2dCA9PiB7XG4gICAgaWYgKGNvbnRhaW5lZCAmJiB0YWJSZWYuY3VycmVudCkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgc2V0SWdub3JlSG92ZXIodHJ1ZSk7XG4gICAgICB0YWJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1ob3Zlci1vZmZgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIGlmIChjb250YWluZWQgJiYgdGFiUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRhYlJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWhvdmVyLW9mZmApO1xuICAgICAgc2V0SWdub3JlSG92ZXIoZmFsc2UpO1xuICAgIH1cbiAgfTtcbiAgdXNlRXZlbnQoZGlzbWlzc0ljb25SZWYsICdtb3VzZW92ZXInLCBvbkRpc21pc3NJY29uTW91c2VFbnRlcik7XG4gIHVzZUV2ZW50KGRpc21pc3NJY29uUmVmLCAnbW91c2VsZWF2ZScsIG9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBldnQgPT4ge1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvblRhYkNsb3NlUmVxdWVzdD8uKGluZGV4KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZGlzbWlzc2FibGUgJiYgbWF0Y2goZXZlbnQsIERlbGV0ZSkpIHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgb25LZXlEb3duPy4oZXZlbnQpO1xuICB9O1xuICBjb25zdCBEaXNtaXNzSWNvbiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcbiAgUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcm9sZTogXCJidXR0b25cIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY3goYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWNsb3NlLWljb25gLCB7XG4gICAgICBbYCR7cHJlZml4fS0tdmlzdWFsbHktaGlkZGVuYF06ICFkaXNtaXNzYWJsZVxuICAgIH0pLFxuICAgIG9uQ2xpY2s6IGhhbmRsZUNsb3NlLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlIHRhYlwiLFxuICAgIHRpdGxlOiBcIkNsb3NlIHRhYlwiLFxuICAgIHJlZjogZGlzbWlzc0ljb25SZWZcbiAgfSwgX0Nsb3NlIHx8IChfQ2xvc2UgPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChDbG9zZSwgbnVsbCkpKTtcbiAgY29uc3QgaGFzSWNvbiA9IEljb24gPz8gZGlzbWlzc2FibGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCYXNlQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1jb250cm9sc1wiOiBwYW5lbElkLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXgsXG4gICAgcmVmOiByZWYsXG4gICAgaWQ6IGlkLFxuICAgIHJvbGU6IFwidGFiXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IGV2dCA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgICBvbkNsaWNrPy4oZXZ0KTtcbiAgICB9LFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXggPyAnMCcgOiAnLTEnLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLWxhYmVsLXdyYXBwZXJgXG4gIH0sIGRpc21pc3NhYmxlICYmIEljb24gJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWljb24tbGVmdGBcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHNpemU6IDE2XG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLWxhYmVsYCxcbiAgICB0aXRsZTogY2hpbGRyZW5cbiAgfSwgY2hpbGRyZW4pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjeChgJHtwcmVmaXh9LS10YWJzX19uYXYtaXRlbS0taWNvbmAsIHtcbiAgICAgIFtgJHtwcmVmaXh9LS12aXN1YWxseS1oaWRkZW5gXTogIWhhc0ljb25cbiAgICB9KVxuICB9LCBEaXNtaXNzSWNvbiwgIWRpc21pc3NhYmxlICYmIEljb24gJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHNpemU6IDE2XG4gIH0pKSksIGhhc1NlY29uZGFyeUxhYmVsICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLXNlY29uZGFyeS1sYWJlbGAsXG4gICAgdGl0bGU6IHNlY29uZGFyeUxhYmVsXG4gIH0sIHNlY29uZGFyeUxhYmVsKSk7XG59KTtcblRhYi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY3VzdG9tIGVsZW1lbnQgdG8gcmVuZGVyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnV0dG9uXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBJbnZhbGlkIHByb3AgdHlwZSBkZXJpdmF0aW9uXG4gIGFzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBUYWJgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBjbGFzc05hbWUgdG8gYmUgYWRkZWQgdG8geW91ciBUYWJcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZXRoZXIgeW91ciBUYWIgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgaGFuZGxlciB0aGF0IGlzIGludm9rZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBjb250cm9sXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCBvbiB0aGUga2V5IGRvd24gZXZlbnQgZm9yIHRoZSBjb250cm9sXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKlxuICAgKiBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gYWxsb3cgb3ZlcnJpZGluZyB0aGUgYW5jaG9yIHJlbmRlcmluZy5cbiAgICogVXNlZnVsIGZvciB1c2luZyBUYWIgYWxvbmcgd2l0aCByZWFjdC1yb3V0ZXIgb3Igb3RoZXIgY2xpZW50XG4gICAqIHNpZGUgcm91dGVyIGxpYnJhcmllcy5cbiAgICoqL1xuICByZW5kZXJCdXR0b246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogT3B0aW9uYWwgcHJvcCB0byByZW5kZXIgYW4gaWNvbiBuZXh0IHRvIHRoZSBsYWJlbC5cbiAgICogQ2FuIGJlIGEgUmVhY3QgY29tcG9uZW50IGNsYXNzXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBJbnZhbGlkIHByb3AgdHlwZSBkZXJpdmF0aW9uXG4gIHJlbmRlckljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qXG4gICAqIEFuIG9wdGlvbmFsIGxhYmVsIHRvIHJlbmRlciB1bmRlciB0aGUgcHJpbWFyeSB0YWIgbGFiZWwuXG4gIC8qIFRoaXMgcHJvcCBpcyBvbmx5IHVzZWZ1bCBmb3IgY29uYWluZWQgdGFic1xuICAgKiovXG4gIHNlY29uZGFyeUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG4vKipcbiAqIEljb25UYWJcbiAqL1xuXG5jb25zdCBJY29uVGFiID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gSWNvblRhYihfcmVmNiwgcmVmKSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lOiBjdXN0b21DbGFzc05hbWUsXG4gICAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgICBlbnRlckRlbGF5TXMsXG4gICAgbGVhdmVEZWxheU1zLFxuICAgIGxhYmVsLFxuICAgIC4uLnJlc3RcbiAgfSA9IF9yZWY2O1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGN4KGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1pY29uLW9ubHlgLCBjdXN0b21DbGFzc05hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcCwge1xuICAgIGFsaWduOiBcImJvdHRvbVwiLFxuICAgIGRlZmF1bHRPcGVuOiBkZWZhdWx0T3BlbixcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLWljb24tdG9vbHRpcGAsXG4gICAgZW50ZXJEZWxheU1zOiBlbnRlckRlbGF5TXMsXG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGxlYXZlRGVsYXlNczogbGVhdmVEZWxheU1zXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFRhYiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn0pO1xuSWNvblRhYi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGFuIGljb24gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBJY29uVGFiYCBhcyB0aGUgdmlzdWFsIGxhYmVsIGZvciBUYWIuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB5b3VyIFRhYlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSB0b29sdGlwIGZvciB0aGUgaWNvbiBzaG91bGQgYmUgb3BlbiB3aGVuIGl0IGZpcnN0IHJlbmRlcnNcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgZGlzcGxheWluZyB0aGUgdG9vbHRpcCBmb3IgdGhlIGljb24uXG4gICAqL1xuICBlbnRlckRlbGF5TXM6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBsYWJlbCB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIFRvb2x0aXAuIFRoZSBsYWJlbCB3aWxsIHVzZVxuICAgKiBgYXJpYS1sYWJlbGxlZGJ5YCBhbmQgd2lsbCBmdWxseSBkZXNjcmliZSB0aGUgY2hpbGQgbm9kZSB0aGF0IGlzIHByb3ZpZGVkLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGhhdmUgdGV4dCBpbiB0aGUgY2hpbGQgbm9kZSBpdCB3aWxsIG5vdCBiZVxuICAgKiBhbm5vdW5jZWQgdG8gdGhlIHNjcmVlbiByZWFkZXIuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwXG4gICAqL1xuICBsZWF2ZURlbGF5TXM6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbi8qKlxuICogVGFiUGFuZWxcbiAqL1xuXG5jb25zdCBUYWJQYW5lbCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRhYlBhbmVsKF9yZWY3LCBmb3J3YXJkUmVmKSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lOiBjdXN0b21DbGFzc05hbWUsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjc7XG4gIGNvbnN0IHByZWZpeCA9IHVzZVByZWZpeCgpO1xuICBjb25zdCBwYW5lbCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVmID0gdXNlTWVyZ2VkUmVmcyhbZm9yd2FyZFJlZiwgcGFuZWxdKTtcbiAgY29uc3QgW3RhYkluZGV4LCBzZXRUYWJJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2ludGVyYWN0aXZlQ29udGVudCwgc2V0SW50ZXJhY3RpdmVDb250ZW50XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIHNlbGVjdGVkSW5kZXgsXG4gICAgYmFzZUlkXG4gIH0gPSBSZWFjdF9fZGVmYXVsdC51c2VDb250ZXh0KFRhYnNDb250ZXh0KTtcbiAgY29uc3QgaW5kZXggPSBSZWFjdF9fZGVmYXVsdC51c2VDb250ZXh0KFRhYlBhbmVsQ29udGV4dCk7XG4gIGNvbnN0IGlkID0gYCR7YmFzZUlkfS10YWJwYW5lbC0ke2luZGV4fWA7XG4gIGNvbnN0IHRhYklkID0gYCR7YmFzZUlkfS10YWItJHtpbmRleH1gO1xuICBjb25zdCBjbGFzc05hbWUgPSBjeChgJHtwcmVmaXh9LS10YWItY29udGVudGAsIGN1c3RvbUNsYXNzTmFtZSwge1xuICAgIFtgJHtwcmVmaXh9LS10YWItY29udGVudC0taW50ZXJhY3RpdmVgXTogaW50ZXJhY3RpdmVDb250ZW50XG4gIH0pO1xuICB1c2VFZmZlY3RPbmNlKCgpID0+IHtcbiAgICBpZiAoIXBhbmVsLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGVudCA9IGdldEludGVyYWN0aXZlQ29udGVudChwYW5lbC5jdXJyZW50KTtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgc2V0SW50ZXJhY3RpdmVDb250ZW50KHRydWUpO1xuICAgICAgc2V0VGFiSW5kZXgoLTEpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdGFiaW5kZXggc2hvdWxkIG9ubHkgYmUgMCBpZiBubyBpbnRlcmFjdGl2ZSBjb250ZW50IGluIGNoaWxkcmVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IHBhbmVsLmN1cnJlbnQ7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgY29uc3QgY29udGVudCA9IGdldEludGVyYWN0aXZlQ29udGVudChub2RlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHNldEludGVyYWN0aXZlQ29udGVudCh0cnVlKTtcbiAgICAgICAgc2V0VGFiSW5kZXgoLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW50ZXJhY3RpdmVDb250ZW50KGZhbHNlKTtcbiAgICAgICAgc2V0VGFiSW5kZXgoMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGFiSWQsXG4gICAgaWQ6IGlkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogcmVmLFxuICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgaGlkZGVuOiBzZWxlY3RlZEluZGV4ICE9PSBpbmRleFxuICB9KSwgY2hpbGRyZW4pO1xufSk7XG5UYWJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGNoaWxkIGVsZW1lbnRzIHRvIGJlIHJlbmRlcmVkIGluc2lkZSBgVGFiUGFuZWxgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBjbGFzc05hbWUgdG8gYmUgYWRkZWQgdG8gVGFiUGFuZWwuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbi8qKlxuICogVGFiUGFuZWxzXG4gKi9cblxuZnVuY3Rpb24gVGFiUGFuZWxzKF9yZWY4KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW5cbiAgfSA9IF9yZWY4O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUYWJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBpbmRleFxuICAgIH0sIGNoaWxkKTtcbiAgfSkpO1xufVxuVGFiUGFuZWxzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBUYWJQYW5lbHNgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgeyBJY29uVGFiLCBUYWIsIFRhYkxpc3QsIFRhYlBhbmVsLCBUYWJQYW5lbHMsIFRhYnMgfTtcbiJdLCJuYW1lcyI6WyJleHRlbmRzIiwiX2V4dGVuZHMiLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIkNsb3NlIiwiYnJlYWtwb2ludHMiLCJjeCIsImRlYm91bmNlIiwiUHJvcFR5cGVzIiwiUmVhY3RfX2RlZmF1bHQiLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwiZm9yd2FyZFJlZiIsImlzRWxlbWVudCIsIlRvb2x0aXAiLCJ1c2VDb250cm9sbGFibGVTdGF0ZSIsInVzZUVmZmVjdE9uY2UiLCJ1c2VJZCIsInVzZUlzb21vcnBoaWNFZmZlY3QiLCJ1c2VNZXJnZWRSZWZzIiwiZ2V0SW50ZXJhY3RpdmVDb250ZW50IiwidXNlUHJlZml4IiwidXNlUHJlc3NhYmxlIiwiZGVwcmVjYXRlIiwidXNlRXZlbnQiLCJ1c2VNYXRjaE1lZGlhIiwibWF0Y2hlcyIsIm1hdGNoIiwiQXJyb3dSaWdodCIsIkFycm93TGVmdCIsIkhvbWUiLCJFbmQiLCJEZWxldGUiLCJfQ2hldnJvbkxlZnQiLCJfQ2hldnJvblJpZ2h0IiwiX0Nsb3NlIiwiVGFic0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiYmFzZUlkIiwiYWN0aXZlSW5kZXgiLCJkZWZhdWx0U2VsZWN0ZWRJbmRleCIsImRpc21pc3NhYmxlIiwib25UYWJDbG9zZVJlcXVlc3QiLCJzZXRBY3RpdmVJbmRleCIsInNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZEluZGV4IiwiVGFiQ29udGV4dCIsImluZGV4IiwiaGFzU2Vjb25kYXJ5TGFiZWwiLCJsZ01lZGlhUXVlcnkiLCJsZyIsIndpZHRoIiwiVGFiUGFuZWxDb250ZXh0IiwiVGFicyIsIl9yZWYiLCJjaGlsZHJlbiIsIm9uQ2hhbmdlIiwiY29udHJvbGxlZFNlbGVjdGVkSW5kZXgiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsInByb3BUeXBlcyIsIm5vZGUiLCJudW1iZXIiLCJib29sIiwiZnVuYyIsInByb3BzIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJnZXROZXh0SW5kZXgiLCJldmVudCIsInRvdGFsIiwiVGFiTGlzdCIsIl9yZWYyIiwib25LZXlEb3duIiwidGFicyIsInByZXZlbnREZWZhdWx0IiwiYWN0aXZlVGFicyIsImN1cnJlbnQiLCJmaWx0ZXIiLCJ0YWIiLCJkaXNhYmxlZCIsImN1cnJlbnRJbmRleCIsImluZGV4T2YiLCJhY3RpdmF0aW9uIiwibmV4dEluZGV4IiwibGVuZ3RoIiwiZm9jdXMiLCJsYWJlbCIsImNsYXNzTmFtZSIsImN1c3RvbUNsYXNzTmFtZSIsImNvbnRhaW5lZCIsImZ1bGxXaWR0aCIsImljb25TaXplIiwibGVmdE92ZXJmbG93QnV0dG9uUHJvcHMiLCJsaWdodCIsInJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wcyIsInNjcm9sbERlYm91bmNlV2FpdCIsInNjcm9sbEludG9WaWV3IiwicmVzdCIsInVzZUNvbnRleHQiLCJwcmVmaXgiLCJyZWYiLCJwcmV2aW91c0J1dHRvbiIsIm5leHRCdXR0b24iLCJpc1Njcm9sbGFibGUiLCJzZXRJc1Njcm9sbGFibGUiLCJzY3JvbGxMZWZ0Iiwic2V0U2Nyb2xsTGVmdCIsImhhc1NlY29uZGFyeUxhYmVsVGFicyIsIkNoaWxkcmVuIiwidG9BcnJheSIsInNvbWUiLCJjaGlsZCIsInNlY29uZGFyeUxhYmVsIiwiaXNMZyIsImRpc3RyaWJ1dGVXaWR0aCIsImJ1dHRvbldpZHRoIiwiY2xpZW50V2lkdGgiLCJzY3JvbGxXaWR0aCIsImlzTmV4dEJ1dHRvblZpc2libGUiLCJzZXRJc05leHRCdXR0b25WaXNpYmxlIiwiaXNQcmV2aW91c0J1dHRvblZpc2libGUiLCJwcmV2aW91c0J1dHRvbkNsYXNzZXMiLCJuZXh0QnV0dG9uQ2xhc3NlcyIsImRlYm91bmNlZE9uU2Nyb2xsIiwidGFyZ2V0IiwiYmxvY2siLCJpbmxpbmUiLCJoYW5kbGVyIiwiZGVib3VuY2VkSGFuZGxlciIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYW5jZWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidGFiV2lkdGgiLCJzdGFydCIsIm9mZnNldExlZnQiLCJlbmQiLCJ2aXNpYmxlU3RhcnQiLCJ2aXNpYmxlRW5kIiwib25QcmVzcyIsIl9yZWYzIiwibG9uZ1ByZXNzIiwiTWF0aCIsIm1heCIsIm9uTG9uZ1ByZXNzIiwiY3JlYXRlTG9uZ1ByZXNzQmVoYXZpb3IiLCJfcmVmNCIsIm1pbiIsInRhYkluZGV4IiwidHlwZSIsInJvbGUiLCJvblNjcm9sbCIsIm1hcCIsImNsb25lRWxlbWVudCIsIm9uZU9mIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsImRpcmVjdGlvbiIsImRlZmF1bHRTY3JvbGxCZWhhdmlvciIsInN0eWxlIiwic2Nyb2xsRGVsdGEiLCJmcmFtZUlkIiwidGljayIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiVGFiIiwiX3JlZjUiLCJhcyIsIm9uQ2xpY2siLCJyZW5kZXJJY29uIiwiSWNvbiIsImRpc21pc3NJY29uUmVmIiwidGFiUmVmIiwiaWdub3JlSG92ZXIiLCJzZXRJZ25vcmVIb3ZlciIsImlkIiwicGFuZWxJZCIsIkJhc2VDb21wb25lbnQiLCJvbkRpc21pc3NJY29uTW91c2VFbnRlciIsImV2dCIsInN0b3BQcm9wYWdhdGlvbiIsImNsYXNzTGlzdCIsImFkZCIsIm9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlIiwicmVtb3ZlIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVLZXlEb3duIiwiRGlzbWlzc0ljb24iLCJ0aXRsZSIsImhhc0ljb24iLCJzaXplIiwib25lT2ZUeXBlIiwiZWxlbWVudFR5cGUiLCJyZW5kZXJCdXR0b24iLCJJY29uVGFiIiwiX3JlZjYiLCJkZWZhdWx0T3BlbiIsImVudGVyRGVsYXlNcyIsImxlYXZlRGVsYXlNcyIsImNsYXNzTmFtZXMiLCJhbGlnbiIsIlRhYlBhbmVsIiwiX3JlZjciLCJwYW5lbCIsInNldFRhYkluZGV4IiwiaW50ZXJhY3RpdmVDb250ZW50Iiwic2V0SW50ZXJhY3RpdmVDb250ZW50IiwidGFiSWQiLCJjb250ZW50IiwiY2FsbGJhY2siLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImRpc2Nvbm5lY3QiLCJoaWRkZW4iLCJUYWJQYW5lbHMiLCJfcmVmOCIsIkZyYWdtZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/es/components/Tabs/Tabs.js\n");
2868
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IconTab: () => (/* binding */ IconTab),\n/* harmony export */ Tab: () => (/* binding */ Tab),\n/* harmony export */ TabList: () => (/* binding */ TabList),\n/* harmony export */ TabPanel: () => (/* binding */ TabPanel),\n/* harmony export */ TabPanels: () => (/* binding */ TabPanels),\n/* harmony export */ Tabs: () => (/* binding */ Tabs)\n/* harmony export */ });\n/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../_virtual/_rollupPluginBabelHelpers.js */ \"../../../node_modules/@carbon/react/es/_virtual/_rollupPluginBabelHelpers.js\");\n/* harmony import */ var _carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @carbon/icons-react */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-2.js\");\n/* harmony import */ var _carbon_icons_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @carbon/icons-react */ \"../../../node_modules/@carbon/icons-react/es/generated/bucket-3.js\");\n/* harmony import */ var _carbon_layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @carbon/layout */ \"../../../node_modules/@carbon/layout/es/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"../../../node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.debounce */ \"../../../node_modules/lodash.debounce/index.js\");\n/* harmony import */ var lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_debounce__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-is */ \"../../../node_modules/@carbon/react/node_modules/react-is/index.js\");\n/* harmony import */ var _Tooltip_Tooltip_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../Tooltip/Tooltip.js */ \"../../../node_modules/@carbon/react/es/components/Tooltip/Tooltip.js\");\n/* harmony import */ var _internal_useControllableState_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../internal/useControllableState.js */ \"../../../node_modules/@carbon/react/es/internal/useControllableState.js\");\n/* harmony import */ var _internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../internal/useEffectOnce.js */ \"../../../node_modules/@carbon/react/es/internal/useEffectOnce.js\");\n/* harmony import */ var _internal_useId_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internal/useId.js */ \"../../../node_modules/@carbon/react/es/internal/useId.js\");\n/* harmony import */ var _internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../internal/useIsomorphicEffect.js */ \"../../../node_modules/@carbon/react/es/internal/useIsomorphicEffect.js\");\n/* harmony import */ var _internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../internal/useMergedRefs.js */ \"../../../node_modules/@carbon/react/es/internal/useMergedRefs.js\");\n/* harmony import */ var _internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../internal/useNoInteractiveChildren.js */ \"../../../node_modules/@carbon/react/es/internal/useNoInteractiveChildren.js\");\n/* harmony import */ var _internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../internal/usePrefix.js */ \"../../../node_modules/@carbon/react/es/internal/usePrefix.js\");\n/* harmony import */ var _usePressable_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./usePressable.js */ \"../../../node_modules/@carbon/react/es/components/Tabs/usePressable.js\");\n/* harmony import */ var _prop_types_deprecate_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../prop-types/deprecate.js */ \"../../../node_modules/@carbon/react/es/prop-types/deprecate.js\");\n/* harmony import */ var _internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../internal/useEvent.js */ \"../../../node_modules/@carbon/react/es/internal/useEvent.js\");\n/* harmony import */ var _internal_useMatchMedia_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../internal/useMatchMedia.js */ \"../../../node_modules/@carbon/react/es/internal/useMatchMedia.js\");\n/* harmony import */ var _internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internal/keyboard/match.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/match.js\");\n/* harmony import */ var _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internal/keyboard/keys.js */ \"../../../node_modules/@carbon/react/es/internal/keyboard/keys.js\");\n/**\n * Copyright IBM Corp. 2016, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */ function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _array_with_holes(arr) {\n if (Array.isArray(arr)) return arr;\n}\nfunction _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _iterable_to_array_limit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\nfunction _non_iterable_rest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _object_without_properties(source, excluded) {\n if (source == null) return {};\n var target = _object_without_properties_loose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for(i = 0; i < sourceSymbolKeys.length; i++){\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _sliced_to_array(arr, i) {\n return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();\n}\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _ChevronLeft, _ChevronRight, _Close;\n// Used to manage the overall state of the Tabs\nvar TabsContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext({\n baseId: \"\",\n activeIndex: 0,\n defaultSelectedIndex: 0,\n dismissable: false,\n onTabCloseRequest: function onTabCloseRequest() {},\n setActiveIndex: function setActiveIndex() {},\n selectedIndex: 0,\n setSelectedIndex: function setSelectedIndex() {}\n});\n// Used to keep track of position in a tablist\nvar TabContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext({\n index: 0,\n hasSecondaryLabel: false\n});\nvar lgMediaQuery = \"(min-width: \".concat(_carbon_layout__WEBPACK_IMPORTED_MODULE_0__.breakpoints.lg.width, \")\");\n// Used to keep track of position in a list of tab panels\nvar TabPanelContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createContext(0);\n/**\n * Tabs\n */ function Tabs(_ref) {\n var children = _ref.children, _ref_defaultSelectedIndex = _ref.defaultSelectedIndex, defaultSelectedIndex = _ref_defaultSelectedIndex === void 0 ? 0 : _ref_defaultSelectedIndex, onChange = _ref.onChange, controlledSelectedIndex = _ref.selectedIndex, dismissable = _ref.dismissable, onTabCloseRequest = _ref.onTabCloseRequest;\n var baseId = (0,_internal_useId_js__WEBPACK_IMPORTED_MODULE_5__.useId)(\"ccs\");\n // The active index is used to track the element which has focus in our tablist\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(defaultSelectedIndex), 2), activeIndex = _useState[0], setActiveIndex = _useState[1];\n // The selected index is used for the tab/panel pairing which is \"visible\"\n var _useControllableState = _sliced_to_array((0,_internal_useControllableState_js__WEBPACK_IMPORTED_MODULE_6__.useControllableState)({\n value: controlledSelectedIndex,\n defaultValue: defaultSelectedIndex,\n onChange: function(value) {\n return onChange === null || onChange === void 0 ? void 0 : onChange({\n selectedIndex: value\n });\n }\n }), 2), selectedIndex = _useControllableState[0], setSelectedIndex = _useControllableState[1];\n var value = {\n baseId: baseId,\n activeIndex: activeIndex,\n defaultSelectedIndex: defaultSelectedIndex,\n dismissable: dismissable,\n onTabCloseRequest: onTabCloseRequest,\n setActiveIndex: setActiveIndex,\n selectedIndex: selectedIndex,\n setSelectedIndex: setSelectedIndex\n };\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabsContext.Provider, {\n value: value\n }, children);\n}\nTabs.propTypes = {\n /**\n * Provide child elements to be rendered inside the `Tabs`.\n * These elements should render either `TabsList` or `TabsPanels`\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify which content tab should be initially selected when the component\n * is first rendered\n */ defaultSelectedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Whether the render Tab children should be dismissable.\n */ dismissable: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Provide an optional function which is called whenever the state of the\n * `Tabs` changes\n */ onChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * If specifying the `onTabCloseRequest` prop, provide a callback function\n * responsible for removing the tab when close button is pressed on one of the Tab elements\n */ onTabCloseRequest: function(props) {\n if (props.dismissable && !props.onTabCloseRequest) {\n return new Error(\"dismissable property specified without also providing an onTabCloseRequest property.\");\n }\n return undefined;\n },\n /**\n * Control which content panel is currently selected. This puts the component\n * in a controlled mode and should be used along with `onChange`\n */ selectedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number)\n};\n/**\n * Get the next index for a given keyboard event\n * given a count of the total items and the current index\n */ function getNextIndex(event, total, index) {\n switch(true){\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowRight):\n return (index + 1) % total;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowLeft):\n return (total + index - 1) % total;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Home):\n return 0;\n case (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.End):\n return total - 1;\n default:\n return index;\n }\n}\n/**\n * TabList\n */ function TabList(_ref2) {\n var onKeyDown = function onKeyDown(event) {\n if ((0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.matches)(event, [\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowRight,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.ArrowLeft,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Home,\n _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.End\n ])) {\n var _tabs_current_nextIndex;\n event.preventDefault();\n var activeTabs = tabs.current.filter(function(tab) {\n return !tab.disabled;\n });\n var currentIndex = activeTabs.indexOf(tabs.current[activation === \"automatic\" ? selectedIndex : activeIndex]);\n var nextIndex = tabs.current.indexOf(activeTabs[getNextIndex(event, activeTabs.length, currentIndex)]);\n if (activation === \"automatic\") {\n setSelectedIndex(nextIndex);\n } else if (activation === \"manual\") {\n setActiveIndex(nextIndex);\n }\n (_tabs_current_nextIndex = tabs.current[nextIndex]) === null || _tabs_current_nextIndex === void 0 ? void 0 : _tabs_current_nextIndex.focus();\n }\n };\n var _ref2_activation = _ref2.activation, activation = _ref2_activation === void 0 ? \"automatic\" : _ref2_activation, label = _ref2[\"aria-label\"], children = _ref2.children, customClassName = _ref2.className, _ref2_contained = _ref2.contained, contained = _ref2_contained === void 0 ? false : _ref2_contained, _ref2_fullWidth = _ref2.fullWidth, fullWidth = _ref2_fullWidth === void 0 ? false : _ref2_fullWidth, iconSize = _ref2.iconSize, leftOverflowButtonProps = _ref2.leftOverflowButtonProps, light = _ref2.light, rightOverflowButtonProps = _ref2.rightOverflowButtonProps, _ref2_scrollDebounceWait = _ref2.scrollDebounceWait, scrollDebounceWait = _ref2_scrollDebounceWait === void 0 ? 200 : _ref2_scrollDebounceWait, scrollIntoView = _ref2.scrollIntoView, rest = _object_without_properties(_ref2, [\n \"activation\",\n \"aria-label\",\n \"children\",\n \"className\",\n \"contained\",\n \"fullWidth\",\n \"iconSize\",\n \"leftOverflowButtonProps\",\n \"light\",\n \"rightOverflowButtonProps\",\n \"scrollDebounceWait\",\n \"scrollIntoView\"\n ]);\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), activeIndex = _React__default_useContext.activeIndex, selectedIndex = _React__default_useContext.selectedIndex, setSelectedIndex = _React__default_useContext.setSelectedIndex, setActiveIndex = _React__default_useContext.setActiveIndex, dismissable = _React__default_useContext.dismissable;\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var ref = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var previousButton = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var nextButton = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), isScrollable = _useState[0], setIsScrollable = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(0), 2), scrollLeft = _useState1[0], setScrollLeft = _useState1[1];\n var hasSecondaryLabelTabs = false;\n if (contained) {\n hasSecondaryLabelTabs = react__WEBPACK_IMPORTED_MODULE_3___default().Children.toArray(children).some(function(child) {\n return (0,react_is__WEBPACK_IMPORTED_MODULE_4__.isElement)(child) && !!child.props.secondaryLabel;\n });\n }\n var isLg = (0,_internal_useMatchMedia_js__WEBPACK_IMPORTED_MODULE_11__.useMatchMedia)(lgMediaQuery);\n var distributeWidth = fullWidth && contained && isLg && react__WEBPACK_IMPORTED_MODULE_3___default().Children.toArray(children).length < 9;\n var _obj;\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs\"), (_obj = {}, _define_property(_obj, \"\".concat(prefix, \"--tabs--contained\"), contained), _define_property(_obj, \"\".concat(prefix, \"--tabs--light\"), light), _define_property(_obj, \"\".concat(prefix, \"--tabs__icon--default\"), iconSize === \"default\"), _define_property(_obj, \"\".concat(prefix, \"--tabs__icon--lg\"), iconSize === \"lg\"), // TODO: V12 - Remove this class\n _define_property(_obj, \"\".concat(prefix, \"--layout--size-lg\"), iconSize === \"lg\"), _define_property(_obj, \"\".concat(prefix, \"--tabs--tall\"), hasSecondaryLabelTabs), _define_property(_obj, \"\".concat(prefix, \"--tabs--full-width\"), distributeWidth), _obj), customClassName);\n // Previous Button\n // VISIBLE IF:\n // SCROLLABLE\n // AND SCROLL_LEFT > 0\n var buttonWidth = 44;\n // Next Button\n // VISIBLE IF:\n // SCROLLABLE\n // AND SCROLL_LEFT + CLIENT_WIDTH < SCROLL_WIDTH\n var _useState2 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false), 2), isNextButtonVisible = _useState2[0], setIsNextButtonVisible = _useState2[1];\n var isPreviousButtonVisible = ref.current ? isScrollable && scrollLeft > 0 : false;\n var previousButtonClasses = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab--overflow-nav-button\"), \"\".concat(prefix, \"--tab--overflow-nav-button--previous\"), _define_property({}, \"\".concat(prefix, \"--tab--overflow-nav-button--hidden\"), !isPreviousButtonVisible));\n var nextButtonClasses = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab--overflow-nav-button\"), \"\".concat(prefix, \"--tab--overflow-nav-button--next\"), _define_property({}, \"\".concat(prefix, \"--tab--overflow-nav-button--hidden\"), !isNextButtonVisible));\n var tabs = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)([]);\n var debouncedOnScroll = (0,react__WEBPACK_IMPORTED_MODULE_3__.useCallback)(function() {\n return lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(function(event) {\n setScrollLeft(event.target.scrollLeft);\n }, scrollDebounceWait);\n }, [\n scrollDebounceWait\n ]);\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n var tab = tabs.current[selectedIndex];\n if (scrollIntoView && tab) {\n tab.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\"\n });\n }\n });\n (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function() {\n setIsNextButtonVisible(ref.current ? scrollLeft + buttonWidth + ref.current.clientWidth < ref.current.scrollWidth : false);\n if (dismissable) {\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n }\n }, [\n scrollLeft,\n children,\n dismissable\n ]);\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n if (tabs.current[selectedIndex].disabled) {\n var activeTabs = tabs.current.filter(function(tab) {\n return !tab.disabled;\n });\n if (activeTabs.length > 0) {\n var tab = activeTabs[0];\n setSelectedIndex(tabs.current.indexOf(tab));\n }\n }\n });\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n var handler = function handler() {\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n };\n if (ref.current) {\n setIsScrollable(ref.current.scrollWidth > ref.current.clientWidth);\n }\n var debouncedHandler = lodash_debounce__WEBPACK_IMPORTED_MODULE_2___default()(handler, 200);\n window.addEventListener(\"resize\", debouncedHandler);\n return function() {\n debouncedHandler.cancel();\n window.removeEventListener(\"resize\", debouncedHandler);\n };\n }, []);\n // updates scroll location for all scroll behavior.\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n if (scrollLeft !== null && ref.current) {\n ref.current.scrollLeft = scrollLeft;\n }\n }, [\n scrollLeft\n ]);\n (0,_internal_useIsomorphicEffect_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(function() {\n if (!isScrollable || !ref.current) {\n return;\n }\n var tab = activation === \"manual\" ? tabs.current[activeIndex] : tabs.current[selectedIndex];\n if (tab) {\n // The width of the \"scroll buttons\"\n // The start and end position of the selected tab\n var _tab_getBoundingClientRect = tab.getBoundingClientRect(), tabWidth = _tab_getBoundingClientRect.width;\n var start = tab.offsetLeft;\n var end = tab.offsetLeft + tabWidth;\n // The start and end of the visible area for the tabs\n var visibleStart = ref.current.scrollLeft + buttonWidth;\n var visibleEnd = ref.current.scrollLeft + ref.current.clientWidth - buttonWidth;\n // The beginning of the tab is clipped and not visible\n if (start < visibleStart) {\n setScrollLeft(start - buttonWidth);\n }\n // The end of the tab is clipped and not visible\n if (end > visibleEnd) {\n setScrollLeft(end + buttonWidth - ref.current.clientWidth);\n }\n }\n }, [\n activation,\n activeIndex,\n selectedIndex,\n isScrollable,\n children\n ]);\n (0,_usePressable_js__WEBPACK_IMPORTED_MODULE_14__.usePressable)(previousButton, {\n onPress: function onPress(_ref3) {\n var longPress = _ref3.longPress;\n if (!longPress && ref.current) {\n setScrollLeft(Math.max(scrollLeft - ref.current.scrollWidth / tabs.current.length * 1.5, 0));\n }\n },\n onLongPress: function onLongPress() {\n return createLongPressBehavior(ref, \"backward\", setScrollLeft);\n }\n });\n (0,_usePressable_js__WEBPACK_IMPORTED_MODULE_14__.usePressable)(nextButton, {\n onPress: function onPress(_ref4) {\n var longPress = _ref4.longPress;\n if (!longPress && ref.current) {\n setScrollLeft(Math.min(scrollLeft + ref.current.scrollWidth / tabs.current.length * 1.5, ref.current.scrollWidth - ref.current.clientWidth));\n }\n },\n onLongPress: function onLongPress() {\n return createLongPressBehavior(ref, \"forward\", setScrollLeft);\n }\n });\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: className\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"button\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n \"aria-hidden\": \"true\",\n tabIndex: -1,\n \"aria-label\": \"Scroll left\",\n ref: previousButton,\n className: previousButtonClasses,\n type: \"button\"\n }, leftOverflowButtonProps), _ChevronLeft || (_ChevronLeft = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__.ChevronLeft, null))), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-label\": label,\n ref: ref,\n role: \"tablist\",\n className: \"\".concat(prefix, \"--tab--list\"),\n onScroll: debouncedOnScroll,\n onKeyDown: onKeyDown\n }), react__WEBPACK_IMPORTED_MODULE_3___default().Children.map(children, function(child, index) {\n return !(0,react_is__WEBPACK_IMPORTED_MODULE_4__.isElement)(child) ? null : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabContext.Provider, {\n value: {\n index: index,\n hasSecondaryLabel: hasSecondaryLabelTabs,\n contained: contained\n }\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().cloneElement(child, {\n ref: function(node) {\n tabs.current[index] = node;\n }\n }));\n })), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"button\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n \"aria-hidden\": \"true\",\n tabIndex: -1,\n \"aria-label\": \"Scroll right\",\n ref: nextButton,\n className: nextButtonClasses,\n type: \"button\"\n }, rightOverflowButtonProps), _ChevronRight || (_ChevronRight = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_16__.ChevronRight, null))));\n}\nTabList.propTypes = {\n /**\n * Specify whether the content tab should be activated automatically or\n * manually\n */ activation: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOf([\n \"automatic\",\n \"manual\"\n ]),\n /**\n * Provide an accessible label to be read when a user interacts with this\n * component\n */ \"aria-label\": (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string).isRequired,\n /**\n * Provide child elements to be rendered inside `ContentTabs`.\n * These elements should render a `ContentTab`\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to the container node\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Specify whether component is contained type\n */ contained: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Used for tabs within a grid, this makes it so tabs span the full container width and have the same width. Only available on contained tabs with <9 children\n */ fullWidth: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * If using `IconTab`, specify the size of the icon being used.\n */ iconSize: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOf([\n \"default\",\n \"lg\"\n ]),\n /**\n * Provide the props that describe the left overflow button\n */ leftOverflowButtonProps: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n /**\n * Specify whether to use the light component variant\n */ light: (0,_prop_types_deprecate_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"])((prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool), \"The `light` prop for `TabList` has \" + \"been deprecated in favor of the new `Layer` component. It will be removed in the next major release.\"),\n /**\n * Provide the props that describe the right overflow button\n */ rightOverflowButtonProps: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object),\n /**\n * Optionally provide a delay (in milliseconds) passed to the lodash\n * debounce of the onScroll handler. This will impact the responsiveness\n * of scroll arrow buttons rendering when scrolling to the first or last tab.\n */ scrollDebounceWait: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Choose whether to automatically scroll\n * to newly selected tabs on component rerender\n */ scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool)\n};\n/**\n * Helper function to set up the behavior when a button is \"long pressed\".\n * This function will take a ref to the tablist, a direction, and a setter\n * for scrollLeft and will update the scroll position within a requestAnimationFrame.\n *\n * It returns a cleanup function to be run\n * when the long press is deactivated\n */ function createLongPressBehavior(ref, direction, setScrollLeft) {\n var node = ref.current;\n if (!node) {\n return function() {};\n }\n // We manually override the scroll behavior to be \"auto\".\n // If it is set as smooth, this animation does not update correctly\n var defaultScrollBehavior = node === null || node === void 0 ? void 0 : node.style[\"scroll-behavior\"];\n node.style[\"scroll-behavior\"] = \"auto\";\n var scrollDelta = direction === \"forward\" ? 5 : -5;\n var frameId = null;\n function tick() {\n if (!node) {\n return;\n }\n node.scrollLeft = node.scrollLeft + scrollDelta;\n frameId = requestAnimationFrame(tick);\n }\n frameId = requestAnimationFrame(tick);\n return function() {\n // Restore the previous scroll behavior\n node.style[\"scroll-behavior\"] = defaultScrollBehavior;\n // Make sure that our `scrollLeft` value is in sync with the existing\n // `ref` after our requestAnimationFrame loop above\n setScrollLeft(node.scrollLeft);\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n/**\n * Tab\n */ var Tab = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_3__.forwardRef)(function Tab(_ref5, forwardRef) {\n var _ref5_as = _ref5.as, as = _ref5_as === void 0 ? \"button\" : _ref5_as, children = _ref5.children, customClassName = _ref5.className, disabled = _ref5.disabled, onClick = _ref5.onClick, onKeyDown = _ref5.onKeyDown, secondaryLabel = _ref5.secondaryLabel, Icon = _ref5.renderIcon, rest = _object_without_properties(_ref5, [\n \"as\",\n \"children\",\n \"className\",\n \"disabled\",\n \"onClick\",\n \"onKeyDown\",\n \"secondaryLabel\",\n \"renderIcon\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), selectedIndex = _React__default_useContext.selectedIndex, setSelectedIndex = _React__default_useContext.setSelectedIndex, baseId = _React__default_useContext.baseId, dismissable = _React__default_useContext.dismissable, onTabCloseRequest = _React__default_useContext.onTabCloseRequest;\n var _React__default_useContext1 = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabContext), index = _React__default_useContext1.index, hasSecondaryLabel = _React__default_useContext1.hasSecondaryLabel, contained = _React__default_useContext1.contained;\n var dismissIconRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var tabRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var ref = (0,_internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__.useMergedRefs)([\n forwardRef,\n tabRef\n ]);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), ignoreHover = _useState[0], setIgnoreHover = _useState[1];\n var id = \"\".concat(baseId, \"-tab-\").concat(index);\n var panelId = \"\".concat(baseId, \"-tabpanel-\").concat(index);\n var _obj;\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item\"), \"\".concat(prefix, \"--tabs__nav-link\"), (_obj = {}, _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--selected\"), selectedIndex === index), _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--disabled\"), disabled), _define_property(_obj, \"\".concat(prefix, \"--tabs__nav-item--hover-off\"), ignoreHover), _obj), customClassName);\n var BaseComponent = as;\n var onDismissIconMouseEnter = function(evt) {\n if (contained && tabRef.current) {\n evt.stopPropagation();\n setIgnoreHover(true);\n tabRef.current.classList.add(\"\".concat(prefix, \"--tabs__nav-item--hover-off\"));\n }\n };\n var onDismissIconMouseLeave = function() {\n if (contained && tabRef.current) {\n tabRef.current.classList.remove(\"\".concat(prefix, \"--tabs__nav-item--hover-off\"));\n setIgnoreHover(false);\n }\n };\n (0,_internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__.useEvent)(dismissIconRef, \"mouseover\", onDismissIconMouseEnter);\n (0,_internal_useEvent_js__WEBPACK_IMPORTED_MODULE_19__.useEvent)(dismissIconRef, \"mouseleave\", onDismissIconMouseLeave);\n var handleClose = function(evt) {\n evt.stopPropagation();\n onTabCloseRequest === null || onTabCloseRequest === void 0 ? void 0 : onTabCloseRequest(index);\n };\n var handleKeyDown = function(event) {\n if (dismissable && (0,_internal_keyboard_match_js__WEBPACK_IMPORTED_MODULE_8__.match)(event, _internal_keyboard_keys_js__WEBPACK_IMPORTED_MODULE_9__.Delete)) {\n handleClose(event);\n }\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);\n };\n var DismissIcon = /*#__PURE__*/ // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n role: \"button\",\n tabIndex: -1,\n \"aria-hidden\": true,\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--close-icon\"), _define_property({}, \"\".concat(prefix, \"--visually-hidden\"), !dismissable)),\n onClick: handleClose,\n \"aria-label\": \"Close tab\",\n title: \"Close tab\",\n ref: dismissIconRef\n }, _Close || (_Close = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_carbon_icons_react__WEBPACK_IMPORTED_MODULE_20__.Close, null)));\n var hasIcon = Icon !== null && Icon !== void 0 ? Icon : dismissable;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(BaseComponent, (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-controls\": panelId,\n \"aria-disabled\": disabled,\n \"aria-selected\": selectedIndex === index,\n ref: ref,\n id: id,\n role: \"tab\",\n className: className,\n disabled: disabled,\n onClick: function(evt) {\n if (disabled) {\n return;\n }\n setSelectedIndex(index);\n onClick === null || onClick === void 0 ? void 0 : onClick(evt);\n },\n onKeyDown: handleKeyDown,\n tabIndex: selectedIndex === index ? \"0\" : \"-1\",\n type: \"button\"\n }), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-label-wrapper\")\n }, dismissable && Icon && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item--icon-left\")\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Icon, {\n size: 16\n })), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"span\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-label\"),\n title: children\n }, children), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--icon\"), _define_property({}, \"\".concat(prefix, \"--visually-hidden\"), !hasIcon))\n }, DismissIcon, !dismissable && Icon && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Icon, {\n size: 16\n }))), hasSecondaryLabel && /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", {\n className: \"\".concat(prefix, \"--tabs__nav-item-secondary-label\"),\n title: secondaryLabel\n }, secondaryLabel));\n});\nTab.propTypes = {\n /**\n * Provide a custom element to render instead of the default button\n */ // @ts-expect-error: Invalid prop type derivation\n as: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().elementType)\n ]),\n /**\n * Provide child elements to be rendered inside `Tab`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to your Tab\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Whether your Tab is disabled.\n */ disabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Provide a handler that is invoked when a user clicks on the control\n */ onClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * Provide a handler that is invoked on the key down event for the control\n */ onKeyDown: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /*\n * An optional parameter to allow overriding the anchor rendering.\n * Useful for using Tab along with react-router or other client\n * side router libraries.\n **/ renderButton: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n /**\n * Optional prop to render an icon next to the label.\n * Can be a React component class\n */ // @ts-expect-error: Invalid prop type derivation\n renderIcon: prop_types__WEBPACK_IMPORTED_MODULE_7___default().oneOfType([\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n (prop_types__WEBPACK_IMPORTED_MODULE_7___default().object)\n ]),\n /*\n * An optional label to render under the primary tab label.\n /* This prop is only useful for conained tabs\n **/ secondaryLabel: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n/**\n * IconTab\n */ var IconTab = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().forwardRef(function IconTab(_ref6, ref) {\n var children = _ref6.children, customClassName = _ref6.className, _ref6_defaultOpen = _ref6.defaultOpen, defaultOpen = _ref6_defaultOpen === void 0 ? false : _ref6_defaultOpen, enterDelayMs = _ref6.enterDelayMs, leaveDelayMs = _ref6.leaveDelayMs, label = _ref6.label, rest = _object_without_properties(_ref6, [\n \"children\",\n \"className\",\n \"defaultOpen\",\n \"enterDelayMs\",\n \"leaveDelayMs\",\n \"label\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var classNames = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tabs__nav-item--icon-only\"), customClassName);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(_Tooltip_Tooltip_js__WEBPACK_IMPORTED_MODULE_21__.Tooltip, {\n align: \"bottom\",\n defaultOpen: defaultOpen,\n className: \"\".concat(prefix, \"--icon-tooltip\"),\n enterDelayMs: enterDelayMs,\n label: label,\n leaveDelayMs: leaveDelayMs\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Tab, (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({\n className: classNames,\n ref: ref\n }, rest), children));\n});\nIconTab.propTypes = {\n /**\n * Provide an icon to be rendered inside `IconTab` as the visual label for Tab.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to your Tab\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n /**\n * Specify whether the tooltip for the icon should be open when it first renders\n */ defaultOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n /**\n * Specify the duration in milliseconds to delay before displaying the tooltip for the icon.\n */ enterDelayMs: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n /**\n * Provide the label to be rendered inside the Tooltip. The label will use\n * `aria-labelledby` and will fully describe the child node that is provided.\n * This means that if you have text in the child node it will not be\n * announced to the screen reader.\n */ label: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node).isRequired,\n /**\n * Specify the duration in milliseconds to delay before hiding the tooltip\n */ leaveDelayMs: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number)\n};\n/**\n * TabPanel\n */ var TabPanel = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().forwardRef(function TabPanel(_ref7, forwardRef) {\n var children = _ref7.children, customClassName = _ref7.className, rest = _object_without_properties(_ref7, [\n \"children\",\n \"className\"\n ]);\n var prefix = (0,_internal_usePrefix_js__WEBPACK_IMPORTED_MODULE_10__.usePrefix)();\n var panel = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null);\n var ref = (0,_internal_useMergedRefs_js__WEBPACK_IMPORTED_MODULE_18__.useMergedRefs)([\n forwardRef,\n panel\n ]);\n var _useState = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(0), 2), tabIndex = _useState[0], setTabIndex = _useState[1];\n var _useState1 = _sliced_to_array((0,react__WEBPACK_IMPORTED_MODULE_3__.useState)(false), 2), interactiveContent = _useState1[0], setInteractiveContent = _useState1[1];\n var _React__default_useContext = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabsContext), selectedIndex = _React__default_useContext.selectedIndex, baseId = _React__default_useContext.baseId;\n var index = react__WEBPACK_IMPORTED_MODULE_3___default().useContext(TabPanelContext);\n var id = \"\".concat(baseId, \"-tabpanel-\").concat(index);\n var tabId = \"\".concat(baseId, \"-tab-\").concat(index);\n var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(\"\".concat(prefix, \"--tab-content\"), customClassName, _define_property({}, \"\".concat(prefix, \"--tab-content--interactive\"), interactiveContent));\n (0,_internal_useEffectOnce_js__WEBPACK_IMPORTED_MODULE_12__.useEffectOnce)(function() {\n if (!panel.current) {\n return;\n }\n var content = (0,_internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__.getInteractiveContent)(panel.current);\n if (content) {\n setInteractiveContent(true);\n setTabIndex(-1);\n }\n });\n // tabindex should only be 0 if no interactive content in children\n (0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function() {\n var callback = function callback() {\n var content = (0,_internal_useNoInteractiveChildren_js__WEBPACK_IMPORTED_MODULE_22__.getInteractiveContent)(node);\n if (content) {\n setInteractiveContent(true);\n setTabIndex(-1);\n } else {\n setInteractiveContent(false);\n setTabIndex(0);\n }\n };\n var node = panel.current;\n if (!node) {\n return;\n }\n var observer = new MutationObserver(callback);\n observer.observe(node, {\n childList: true,\n subtree: true\n });\n return function() {\n return observer.disconnect();\n };\n }, []);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(\"div\", (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_15__[\"extends\"])({}, rest, {\n \"aria-labelledby\": tabId,\n id: id,\n className: className,\n ref: ref,\n role: \"tabpanel\",\n tabIndex: tabIndex,\n hidden: selectedIndex !== index\n }), children);\n});\nTabPanel.propTypes = {\n /**\n * Provide child elements to be rendered inside `TabPanel`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node),\n /**\n * Specify an optional className to be added to TabPanel.\n */ className: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n};\n/**\n * TabPanels\n */ function TabPanels(_ref8) {\n var children = _ref8.children;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react__WEBPACK_IMPORTED_MODULE_3___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_3___default().Children.map(children, function(child, index) {\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_3___default().createElement(TabPanelContext.Provider, {\n value: index\n }, child);\n }));\n}\nTabPanels.propTypes = {\n /**\n * Provide child elements to be rendered inside `TabPanels`.\n */ children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().node)\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3QvZXMvY29tcG9uZW50cy9UYWJzL1RhYnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7O0NBS0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWlGO0FBQ1g7QUFDMUI7QUFDakI7QUFDVztBQUNKO0FBQzBEO0FBQ3hEO0FBQ0k7QUFDTztBQUM4QjtBQUNkO0FBQ2hCO0FBQ3dCO0FBQ1I7QUFDbUI7QUFDM0I7QUFDUDtBQUNLO0FBQ0E7QUFDVTtBQUNFO0FBQ3lCO0FBRTNGLElBQUltQyxjQUFjQyxlQUFlQztBQUVqQywrQ0FBK0M7QUFFL0MsSUFBTUMsY0FBYyxXQUFXLEdBQUU3QiwwREFBNEIsQ0FBQztJQUM1RCtCLFFBQVE7SUFDUkMsYUFBYTtJQUNiQyxzQkFBc0I7SUFDdEJDLGFBQWEsS0FBSztJQUNsQkMsbUJBQUFBLFNBQUFBLG9CQUFvQixDQUFDO0lBQ3JCQyxnQkFBQUEsU0FBQUEsaUJBQWlCLENBQUM7SUFDbEJDLGVBQWU7SUFDZkMsa0JBQUFBLFNBQUFBLG1CQUFtQixDQUFDO0FBQ3RCO0FBRUEsOENBQThDO0FBQzlDLElBQU1DLGFBQWEsV0FBVyxHQUFFdkMsMERBQTRCLENBQUM7SUFDM0R3QyxPQUFPO0lBQ1BDLG1CQUFtQixLQUFLO0FBQzFCO0FBQ0EsSUFBTUMsZUFBZSxlQUFvQyxPQUFyQjlDLHVEQUFXQSxDQUFDK0MsRUFBRSxDQUFDQyxLQUFLLEVBQUM7QUFFekQseURBQXlEO0FBQ3pELElBQU1DLGtCQUFrQixXQUFXLEdBQUU3QywwREFBNEIsQ0FBQztBQUVsRTs7Q0FFQyxHQUVELFNBQVM4QyxLQUFLQyxJQUFJLEVBQUU7SUFDbEIsSUFDRUMsV0FNRUQsS0FORkMsc0NBTUVELEtBTEZkLHNCQUFBQSw4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SSxPQUFPLFdBQVcsR0FBRXhDLDBEQUE0QixDQUFDNkMsZ0JBQWdCUyxRQUFRLEVBQUU7WUFDekVILE9BQU9YO1FBQ1QsR0FBR21FO0lBQ0w7QUFDRjtBQUNBNEcsVUFBVWhLLFNBQVMsR0FBRztJQUNwQjs7R0FFQyxHQUNEUCxVQUFVakQsd0RBQWM7QUFDMUI7QUFFNEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AY2FyYm9uL3JlYWN0L2VzL2NvbXBvbmVudHMvVGFicy9UYWJzLmpzP2Y5MTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTYsIDIwMjNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUtMi4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kcyBhcyBfZXh0ZW5kcyB9IGZyb20gJy4uLy4uL192aXJ0dWFsL19yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMnO1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCwgQ2xvc2UgfSBmcm9tICdAY2FyYm9uL2ljb25zLXJlYWN0JztcbmltcG9ydCB7IGJyZWFrcG9pbnRzIH0gZnJvbSAnQGNhcmJvbi9sYXlvdXQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC5kZWJvdW5jZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0X19kZWZhdWx0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgJy4uL1Rvb2x0aXAvRGVmaW5pdGlvblRvb2x0aXAuanMnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL1Rvb2x0aXAvVG9vbHRpcC5qcyc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL3VzZUNvbnRyb2xsYWJsZVN0YXRlLmpzJztcbmltcG9ydCB7IHVzZUVmZmVjdE9uY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VFZmZlY3RPbmNlLmpzJztcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlSWQuanMnO1xuaW1wb3J0IHVzZUlzb21vcnBoaWNFZmZlY3QgZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlSXNvbW9ycGhpY0VmZmVjdC5qcyc7XG5pbXBvcnQgeyB1c2VNZXJnZWRSZWZzIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlTWVyZ2VkUmVmcy5qcyc7XG5pbXBvcnQgeyBnZXRJbnRlcmFjdGl2ZUNvbnRlbnQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VOb0ludGVyYWN0aXZlQ2hpbGRyZW4uanMnO1xuaW1wb3J0IHsgdXNlUHJlZml4IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlUHJlZml4LmpzJztcbmltcG9ydCB7IHVzZVByZXNzYWJsZSB9IGZyb20gJy4vdXNlUHJlc3NhYmxlLmpzJztcbmltcG9ydCBkZXByZWNhdGUgZnJvbSAnLi4vLi4vcHJvcC10eXBlcy9kZXByZWNhdGUuanMnO1xuaW1wb3J0IHsgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC91c2VFdmVudC5qcyc7XG5pbXBvcnQgeyB1c2VNYXRjaE1lZGlhIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvdXNlTWF0Y2hNZWRpYS5qcyc7XG5pbXBvcnQgeyBtYXRjaGVzLCBtYXRjaCB9IGZyb20gJy4uLy4uL2ludGVybmFsL2tleWJvYXJkL21hdGNoLmpzJztcbmltcG9ydCB7IEFycm93UmlnaHQsIEFycm93TGVmdCwgSG9tZSwgRW5kLCBEZWxldGUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9rZXlib2FyZC9rZXlzLmpzJztcblxudmFyIF9DaGV2cm9uTGVmdCwgX0NoZXZyb25SaWdodCwgX0Nsb3NlO1xuXG4vLyBVc2VkIHRvIG1hbmFnZSB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgVGFic1xuXG5jb25zdCBUYWJzQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVDb250ZXh0KHtcbiAgYmFzZUlkOiAnJyxcbiAgYWN0aXZlSW5kZXg6IDAsXG4gIGRlZmF1bHRTZWxlY3RlZEluZGV4OiAwLFxuICBkaXNtaXNzYWJsZTogZmFsc2UsXG4gIG9uVGFiQ2xvc2VSZXF1ZXN0KCkge30sXG4gIHNldEFjdGl2ZUluZGV4KCkge30sXG4gIHNlbGVjdGVkSW5kZXg6IDAsXG4gIHNldFNlbGVjdGVkSW5kZXgoKSB7fVxufSk7XG5cbi8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwb3NpdGlvbiBpbiBhIHRhYmxpc3RcbmNvbnN0IFRhYkNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlQ29udGV4dCh7XG4gIGluZGV4OiAwLFxuICBoYXNTZWNvbmRhcnlMYWJlbDogZmFsc2Vcbn0pO1xuY29uc3QgbGdNZWRpYVF1ZXJ5ID0gYChtaW4td2lkdGg6ICR7YnJlYWtwb2ludHMubGcud2lkdGh9KWA7XG5cbi8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwb3NpdGlvbiBpbiBhIGxpc3Qgb2YgdGFiIHBhbmVsc1xuY29uc3QgVGFiUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUNvbnRleHQoMCk7XG5cbi8qKlxuICogVGFic1xuICovXG5cbmZ1bmN0aW9uIFRhYnMoX3JlZikge1xuICBsZXQge1xuICAgIGNoaWxkcmVuLFxuICAgIGRlZmF1bHRTZWxlY3RlZEluZGV4ID0gMCxcbiAgICBvbkNoYW5nZSxcbiAgICBzZWxlY3RlZEluZGV4OiBjb250cm9sbGVkU2VsZWN0ZWRJbmRleCxcbiAgICBkaXNtaXNzYWJsZSxcbiAgICBvblRhYkNsb3NlUmVxdWVzdFxuICB9ID0gX3JlZjtcbiAgY29uc3QgYmFzZUlkID0gdXNlSWQoJ2NjcycpO1xuICAvLyBUaGUgYWN0aXZlIGluZGV4IGlzIHVzZWQgdG8gdHJhY2sgdGhlIGVsZW1lbnQgd2hpY2ggaGFzIGZvY3VzIGluIG91ciB0YWJsaXN0XG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoZGVmYXVsdFNlbGVjdGVkSW5kZXgpO1xuICAvLyBUaGUgc2VsZWN0ZWQgaW5kZXggaXMgdXNlZCBmb3IgdGhlIHRhYi9wYW5lbCBwYWlyaW5nIHdoaWNoIGlzIFwidmlzaWJsZVwiXG4gIGNvbnN0IFtzZWxlY3RlZEluZGV4LCBzZXRTZWxlY3RlZEluZGV4XSA9IHVzZUNvbnRyb2xsYWJsZVN0YXRlKHtcbiAgICB2YWx1ZTogY29udHJvbGxlZFNlbGVjdGVkSW5kZXgsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0U2VsZWN0ZWRJbmRleCxcbiAgICBvbkNoYW5nZTogdmFsdWUgPT4gb25DaGFuZ2U/Lih7XG4gICAgICBzZWxlY3RlZEluZGV4OiB2YWx1ZVxuICAgIH0pXG4gIH0pO1xuICBjb25zdCB2YWx1ZSA9IHtcbiAgICBiYXNlSWQsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgZGVmYXVsdFNlbGVjdGVkSW5kZXgsXG4gICAgZGlzbWlzc2FibGUsXG4gICAgb25UYWJDbG9zZVJlcXVlc3QsXG4gICAgc2V0QWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJbmRleCxcbiAgICBzZXRTZWxlY3RlZEluZGV4XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUYWJzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5UYWJzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBgVGFic2AuXG4gICAqIFRoZXNlIGVsZW1lbnRzIHNob3VsZCByZW5kZXIgZWl0aGVyIGBUYWJzTGlzdGAgb3IgYFRhYnNQYW5lbHNgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoaWNoIGNvbnRlbnQgdGFiIHNob3VsZCBiZSBpbml0aWFsbHkgc2VsZWN0ZWQgd2hlbiB0aGUgY29tcG9uZW50XG4gICAqIGlzIGZpcnN0IHJlbmRlcmVkXG4gICAqL1xuICBkZWZhdWx0U2VsZWN0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlbmRlciBUYWIgY2hpbGRyZW4gc2hvdWxkIGJlIGRpc21pc3NhYmxlLlxuICAgKi9cbiAgZGlzbWlzc2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvdmlkZSBhbiBvcHRpb25hbCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIHRoZVxuICAgKiBgVGFic2AgY2hhbmdlc1xuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgc3BlY2lmeWluZyB0aGUgYG9uVGFiQ2xvc2VSZXF1ZXN0YCBwcm9wLCBwcm92aWRlIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIHRoZSB0YWIgd2hlbiBjbG9zZSBidXR0b24gaXMgcHJlc3NlZCBvbiBvbmUgb2YgdGhlIFRhYiBlbGVtZW50c1xuICAgKi9cbiAgb25UYWJDbG9zZVJlcXVlc3Q6IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzbWlzc2FibGUgJiYgIXByb3BzLm9uVGFiQ2xvc2VSZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdkaXNtaXNzYWJsZSBwcm9wZXJ0eSBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHByb3ZpZGluZyBhbiBvblRhYkNsb3NlUmVxdWVzdCBwcm9wZXJ0eS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcbiAgLyoqXG4gICAqIENvbnRyb2wgd2hpY2ggY29udGVudCBwYW5lbCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuIFRoaXMgcHV0cyB0aGUgY29tcG9uZW50XG4gICAqIGluIGEgY29udHJvbGxlZCBtb2RlIGFuZCBzaG91bGQgYmUgdXNlZCBhbG9uZyB3aXRoIGBvbkNoYW5nZWBcbiAgICovXG4gIHNlbGVjdGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGluZGV4IGZvciBhIGdpdmVuIGtleWJvYXJkIGV2ZW50XG4gKiBnaXZlbiBhIGNvdW50IG9mIHRoZSB0b3RhbCBpdGVtcyBhbmQgdGhlIGN1cnJlbnQgaW5kZXhcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dEluZGV4KGV2ZW50LCB0b3RhbCwgaW5kZXgpIHtcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSBtYXRjaChldmVudCwgQXJyb3dSaWdodCk6XG4gICAgICByZXR1cm4gKGluZGV4ICsgMSkgJSB0b3RhbDtcbiAgICBjYXNlIG1hdGNoKGV2ZW50LCBBcnJvd0xlZnQpOlxuICAgICAgcmV0dXJuICh0b3RhbCArIGluZGV4IC0gMSkgJSB0b3RhbDtcbiAgICBjYXNlIG1hdGNoKGV2ZW50LCBIb21lKTpcbiAgICAgIHJldHVybiAwO1xuICAgIGNhc2UgbWF0Y2goZXZlbnQsIEVuZCk6XG4gICAgICByZXR1cm4gdG90YWwgLSAxO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaW5kZXg7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWJMaXN0XG4gKi9cblxuZnVuY3Rpb24gVGFiTGlzdChfcmVmMikge1xuICBsZXQge1xuICAgIGFjdGl2YXRpb24gPSAnYXV0b21hdGljJyxcbiAgICAnYXJpYS1sYWJlbCc6IGxhYmVsLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZTogY3VzdG9tQ2xhc3NOYW1lLFxuICAgIGNvbnRhaW5lZCA9IGZhbHNlLFxuICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgIGljb25TaXplLFxuICAgIGxlZnRPdmVyZmxvd0J1dHRvblByb3BzLFxuICAgIGxpZ2h0LFxuICAgIHJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wcyxcbiAgICBzY3JvbGxEZWJvdW5jZVdhaXQgPSAyMDAsXG4gICAgc2Nyb2xsSW50b1ZpZXcsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBzZWxlY3RlZEluZGV4LFxuICAgIHNldFNlbGVjdGVkSW5kZXgsXG4gICAgc2V0QWN0aXZlSW5kZXgsXG4gICAgZGlzbWlzc2FibGVcbiAgfSA9IFJlYWN0X19kZWZhdWx0LnVzZUNvbnRleHQoVGFic0NvbnRleHQpO1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgcmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBwcmV2aW91c0J1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgbmV4dEJ1dHRvbiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2lzU2Nyb2xsYWJsZSwgc2V0SXNTY3JvbGxhYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Njcm9sbExlZnQsIHNldFNjcm9sbExlZnRdID0gdXNlU3RhdGUoMCk7XG4gIGxldCBoYXNTZWNvbmRhcnlMYWJlbFRhYnMgPSBmYWxzZTtcbiAgaWYgKGNvbnRhaW5lZCkge1xuICAgIGhhc1NlY29uZGFyeUxhYmVsVGFicyA9IFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLnNvbWUoY2hpbGQgPT4ge1xuICAgICAgcmV0dXJuIGlzRWxlbWVudChjaGlsZCkgJiYgISFjaGlsZC5wcm9wcy5zZWNvbmRhcnlMYWJlbDtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBpc0xnID0gdXNlTWF0Y2hNZWRpYShsZ01lZGlhUXVlcnkpO1xuICBjb25zdCBkaXN0cmlidXRlV2lkdGggPSBmdWxsV2lkdGggJiYgY29udGFpbmVkICYmIGlzTGcgJiYgUmVhY3RfX2RlZmF1bHQuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikubGVuZ3RoIDwgOTtcbiAgY29uc3QgY2xhc3NOYW1lID0gY3goYCR7cHJlZml4fS0tdGFic2AsIHtcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tY29udGFpbmVkYF06IGNvbnRhaW5lZCxcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tbGlnaHRgXTogbGlnaHQsXG4gICAgW2Ake3ByZWZpeH0tLXRhYnNfX2ljb24tLWRlZmF1bHRgXTogaWNvblNpemUgPT09ICdkZWZhdWx0JyxcbiAgICBbYCR7cHJlZml4fS0tdGFic19faWNvbi0tbGdgXTogaWNvblNpemUgPT09ICdsZycsXG4gICAgLy8gVE9ETzogVjEyIC0gUmVtb3ZlIHRoaXMgY2xhc3NcbiAgICBbYCR7cHJlZml4fS0tbGF5b3V0LS1zaXplLWxnYF06IGljb25TaXplID09PSAnbGcnLFxuICAgIFtgJHtwcmVmaXh9LS10YWJzLS10YWxsYF06IGhhc1NlY29uZGFyeUxhYmVsVGFicyxcbiAgICBbYCR7cHJlZml4fS0tdGFicy0tZnVsbC13aWR0aGBdOiBkaXN0cmlidXRlV2lkdGhcbiAgfSwgY3VzdG9tQ2xhc3NOYW1lKTtcblxuICAvLyBQcmV2aW91cyBCdXR0b25cbiAgLy8gVklTSUJMRSBJRjpcbiAgLy8gICBTQ1JPTExBQkxFXG4gIC8vICAgQU5EIFNDUk9MTF9MRUZUID4gMFxuICBjb25zdCBidXR0b25XaWR0aCA9IDQ0O1xuICAvLyBOZXh0IEJ1dHRvblxuICAvLyBWSVNJQkxFIElGOlxuICAvLyAgIFNDUk9MTEFCTEVcbiAgLy8gICBBTkQgU0NST0xMX0xFRlQgKyBDTElFTlRfV0lEVEggPCBTQ1JPTExfV0lEVEhcbiAgY29uc3QgW2lzTmV4dEJ1dHRvblZpc2libGUsIHNldElzTmV4dEJ1dHRvblZpc2libGVdID0gdXNlU3RhdGUocmVmLmN1cnJlbnQgPyBzY3JvbGxMZWZ0ICsgYnV0dG9uV2lkdGggKyByZWYuY3VycmVudC5jbGllbnRXaWR0aCA8IHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoIDogZmFsc2UpO1xuICBjb25zdCBpc1ByZXZpb3VzQnV0dG9uVmlzaWJsZSA9IHJlZi5jdXJyZW50ID8gaXNTY3JvbGxhYmxlICYmIHNjcm9sbExlZnQgPiAwIDogZmFsc2U7XG4gIGNvbnN0IHByZXZpb3VzQnV0dG9uQ2xhc3NlcyA9IGN4KGAke3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbmAsIGAke3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0tcHJldmlvdXNgLCB7XG4gICAgW2Ake3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0taGlkZGVuYF06ICFpc1ByZXZpb3VzQnV0dG9uVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgbmV4dEJ1dHRvbkNsYXNzZXMgPSBjeChgJHtwcmVmaXh9LS10YWItLW92ZXJmbG93LW5hdi1idXR0b25gLCBgJHtwcmVmaXh9LS10YWItLW92ZXJmbG93LW5hdi1idXR0b24tLW5leHRgLCB7XG4gICAgW2Ake3ByZWZpeH0tLXRhYi0tb3ZlcmZsb3ctbmF2LWJ1dHRvbi0taGlkZGVuYF06ICFpc05leHRCdXR0b25WaXNpYmxlXG4gIH0pO1xuICBjb25zdCB0YWJzID0gdXNlUmVmKFtdKTtcbiAgY29uc3QgZGVib3VuY2VkT25TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIGRlYm91bmNlKGV2ZW50ID0+IHtcbiAgICAgIHNldFNjcm9sbExlZnQoZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQpO1xuICAgIH0sIHNjcm9sbERlYm91bmNlV2FpdCk7XG4gIH0sIFtzY3JvbGxEZWJvdW5jZVdhaXRdKTtcbiAgZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKG1hdGNoZXMoZXZlbnQsIFtBcnJvd1JpZ2h0LCBBcnJvd0xlZnQsIEhvbWUsIEVuZF0pKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgYWN0aXZlVGFicyA9IHRhYnMuY3VycmVudC5maWx0ZXIodGFiID0+ICF0YWIuZGlzYWJsZWQpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gYWN0aXZlVGFicy5pbmRleE9mKHRhYnMuY3VycmVudFthY3RpdmF0aW9uID09PSAnYXV0b21hdGljJyA/IHNlbGVjdGVkSW5kZXggOiBhY3RpdmVJbmRleF0pO1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gdGFicy5jdXJyZW50LmluZGV4T2YoYWN0aXZlVGFic1tnZXROZXh0SW5kZXgoZXZlbnQsIGFjdGl2ZVRhYnMubGVuZ3RoLCBjdXJyZW50SW5kZXgpXSk7XG4gICAgICBpZiAoYWN0aXZhdGlvbiA9PT0gJ2F1dG9tYXRpYycpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChuZXh0SW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmF0aW9uID09PSAnbWFudWFsJykge1xuICAgICAgICBzZXRBY3RpdmVJbmRleChuZXh0SW5kZXgpO1xuICAgICAgfVxuICAgICAgdGFicy5jdXJyZW50W25leHRJbmRleF0/LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIHVzZUVmZmVjdE9uY2UoKCkgPT4ge1xuICAgIGNvbnN0IHRhYiA9IHRhYnMuY3VycmVudFtzZWxlY3RlZEluZGV4XTtcbiAgICBpZiAoc2Nyb2xsSW50b1ZpZXcgJiYgdGFiKSB7XG4gICAgICB0YWIuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICBibG9jazogJ25lYXJlc3QnLFxuICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc05leHRCdXR0b25WaXNpYmxlKHJlZi5jdXJyZW50ID8gc2Nyb2xsTGVmdCArIGJ1dHRvbldpZHRoICsgcmVmLmN1cnJlbnQuY2xpZW50V2lkdGggPCByZWYuY3VycmVudC5zY3JvbGxXaWR0aCA6IGZhbHNlKTtcbiAgICBpZiAoZGlzbWlzc2FibGUpIHtcbiAgICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgICBzZXRJc1Njcm9sbGFibGUocmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5jbGllbnRXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2Nyb2xsTGVmdCwgY2hpbGRyZW4sIGRpc21pc3NhYmxlXSk7XG4gIHVzZUVmZmVjdE9uY2UoKCkgPT4ge1xuICAgIGlmICh0YWJzLmN1cnJlbnRbc2VsZWN0ZWRJbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVRhYnMgPSB0YWJzLmN1cnJlbnQuZmlsdGVyKHRhYiA9PiB7XG4gICAgICAgIHJldHVybiAhdGFiLmRpc2FibGVkO1xuICAgICAgfSk7XG4gICAgICBpZiAoYWN0aXZlVGFicy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IGFjdGl2ZVRhYnNbMF07XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgodGFicy5jdXJyZW50LmluZGV4T2YodGFiKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdXNlSXNvbW9ycGhpY0VmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICBzZXRJc1Njcm9sbGFibGUocmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5jbGllbnRXaWR0aCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0SXNTY3JvbGxhYmxlKHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gcmVmLmN1cnJlbnQuY2xpZW50V2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZWJvdW5jZWRIYW5kbGVyID0gZGVib3VuY2UoaGFuZGxlciwgMjAwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkSGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRlYm91bmNlZEhhbmRsZXIuY2FuY2VsKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VkSGFuZGxlcik7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIHVwZGF0ZXMgc2Nyb2xsIGxvY2F0aW9uIGZvciBhbGwgc2Nyb2xsIGJlaGF2aW9yLlxuICB1c2VJc29tb3JwaGljRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gbnVsbCAmJiByZWYuY3VycmVudCkge1xuICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgfVxuICB9LCBbc2Nyb2xsTGVmdF0pO1xuICB1c2VJc29tb3JwaGljRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzU2Nyb2xsYWJsZSB8fCAhcmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFiID0gYWN0aXZhdGlvbiA9PT0gJ21hbnVhbCcgPyB0YWJzLmN1cnJlbnRbYWN0aXZlSW5kZXhdIDogdGFicy5jdXJyZW50W3NlbGVjdGVkSW5kZXhdO1xuICAgIGlmICh0YWIpIHtcbiAgICAgIC8vIFRoZSB3aWR0aCBvZiB0aGUgXCJzY3JvbGwgYnV0dG9uc1wiXG5cbiAgICAgIC8vIFRoZSBzdGFydCBhbmQgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3RlZCB0YWJcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGg6IHRhYldpZHRoXG4gICAgICB9ID0gdGFiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0YWIub2Zmc2V0TGVmdDtcbiAgICAgIGNvbnN0IGVuZCA9IHRhYi5vZmZzZXRMZWZ0ICsgdGFiV2lkdGg7XG5cbiAgICAgIC8vIFRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB2aXNpYmxlIGFyZWEgZm9yIHRoZSB0YWJzXG4gICAgICBjb25zdCB2aXNpYmxlU3RhcnQgPSByZWYuY3VycmVudC5zY3JvbGxMZWZ0ICsgYnV0dG9uV2lkdGg7XG4gICAgICBjb25zdCB2aXNpYmxlRW5kID0gcmVmLmN1cnJlbnQuc2Nyb2xsTGVmdCArIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoIC0gYnV0dG9uV2lkdGg7XG5cbiAgICAgIC8vIFRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhYiBpcyBjbGlwcGVkIGFuZCBub3QgdmlzaWJsZVxuICAgICAgaWYgKHN0YXJ0IDwgdmlzaWJsZVN0YXJ0KSB7XG4gICAgICAgIHNldFNjcm9sbExlZnQoc3RhcnQgLSBidXR0b25XaWR0aCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBlbmQgb2YgdGhlIHRhYiBpcyBjbGlwcGVkIGFuZCBub3QgdmlzaWJsZVxuICAgICAgaWYgKGVuZCA+IHZpc2libGVFbmQpIHtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChlbmQgKyBidXR0b25XaWR0aCAtIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthY3RpdmF0aW9uLCBhY3RpdmVJbmRleCwgc2VsZWN0ZWRJbmRleCwgaXNTY3JvbGxhYmxlLCBjaGlsZHJlbl0pO1xuICB1c2VQcmVzc2FibGUocHJldmlvdXNCdXR0b24sIHtcbiAgICBvblByZXNzKF9yZWYzKSB7XG4gICAgICBsZXQge1xuICAgICAgICBsb25nUHJlc3NcbiAgICAgIH0gPSBfcmVmMztcbiAgICAgIGlmICghbG9uZ1ByZXNzICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldFNjcm9sbExlZnQoTWF0aC5tYXgoc2Nyb2xsTGVmdCAtIHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoIC8gdGFicy5jdXJyZW50Lmxlbmd0aCAqIDEuNSwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Mb25nUHJlc3MoKSB7XG4gICAgICByZXR1cm4gY3JlYXRlTG9uZ1ByZXNzQmVoYXZpb3IocmVmLCAnYmFja3dhcmQnLCBzZXRTY3JvbGxMZWZ0KTtcbiAgICB9XG4gIH0pO1xuICB1c2VQcmVzc2FibGUobmV4dEJ1dHRvbiwge1xuICAgIG9uUHJlc3MoX3JlZjQpIHtcbiAgICAgIGxldCB7XG4gICAgICAgIGxvbmdQcmVzc1xuICAgICAgfSA9IF9yZWY0O1xuICAgICAgaWYgKCFsb25nUHJlc3MgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChNYXRoLm1pbihzY3JvbGxMZWZ0ICsgcmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggLyB0YWJzLmN1cnJlbnQubGVuZ3RoICogMS41LCByZWYuY3VycmVudC5zY3JvbGxXaWR0aCAtIHJlZi5jdXJyZW50LmNsaWVudFdpZHRoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkxvbmdQcmVzcygpIHtcbiAgICAgIHJldHVybiBjcmVhdGVMb25nUHJlc3NCZWhhdmlvcihyZWYsICdmb3J3YXJkJywgc2V0U2Nyb2xsTGVmdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiU2Nyb2xsIGxlZnRcIixcbiAgICByZWY6IHByZXZpb3VzQnV0dG9uLFxuICAgIGNsYXNzTmFtZTogcHJldmlvdXNCdXR0b25DbGFzc2VzLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSwgbGVmdE92ZXJmbG93QnV0dG9uUHJvcHMpLCBfQ2hldnJvbkxlZnQgfHwgKF9DaGV2cm9uTGVmdCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KENoZXZyb25MZWZ0LCBudWxsKSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbCxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInRhYmxpc3RcIixcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYi0tbGlzdGAsXG4gICAgb25TY3JvbGw6IGRlYm91bmNlZE9uU2Nyb2xsLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0pLCBSZWFjdF9fZGVmYXVsdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gIWlzRWxlbWVudChjaGlsZCkgPyBudWxsIDogLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVGFiQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGhhc1NlY29uZGFyeUxhYmVsOiBoYXNTZWNvbmRhcnlMYWJlbFRhYnMsXG4gICAgICAgIGNvbnRhaW5lZFxuICAgICAgfVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIHJlZjogbm9kZSA9PiB7XG4gICAgICAgIHRhYnMuY3VycmVudFtpbmRleF0gPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFwiU2Nyb2xsIHJpZ2h0XCIsXG4gICAgcmVmOiBuZXh0QnV0dG9uLFxuICAgIGNsYXNzTmFtZTogbmV4dEJ1dHRvbkNsYXNzZXMsXG4gICAgdHlwZTogXCJidXR0b25cIlxuICB9LCByaWdodE92ZXJmbG93QnV0dG9uUHJvcHMpLCBfQ2hldnJvblJpZ2h0IHx8IChfQ2hldnJvblJpZ2h0ID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0LCBudWxsKSkpKTtcbn1cblRhYkxpc3QucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBjb250ZW50IHRhYiBzaG91bGQgYmUgYWN0aXZhdGVkIGF1dG9tYXRpY2FsbHkgb3JcbiAgICogbWFudWFsbHlcbiAgICovXG4gIGFjdGl2YXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2F1dG9tYXRpYycsICdtYW51YWwnXSksXG4gIC8qKlxuICAgKiBQcm92aWRlIGFuIGFjY2Vzc2libGUgbGFiZWwgdG8gYmUgcmVhZCB3aGVuIGEgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGlzXG4gICAqIGNvbXBvbmVudFxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm92aWRlIGNoaWxkIGVsZW1lbnRzIHRvIGJlIHJlbmRlcmVkIGluc2lkZSBgQ29udGVudFRhYnNgLlxuICAgKiBUaGVzZSBlbGVtZW50cyBzaG91bGQgcmVuZGVyIGEgYENvbnRlbnRUYWJgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB0aGUgY29udGFpbmVyIG5vZGVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciBjb21wb25lbnQgaXMgY29udGFpbmVkIHR5cGVcbiAgICovXG4gIGNvbnRhaW5lZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBVc2VkIGZvciB0YWJzIHdpdGhpbiBhIGdyaWQsIHRoaXMgbWFrZXMgaXQgc28gdGFicyBzcGFuIHRoZSBmdWxsIGNvbnRhaW5lciB3aWR0aCBhbmQgaGF2ZSB0aGUgc2FtZSB3aWR0aC4gT25seSBhdmFpbGFibGUgb24gY29udGFpbmVkIHRhYnMgd2l0aCA8OSBjaGlsZHJlblxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIHVzaW5nIGBJY29uVGFiYCwgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgaWNvbiBiZWluZyB1c2VkLlxuICAgKi9cbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbJ2RlZmF1bHQnLCAnbGcnXSksXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBwcm9wcyB0aGF0IGRlc2NyaWJlIHRoZSBsZWZ0IG92ZXJmbG93IGJ1dHRvblxuICAgKi9cbiAgbGVmdE92ZXJmbG93QnV0dG9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdG8gdXNlIHRoZSBsaWdodCBjb21wb25lbnQgdmFyaWFudFxuICAgKi9cbiAgbGlnaHQ6IGRlcHJlY2F0ZShQcm9wVHlwZXMuYm9vbCwgJ1RoZSBgbGlnaHRgIHByb3AgZm9yIGBUYWJMaXN0YCBoYXMgJyArICdiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBgTGF5ZXJgIGNvbXBvbmVudC4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuJyksXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBwcm9wcyB0aGF0IGRlc2NyaWJlIHRoZSByaWdodCBvdmVyZmxvdyBidXR0b25cbiAgICovXG4gIHJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgcHJvdmlkZSBhIGRlbGF5IChpbiBtaWxsaXNlY29uZHMpIHBhc3NlZCB0byB0aGUgbG9kYXNoXG4gICAqIGRlYm91bmNlIG9mIHRoZSBvblNjcm9sbCBoYW5kbGVyLiBUaGlzIHdpbGwgaW1wYWN0IHRoZSByZXNwb25zaXZlbmVzc1xuICAgKiBvZiBzY3JvbGwgYXJyb3cgYnV0dG9ucyByZW5kZXJpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGZpcnN0IG9yIGxhc3QgdGFiLlxuICAgKi9cbiAgc2Nyb2xsRGVib3VuY2VXYWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogQ2hvb3NlIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzY3JvbGxcbiAgICogdG8gbmV3bHkgc2VsZWN0ZWQgdGFicyBvbiBjb21wb25lbnQgcmVyZW5kZXJcbiAgICovXG4gIHNjcm9sbEludG9WaWV3OiBQcm9wVHlwZXMuYm9vbFxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSBiZWhhdmlvciB3aGVuIGEgYnV0dG9uIGlzIFwibG9uZyBwcmVzc2VkXCIuXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZiB0byB0aGUgdGFibGlzdCwgYSBkaXJlY3Rpb24sIGFuZCBhIHNldHRlclxuICogZm9yIHNjcm9sbExlZnQgYW5kIHdpbGwgdXBkYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gd2l0aGluIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuICpcbiAqIEl0IHJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIHJ1blxuICogd2hlbiB0aGUgbG9uZyBwcmVzcyBpcyBkZWFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVMb25nUHJlc3NCZWhhdmlvcihyZWYsIGRpcmVjdGlvbiwgc2V0U2Nyb2xsTGVmdCkge1xuICBjb25zdCBub2RlID0gcmVmLmN1cnJlbnQ7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIC8vIFdlIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSBzY3JvbGwgYmVoYXZpb3IgdG8gYmUgXCJhdXRvXCIuXG4gIC8vIElmIGl0IGlzIHNldCBhcyBzbW9vdGgsIHRoaXMgYW5pbWF0aW9uIGRvZXMgbm90IHVwZGF0ZSBjb3JyZWN0bHlcbiAgY29uc3QgZGVmYXVsdFNjcm9sbEJlaGF2aW9yID0gbm9kZT8uc3R5bGVbJ3Njcm9sbC1iZWhhdmlvciddO1xuICBub2RlLnN0eWxlWydzY3JvbGwtYmVoYXZpb3InXSA9ICdhdXRvJztcbiAgY29uc3Qgc2Nyb2xsRGVsdGEgPSBkaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IDUgOiAtNTtcbiAgbGV0IGZyYW1lSWQgPSBudWxsO1xuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBub2RlLnNjcm9sbExlZnQgPSBub2RlLnNjcm9sbExlZnQgKyBzY3JvbGxEZWx0YTtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICB9XG4gIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgLy8gUmVzdG9yZSB0aGUgcHJldmlvdXMgc2Nyb2xsIGJlaGF2aW9yXG4gICAgbm9kZS5zdHlsZVsnc2Nyb2xsLWJlaGF2aW9yJ10gPSBkZWZhdWx0U2Nyb2xsQmVoYXZpb3I7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgYHNjcm9sbExlZnRgIHZhbHVlIGlzIGluIHN5bmMgd2l0aCB0aGUgZXhpc3RpbmdcbiAgICAvLyBgcmVmYCBhZnRlciBvdXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AgYWJvdmVcbiAgICBzZXRTY3JvbGxMZWZ0KG5vZGUuc2Nyb2xsTGVmdCk7XG4gICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBUYWJcbiAqL1xuXG5jb25zdCBUYWIgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiBUYWIoX3JlZjUsIGZvcndhcmRSZWYpIHtcbiAgbGV0IHtcbiAgICBhcyA9ICdidXR0b24nLFxuICAgIGNoaWxkcmVuLFxuICAgIGNsYXNzTmFtZTogY3VzdG9tQ2xhc3NOYW1lLFxuICAgIGRpc2FibGVkLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIHNlY29uZGFyeUxhYmVsLFxuICAgIHJlbmRlckljb246IEljb24sXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjU7XG4gIGNvbnN0IHByZWZpeCA9IHVzZVByZWZpeCgpO1xuICBjb25zdCB7XG4gICAgc2VsZWN0ZWRJbmRleCxcbiAgICBzZXRTZWxlY3RlZEluZGV4LFxuICAgIGJhc2VJZCxcbiAgICBkaXNtaXNzYWJsZSxcbiAgICBvblRhYkNsb3NlUmVxdWVzdFxuICB9ID0gUmVhY3RfX2RlZmF1bHQudXNlQ29udGV4dChUYWJzQ29udGV4dCk7XG4gIGNvbnN0IHtcbiAgICBpbmRleCxcbiAgICBoYXNTZWNvbmRhcnlMYWJlbCxcbiAgICBjb250YWluZWRcbiAgfSA9IFJlYWN0X19kZWZhdWx0LnVzZUNvbnRleHQoVGFiQ29udGV4dCk7XG4gIGNvbnN0IGRpc21pc3NJY29uUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB0YWJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJlZiA9IHVzZU1lcmdlZFJlZnMoW2ZvcndhcmRSZWYsIHRhYlJlZl0pO1xuICBjb25zdCBbaWdub3JlSG92ZXIsIHNldElnbm9yZUhvdmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWQgPSBgJHtiYXNlSWR9LXRhYi0ke2luZGV4fWA7XG4gIGNvbnN0IHBhbmVsSWQgPSBgJHtiYXNlSWR9LXRhYnBhbmVsLSR7aW5kZXh9YDtcbiAgY29uc3QgY2xhc3NOYW1lID0gY3goYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW1gLCBgJHtwcmVmaXh9LS10YWJzX19uYXYtbGlua2AsIHtcbiAgICBbYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLXNlbGVjdGVkYF06IHNlbGVjdGVkSW5kZXggPT09IGluZGV4LFxuICAgIFtgJHtwcmVmaXh9LS10YWJzX19uYXYtaXRlbS0tZGlzYWJsZWRgXTogZGlzYWJsZWQsXG4gICAgW2Ake3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1ob3Zlci1vZmZgXTogaWdub3JlSG92ZXJcbiAgfSwgY3VzdG9tQ2xhc3NOYW1lKTtcbiAgY29uc3QgQmFzZUNvbXBvbmVudCA9IGFzO1xuICBjb25zdCBvbkRpc21pc3NJY29uTW91c2VFbnRlciA9IGV2dCA9PiB7XG4gICAgaWYgKGNvbnRhaW5lZCAmJiB0YWJSZWYuY3VycmVudCkge1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgc2V0SWdub3JlSG92ZXIodHJ1ZSk7XG4gICAgICB0YWJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1ob3Zlci1vZmZgKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIGlmIChjb250YWluZWQgJiYgdGFiUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRhYlJlZi5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWhvdmVyLW9mZmApO1xuICAgICAgc2V0SWdub3JlSG92ZXIoZmFsc2UpO1xuICAgIH1cbiAgfTtcbiAgdXNlRXZlbnQoZGlzbWlzc0ljb25SZWYsICdtb3VzZW92ZXInLCBvbkRpc21pc3NJY29uTW91c2VFbnRlcik7XG4gIHVzZUV2ZW50KGRpc21pc3NJY29uUmVmLCAnbW91c2VsZWF2ZScsIG9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlKTtcbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSBldnQgPT4ge1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBvblRhYkNsb3NlUmVxdWVzdD8uKGluZGV4KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZGlzbWlzc2FibGUgJiYgbWF0Y2goZXZlbnQsIERlbGV0ZSkpIHtcbiAgICAgIGhhbmRsZUNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgb25LZXlEb3duPy4oZXZlbnQpO1xuICB9O1xuICBjb25zdCBEaXNtaXNzSWNvbiA9XG4gIC8qI19fUFVSRV9fKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcbiAgUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcm9sZTogXCJidXR0b25cIixcbiAgICB0YWJJbmRleDogLTEsXG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY3goYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWNsb3NlLWljb25gLCB7XG4gICAgICBbYCR7cHJlZml4fS0tdmlzdWFsbHktaGlkZGVuYF06ICFkaXNtaXNzYWJsZVxuICAgIH0pLFxuICAgIG9uQ2xpY2s6IGhhbmRsZUNsb3NlLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlIHRhYlwiLFxuICAgIHRpdGxlOiBcIkNsb3NlIHRhYlwiLFxuICAgIHJlZjogZGlzbWlzc0ljb25SZWZcbiAgfSwgX0Nsb3NlIHx8IChfQ2xvc2UgPSAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChDbG9zZSwgbnVsbCkpKTtcbiAgY29uc3QgaGFzSWNvbiA9IEljb24gPz8gZGlzbWlzc2FibGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChCYXNlQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIFwiYXJpYS1jb250cm9sc1wiOiBwYW5lbElkLFxuICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICBcImFyaWEtc2VsZWN0ZWRcIjogc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXgsXG4gICAgcmVmOiByZWYsXG4gICAgaWQ6IGlkLFxuICAgIHJvbGU6IFwidGFiXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IGV2dCA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRJbmRleChpbmRleCk7XG4gICAgICBvbkNsaWNrPy4oZXZ0KTtcbiAgICB9LFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICB0YWJJbmRleDogc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXggPyAnMCcgOiAnLTEnLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLWxhYmVsLXdyYXBwZXJgXG4gIH0sIGRpc21pc3NhYmxlICYmIEljb24gJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogYCR7cHJlZml4fS0tdGFic19fbmF2LWl0ZW0tLWljb24tbGVmdGBcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHNpemU6IDE2XG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLWxhYmVsYCxcbiAgICB0aXRsZTogY2hpbGRyZW5cbiAgfSwgY2hpbGRyZW4pLCAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjeChgJHtwcmVmaXh9LS10YWJzX19uYXYtaXRlbS0taWNvbmAsIHtcbiAgICAgIFtgJHtwcmVmaXh9LS12aXN1YWxseS1oaWRkZW5gXTogIWhhc0ljb25cbiAgICB9KVxuICB9LCBEaXNtaXNzSWNvbiwgIWRpc21pc3NhYmxlICYmIEljb24gJiYgLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIHNpemU6IDE2XG4gIH0pKSksIGhhc1NlY29uZGFyeUxhYmVsICYmIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLXNlY29uZGFyeS1sYWJlbGAsXG4gICAgdGl0bGU6IHNlY29uZGFyeUxhYmVsXG4gIH0sIHNlY29uZGFyeUxhYmVsKSk7XG59KTtcblRhYi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY3VzdG9tIGVsZW1lbnQgdG8gcmVuZGVyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnV0dG9uXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBJbnZhbGlkIHByb3AgdHlwZSBkZXJpdmF0aW9uXG4gIGFzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuZWxlbWVudFR5cGVdKSxcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBUYWJgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBjbGFzc05hbWUgdG8gYmUgYWRkZWQgdG8geW91ciBUYWJcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZXRoZXIgeW91ciBUYWIgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgaGFuZGxlciB0aGF0IGlzIGludm9rZWQgd2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBjb250cm9sXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCBvbiB0aGUga2V5IGRvd24gZXZlbnQgZm9yIHRoZSBjb250cm9sXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKlxuICAgKiBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gYWxsb3cgb3ZlcnJpZGluZyB0aGUgYW5jaG9yIHJlbmRlcmluZy5cbiAgICogVXNlZnVsIGZvciB1c2luZyBUYWIgYWxvbmcgd2l0aCByZWFjdC1yb3V0ZXIgb3Igb3RoZXIgY2xpZW50XG4gICAqIHNpZGUgcm91dGVyIGxpYnJhcmllcy5cbiAgICoqL1xuICByZW5kZXJCdXR0b246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogT3B0aW9uYWwgcHJvcCB0byByZW5kZXIgYW4gaWNvbiBuZXh0IHRvIHRoZSBsYWJlbC5cbiAgICogQ2FuIGJlIGEgUmVhY3QgY29tcG9uZW50IGNsYXNzXG4gICAqL1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBJbnZhbGlkIHByb3AgdHlwZSBkZXJpdmF0aW9uXG4gIHJlbmRlckljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qXG4gICAqIEFuIG9wdGlvbmFsIGxhYmVsIHRvIHJlbmRlciB1bmRlciB0aGUgcHJpbWFyeSB0YWIgbGFiZWwuXG4gIC8qIFRoaXMgcHJvcCBpcyBvbmx5IHVzZWZ1bCBmb3IgY29uYWluZWQgdGFic1xuICAgKiovXG4gIHNlY29uZGFyeUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG4vKipcbiAqIEljb25UYWJcbiAqL1xuXG5jb25zdCBJY29uVGFiID0gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gSWNvblRhYihfcmVmNiwgcmVmKSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lOiBjdXN0b21DbGFzc05hbWUsXG4gICAgZGVmYXVsdE9wZW4gPSBmYWxzZSxcbiAgICBlbnRlckRlbGF5TXMsXG4gICAgbGVhdmVEZWxheU1zLFxuICAgIGxhYmVsLFxuICAgIC4uLnJlc3RcbiAgfSA9IF9yZWY2O1xuICBjb25zdCBwcmVmaXggPSB1c2VQcmVmaXgoKTtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGN4KGAke3ByZWZpeH0tLXRhYnNfX25hdi1pdGVtLS1pY29uLW9ubHlgLCBjdXN0b21DbGFzc05hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcCwge1xuICAgIGFsaWduOiBcImJvdHRvbVwiLFxuICAgIGRlZmF1bHRPcGVuOiBkZWZhdWx0T3BlbixcbiAgICBjbGFzc05hbWU6IGAke3ByZWZpeH0tLWljb24tdG9vbHRpcGAsXG4gICAgZW50ZXJEZWxheU1zOiBlbnRlckRlbGF5TXMsXG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGxlYXZlRGVsYXlNczogbGVhdmVEZWxheU1zXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFRhYiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn0pO1xuSWNvblRhYi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGFuIGljb24gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBJY29uVGFiYCBhcyB0aGUgdmlzdWFsIGxhYmVsIGZvciBUYWIuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGFuIG9wdGlvbmFsIGNsYXNzTmFtZSB0byBiZSBhZGRlZCB0byB5b3VyIFRhYlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSB0b29sdGlwIGZvciB0aGUgaWNvbiBzaG91bGQgYmUgb3BlbiB3aGVuIGl0IGZpcnN0IHJlbmRlcnNcbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgZGlzcGxheWluZyB0aGUgdG9vbHRpcCBmb3IgdGhlIGljb24uXG4gICAqL1xuICBlbnRlckRlbGF5TXM6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm92aWRlIHRoZSBsYWJlbCB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIFRvb2x0aXAuIFRoZSBsYWJlbCB3aWxsIHVzZVxuICAgKiBgYXJpYS1sYWJlbGxlZGJ5YCBhbmQgd2lsbCBmdWxseSBkZXNjcmliZSB0aGUgY2hpbGQgbm9kZSB0aGF0IGlzIHByb3ZpZGVkLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGhhdmUgdGV4dCBpbiB0aGUgY2hpbGQgbm9kZSBpdCB3aWxsIG5vdCBiZVxuICAgKiBhbm5vdW5jZWQgdG8gdGhlIHNjcmVlbiByZWFkZXIuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwXG4gICAqL1xuICBsZWF2ZURlbGF5TXM6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbi8qKlxuICogVGFiUGFuZWxcbiAqL1xuXG5jb25zdCBUYWJQYW5lbCA9IC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRhYlBhbmVsKF9yZWY3LCBmb3J3YXJkUmVmKSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lOiBjdXN0b21DbGFzc05hbWUsXG4gICAgLi4ucmVzdFxuICB9ID0gX3JlZjc7XG4gIGNvbnN0IHByZWZpeCA9IHVzZVByZWZpeCgpO1xuICBjb25zdCBwYW5lbCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVmID0gdXNlTWVyZ2VkUmVmcyhbZm9yd2FyZFJlZiwgcGFuZWxdKTtcbiAgY29uc3QgW3RhYkluZGV4LCBzZXRUYWJJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2ludGVyYWN0aXZlQ29udGVudCwgc2V0SW50ZXJhY3RpdmVDb250ZW50XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIHNlbGVjdGVkSW5kZXgsXG4gICAgYmFzZUlkXG4gIH0gPSBSZWFjdF9fZGVmYXVsdC51c2VDb250ZXh0KFRhYnNDb250ZXh0KTtcbiAgY29uc3QgaW5kZXggPSBSZWFjdF9fZGVmYXVsdC51c2VDb250ZXh0KFRhYlBhbmVsQ29udGV4dCk7XG4gIGNvbnN0IGlkID0gYCR7YmFzZUlkfS10YWJwYW5lbC0ke2luZGV4fWA7XG4gIGNvbnN0IHRhYklkID0gYCR7YmFzZUlkfS10YWItJHtpbmRleH1gO1xuICBjb25zdCBjbGFzc05hbWUgPSBjeChgJHtwcmVmaXh9LS10YWItY29udGVudGAsIGN1c3RvbUNsYXNzTmFtZSwge1xuICAgIFtgJHtwcmVmaXh9LS10YWItY29udGVudC0taW50ZXJhY3RpdmVgXTogaW50ZXJhY3RpdmVDb250ZW50XG4gIH0pO1xuICB1c2VFZmZlY3RPbmNlKCgpID0+IHtcbiAgICBpZiAoIXBhbmVsLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGVudCA9IGdldEludGVyYWN0aXZlQ29udGVudChwYW5lbC5jdXJyZW50KTtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgc2V0SW50ZXJhY3RpdmVDb250ZW50KHRydWUpO1xuICAgICAgc2V0VGFiSW5kZXgoLTEpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gdGFiaW5kZXggc2hvdWxkIG9ubHkgYmUgMCBpZiBubyBpbnRlcmFjdGl2ZSBjb250ZW50IGluIGNoaWxkcmVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IHBhbmVsLmN1cnJlbnQ7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgY29uc3QgY29udGVudCA9IGdldEludGVyYWN0aXZlQ29udGVudChub2RlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHNldEludGVyYWN0aXZlQ29udGVudCh0cnVlKTtcbiAgICAgICAgc2V0VGFiSW5kZXgoLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SW50ZXJhY3RpdmVDb250ZW50KGZhbHNlKTtcbiAgICAgICAgc2V0VGFiSW5kZXgoMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHt9LCByZXN0LCB7XG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGFiSWQsXG4gICAgaWQ6IGlkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogcmVmLFxuICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgaGlkZGVuOiBzZWxlY3RlZEluZGV4ICE9PSBpbmRleFxuICB9KSwgY2hpbGRyZW4pO1xufSk7XG5UYWJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGNoaWxkIGVsZW1lbnRzIHRvIGJlIHJlbmRlcmVkIGluc2lkZSBgVGFiUGFuZWxgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogU3BlY2lmeSBhbiBvcHRpb25hbCBjbGFzc05hbWUgdG8gYmUgYWRkZWQgdG8gVGFiUGFuZWwuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbi8qKlxuICogVGFiUGFuZWxzXG4gKi9cblxuZnVuY3Rpb24gVGFiUGFuZWxzKF9yZWY4KSB7XG4gIGxldCB7XG4gICAgY2hpbGRyZW5cbiAgfSA9IF9yZWY4O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHQuRnJhZ21lbnQsIG51bGwsIFJlYWN0X19kZWZhdWx0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChUYWJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBpbmRleFxuICAgIH0sIGNoaWxkKTtcbiAgfSkpO1xufVxuVGFiUGFuZWxzLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgY2hpbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQgaW5zaWRlIGBUYWJQYW5lbHNgLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuXG5leHBvcnQgeyBJY29uVGFiLCBUYWIsIFRhYkxpc3QsIFRhYlBhbmVsLCBUYWJQYW5lbHMsIFRhYnMgfTtcbiJdLCJuYW1lcyI6WyJleHRlbmRzIiwiX2V4dGVuZHMiLCJDaGV2cm9uTGVmdCIsIkNoZXZyb25SaWdodCIsIkNsb3NlIiwiYnJlYWtwb2ludHMiLCJjeCIsImRlYm91bmNlIiwiUHJvcFR5cGVzIiwiUmVhY3RfX2RlZmF1bHQiLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwiZm9yd2FyZFJlZiIsImlzRWxlbWVudCIsIlRvb2x0aXAiLCJ1c2VDb250cm9sbGFibGVTdGF0ZSIsInVzZUVmZmVjdE9uY2UiLCJ1c2VJZCIsInVzZUlzb21vcnBoaWNFZmZlY3QiLCJ1c2VNZXJnZWRSZWZzIiwiZ2V0SW50ZXJhY3RpdmVDb250ZW50IiwidXNlUHJlZml4IiwidXNlUHJlc3NhYmxlIiwiZGVwcmVjYXRlIiwidXNlRXZlbnQiLCJ1c2VNYXRjaE1lZGlhIiwibWF0Y2hlcyIsIm1hdGNoIiwiQXJyb3dSaWdodCIsIkFycm93TGVmdCIsIkhvbWUiLCJFbmQiLCJEZWxldGUiLCJfQ2hldnJvbkxlZnQiLCJfQ2hldnJvblJpZ2h0IiwiX0Nsb3NlIiwiVGFic0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiYmFzZUlkIiwiYWN0aXZlSW5kZXgiLCJkZWZhdWx0U2VsZWN0ZWRJbmRleCIsImRpc21pc3NhYmxlIiwib25UYWJDbG9zZVJlcXVlc3QiLCJzZXRBY3RpdmVJbmRleCIsInNlbGVjdGVkSW5kZXgiLCJzZXRTZWxlY3RlZEluZGV4IiwiVGFiQ29udGV4dCIsImluZGV4IiwiaGFzU2Vjb25kYXJ5TGFiZWwiLCJsZ01lZGlhUXVlcnkiLCJsZyIsIndpZHRoIiwiVGFiUGFuZWxDb250ZXh0IiwiVGFicyIsIl9yZWYiLCJjaGlsZHJlbiIsIm9uQ2hhbmdlIiwiY29udHJvbGxlZFNlbGVjdGVkSW5kZXgiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsInByb3BUeXBlcyIsIm5vZGUiLCJudW1iZXIiLCJib29sIiwiZnVuYyIsInByb3BzIiwiRXJyb3IiLCJ1bmRlZmluZWQiLCJnZXROZXh0SW5kZXgiLCJldmVudCIsInRvdGFsIiwiVGFiTGlzdCIsIl9yZWYyIiwib25LZXlEb3duIiwidGFicyIsInByZXZlbnREZWZhdWx0IiwiYWN0aXZlVGFicyIsImN1cnJlbnQiLCJmaWx0ZXIiLCJ0YWIiLCJkaXNhYmxlZCIsImN1cnJlbnRJbmRleCIsImluZGV4T2YiLCJhY3RpdmF0aW9uIiwibmV4dEluZGV4IiwibGVuZ3RoIiwiZm9jdXMiLCJsYWJlbCIsImNsYXNzTmFtZSIsImN1c3RvbUNsYXNzTmFtZSIsImNvbnRhaW5lZCIsImZ1bGxXaWR0aCIsImljb25TaXplIiwibGVmdE92ZXJmbG93QnV0dG9uUHJvcHMiLCJsaWdodCIsInJpZ2h0T3ZlcmZsb3dCdXR0b25Qcm9wcyIsInNjcm9sbERlYm91bmNlV2FpdCIsInNjcm9sbEludG9WaWV3IiwicmVzdCIsInVzZUNvbnRleHQiLCJwcmVmaXgiLCJyZWYiLCJwcmV2aW91c0J1dHRvbiIsIm5leHRCdXR0b24iLCJpc1Njcm9sbGFibGUiLCJzZXRJc1Njcm9sbGFibGUiLCJzY3JvbGxMZWZ0Iiwic2V0U2Nyb2xsTGVmdCIsImhhc1NlY29uZGFyeUxhYmVsVGFicyIsIkNoaWxkcmVuIiwidG9BcnJheSIsInNvbWUiLCJjaGlsZCIsInNlY29uZGFyeUxhYmVsIiwiaXNMZyIsImRpc3RyaWJ1dGVXaWR0aCIsImJ1dHRvbldpZHRoIiwiY2xpZW50V2lkdGgiLCJzY3JvbGxXaWR0aCIsImlzTmV4dEJ1dHRvblZpc2libGUiLCJzZXRJc05leHRCdXR0b25WaXNpYmxlIiwiaXNQcmV2aW91c0J1dHRvblZpc2libGUiLCJwcmV2aW91c0J1dHRvbkNsYXNzZXMiLCJuZXh0QnV0dG9uQ2xhc3NlcyIsImRlYm91bmNlZE9uU2Nyb2xsIiwidGFyZ2V0IiwiYmxvY2siLCJpbmxpbmUiLCJoYW5kbGVyIiwiZGVib3VuY2VkSGFuZGxlciIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYW5jZWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidGFiV2lkdGgiLCJzdGFydCIsIm9mZnNldExlZnQiLCJlbmQiLCJ2aXNpYmxlU3RhcnQiLCJ2aXNpYmxlRW5kIiwib25QcmVzcyIsIl9yZWYzIiwibG9uZ1ByZXNzIiwiTWF0aCIsIm1heCIsIm9uTG9uZ1ByZXNzIiwiY3JlYXRlTG9uZ1ByZXNzQmVoYXZpb3IiLCJfcmVmNCIsIm1pbiIsInRhYkluZGV4IiwidHlwZSIsInJvbGUiLCJvblNjcm9sbCIsIm1hcCIsImNsb25lRWxlbWVudCIsIm9uZU9mIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsImRpcmVjdGlvbiIsImRlZmF1bHRTY3JvbGxCZWhhdmlvciIsInN0eWxlIiwic2Nyb2xsRGVsdGEiLCJmcmFtZUlkIiwidGljayIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiVGFiIiwiX3JlZjUiLCJhcyIsIm9uQ2xpY2siLCJyZW5kZXJJY29uIiwiSWNvbiIsImRpc21pc3NJY29uUmVmIiwidGFiUmVmIiwiaWdub3JlSG92ZXIiLCJzZXRJZ25vcmVIb3ZlciIsImlkIiwicGFuZWxJZCIsIkJhc2VDb21wb25lbnQiLCJvbkRpc21pc3NJY29uTW91c2VFbnRlciIsImV2dCIsInN0b3BQcm9wYWdhdGlvbiIsImNsYXNzTGlzdCIsImFkZCIsIm9uRGlzbWlzc0ljb25Nb3VzZUxlYXZlIiwicmVtb3ZlIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVLZXlEb3duIiwiRGlzbWlzc0ljb24iLCJ0aXRsZSIsImhhc0ljb24iLCJzaXplIiwib25lT2ZUeXBlIiwiZWxlbWVudFR5cGUiLCJyZW5kZXJCdXR0b24iLCJJY29uVGFiIiwiX3JlZjYiLCJkZWZhdWx0T3BlbiIsImVudGVyRGVsYXlNcyIsImxlYXZlRGVsYXlNcyIsImNsYXNzTmFtZXMiLCJhbGlnbiIsIlRhYlBhbmVsIiwiX3JlZjciLCJwYW5lbCIsInNldFRhYkluZGV4IiwiaW50ZXJhY3RpdmVDb250ZW50Iiwic2V0SW50ZXJhY3RpdmVDb250ZW50IiwidGFiSWQiLCJjb250ZW50IiwiY2FsbGJhY2siLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImRpc2Nvbm5lY3QiLCJoaWRkZW4iLCJUYWJQYW5lbHMiLCJfcmVmOCIsIkZyYWdtZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/es/components/Tabs/Tabs.js\n");
2869
2869
 
2870
2870
  /***/ }),
2871
2871
 
@@ -3991,6 +3991,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3991
3991
 
3992
3992
  /***/ }),
3993
3993
 
3994
+ /***/ "../../../node_modules/@carbon/react/node_modules/react-is/cjs/react-is.development.js":
3995
+ /*!*********************************************************************************************!*\
3996
+ !*** ../../../node_modules/@carbon/react/node_modules/react-is/cjs/react-is.development.js ***!
3997
+ \*********************************************************************************************/
3998
+ /***/ ((__unused_webpack_module, exports) => {
3999
+
4000
+ "use strict";
4001
+ eval("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \nif (true) {\n (function() {\n \"use strict\";\n var isValidElementType = function isValidElementType(type) {\n if (typeof type === \"string\" || typeof type === \"function\") {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) {\n return true;\n }\n if (typeof type === \"object\" && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n return false;\n };\n var typeOf = function typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n var $$typeof = object.$$typeof;\n switch($$typeof){\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n default:\n var $$typeofType = type && type.$$typeof;\n switch($$typeofType){\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n return undefined;\n };\n var isAsyncMode = function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isAsyncMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isConcurrentMode = function isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isConcurrentMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isContextConsumer = function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n var isContextProvider = function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n };\n var isElement = function isElement(object) {\n return typeof object === \"object\" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n var isForwardRef = function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n var isFragment = function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n var isLazy = function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n var isMemo = function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n var isPortal = function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n var isProfiler = function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n var isStrictMode = function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n var isSuspense = function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n var isSuspenseList = function isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n // ATTENTION\n // When adding new symbols to this file,\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n // The Symbol used to tag the ReactElement-like types.\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.element\");\n var REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\n var REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\n var REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\");\n var REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n var REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\");\n var REACT_CONTEXT_TYPE = Symbol.for(\"react.context\");\n var REACT_SERVER_CONTEXT_TYPE = Symbol.for(\"react.server_context\");\n var REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\n var REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\");\n var REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\");\n var REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\n var REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n var REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\n // -----------------------------------------------------------------------------\n var enableScopeAPI = false; // Experimental Create Event Handle API.\n var enableCacheElement = false;\n var enableTransitionTracing = false; // No known bugs, but needs performance testing\n var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n // stuff. Intended to enable React core members to more easily debug scheduling\n // issues in DEV builds.\n var enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n var REACT_MODULE_REFERENCE;\n {\n REACT_MODULE_REFERENCE = Symbol.for(\"react.module.reference\");\n }\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false;\n var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.SuspenseList = SuspenseList;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isSuspenseList = isSuspenseList;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVEO0FBRUEsSUFBSUEsSUFBcUMsRUFBRTtJQUN4QyxZQUFXO1FBQ2Q7WUF1Q1NHLHFCQUFULFNBQVNBLG1CQUFtQkMsSUFBSSxFQUFFO1lBQ2hDLElBQUksT0FBT0EsU0FBUyxZQUFZLE9BQU9BLFNBQVMsWUFBWTtnQkFDMUQsT0FBTyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLG1GQUFtRjtZQUdyRixJQUFJQSxTQUFTQyx1QkFBdUJELFNBQVNFLHVCQUF1QkMsc0JBQXVCSCxTQUFTSSwwQkFBMEJKLFNBQVNLLHVCQUF1QkwsU0FBU00sNEJBQTRCQyxzQkFBdUJQLFNBQVNRLHdCQUF3QkMsa0JBQW1CQyxzQkFBdUJDLHlCQUEwQjtnQkFDN1QsT0FBTyxJQUFJO1lBQ2IsQ0FBQztZQUVELElBQUksT0FBT1gsU0FBUyxZQUFZQSxTQUFTLElBQUksRUFBRTtnQkFDN0MsSUFBSUEsS0FBS1ksUUFBUSxLQUFLQyxtQkFBbUJiLEtBQUtZLFFBQVEsS0FBS0UsbUJBQW1CZCxLQUFLWSxRQUFRLEtBQUtHLHVCQUF1QmYsS0FBS1ksUUFBUSxLQUFLSSxzQkFBc0JoQixLQUFLWSxRQUFRLEtBQUtLLDBCQUEwQiw2REFBNkQ7Z0JBQ3hRLDZEQUE2RDtnQkFDN0QsK0RBQStEO2dCQUMvRCxRQUFRO2dCQUNSakIsS0FBS1ksUUFBUSxLQUFLTSwwQkFBMEJsQixLQUFLbUIsV0FBVyxLQUFLQyxXQUFXO29CQUMxRSxPQUFPLElBQUk7Z0JBQ2IsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLEtBQUs7UUFDZDtZQUVTQyxTQUFULFNBQVNBLE9BQU9DLE1BQU0sRUFBRTtZQUN0QixJQUFJLE9BQU9BLFdBQVcsWUFBWUEsV0FBVyxJQUFJLEVBQUU7Z0JBQ2pELElBQUlWLFdBQVdVLE9B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MUJZLHVCQUF1QixHQUFHWDtRQUMxQlcsZUFBZSxHQUFHVjtRQUNsQlUsa0JBQWtCLEdBQUdUO1FBQ3JCUyxnQkFBZ0IsR0FBR1I7UUFDbkJRLFlBQVksR0FBR1A7UUFDZk8sWUFBWSxHQUFHTjtRQUNmTSxjQUFjLEdBQUdMO1FBQ2pCSyxnQkFBZ0IsR0FBR0o7UUFDbkJJLGtCQUFrQixHQUFHSDtRQUNyQkcsZ0JBQWdCLEdBQUdGO1FBQ25CRSxvQkFBb0IsR0FBR0Q7UUFDdkJDLG1CQUFtQixHQUFHL0I7UUFDdEIrQix3QkFBd0IsR0FBRzVCO1FBQzNCNEIseUJBQXlCLEdBQUcxQjtRQUM1QjBCLHlCQUF5QixHQUFHekI7UUFDNUJ5QixpQkFBaUIsR0FBR3hCO1FBQ3BCd0Isb0JBQW9CLEdBQUd2QjtRQUN2QnVCLGtCQUFrQixHQUFHdEI7UUFDckJzQixjQUFjLEdBQUdyQjtRQUNqQnFCLGNBQWMsR0FBR3BCO1FBQ2pCb0IsZ0JBQWdCLEdBQUduQjtRQUNuQm1CLGtCQUFrQixHQUFHbEI7UUFDckJrQixvQkFBb0IsR0FBR2pCO1FBQ3ZCaUIsa0JBQWtCLEdBQUdoQjtRQUNyQmdCLHNCQUFzQixHQUFHZjtRQUN6QmUsMEJBQTBCLEdBQUczRDtRQUM3QjJELGNBQWMsR0FBR3JDO0lBQ2Y7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNhcmJvbi9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzP2U3MDciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VMaXN0KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLlN1c3BlbnNlTGlzdCA9IFN1c3BlbnNlTGlzdDtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGlzU3VzcGVuc2VMaXN0O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlIiwiUkVBQ1RfRlJBR01FTlRfVFlQRSIsIlJFQUNUX1BST0ZJTEVSX1RZUEUiLCJlbmFibGVEZWJ1Z1RyYWNpbmciLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsImVuYWJsZUxlZ2FjeUhpZGRlbiIsIlJFQUNUX09GRlNDUkVFTl9UWVBFIiwiZW5hYmxlU2NvcGVBUEkiLCJlbmFibGVDYWNoZUVsZW1lbnQiLCJlbmFibGVUcmFuc2l0aW9uVHJhY2luZyIsIiQkdHlwZW9mIiwiUkVBQ1RfTEFaWV9UWVBFIiwiUkVBQ1RfTUVNT19UWVBFIiwiUkVBQ1RfUFJPVklERVJfVFlQRSIsIlJFQUNUX0NPTlRFWFRfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJSRUFDVF9NT0RVTEVfUkVGRVJFTkNFIiwiZ2V0TW9kdWxlSWQiLCJ1bmRlZmluZWQiLCJ0eXBlT2YiLCJvYmplY3QiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCIkJHR5cGVvZlR5cGUiLCJSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJpc0FzeW5jTW9kZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlIiwiY29uc29sZSIsImlzQ29uY3VycmVudE1vZGUiLCJoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImlzRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzRnJhZ21lbnQiLCJpc0xhenkiLCJpc01lbW8iLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJpc1N0cmljdE1vZGUiLCJpc1N1c3BlbnNlIiwiaXNTdXNwZW5zZUxpc3QiLCJTeW1ib2wiLCJmb3IiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJFbGVtZW50IiwiRm9yd2FyZFJlZiIsIkZyYWdtZW50IiwiTGF6eSIsIk1lbW8iLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsIlN1c3BlbnNlTGlzdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/node_modules/react-is/cjs/react-is.development.js\n");
4002
+
4003
+ /***/ }),
4004
+
4005
+ /***/ "../../../node_modules/@carbon/react/node_modules/react-is/index.js":
4006
+ /*!**************************************************************************!*\
4007
+ !*** ../../../node_modules/@carbon/react/node_modules/react-is/index.js ***!
4008
+ \**************************************************************************/
4009
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4010
+
4011
+ "use strict";
4012
+ eval("\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"../../../node_modules/@carbon/react/node_modules/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BjYXJib24vcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBRUEsSUFBSUEsS0FBeUIsRUFBYyxFQUUxQyxNQUFNO0lBQ0xHLGtLQUF5QjtBQUMzQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGNhcmJvbi9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanM/MmVjNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@carbon/react/node_modules/react-is/index.js\n");
4013
+
4014
+ /***/ }),
4015
+
3994
4016
  /***/ "../../../node_modules/classnames/index.js":
3995
4017
  /*!*************************************************!*\
3996
4018
  !*** ../../../node_modules/classnames/index.js ***!
@@ -4103,29 +4125,7 @@ eval("!function(t, i) {\n true ? module.exports = i() : 0;\n}(this, function
4103
4125
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4104
4126
 
4105
4127
  "use strict";
4106
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Downshift$1),\n/* harmony export */ resetIdCounter: () => (/* binding */ resetIdCounter),\n/* harmony export */ useCombobox: () => (/* binding */ useCombobox),\n/* harmony export */ useMultipleSelection: () => (/* binding */ useMultipleSelection),\n/* harmony export */ useSelect: () => (/* binding */ useSelect)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-is */ \"../../../node_modules/downshift/node_modules/react-is/index.js\");\n/* harmony import */ var compute_scroll_into_view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! compute-scroll-into-view */ \"../../../node_modules/compute-scroll-into-view/dist/index.js\");\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ \"../../../node_modules/downshift/node_modules/tslib/tslib.es6.mjs\");\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\n\n\n\n\n\n\n\n\n\nvar idCounter = 0;\n/**\n * Accepts a parameter and returns it if it's a function\n * or a noop function if it's not. This allows us to\n * accept a callback, but not worry about it if it's not\n * passed.\n * @param {Function} cb the callback\n * @return {Function} a function\n */ function cbToCb(cb) {\n return typeof cb === \"function\" ? cb : noop;\n}\nfunction noop() {}\n/**\n * Scroll node into view if necessary\n * @param {HTMLElement} node the element that should scroll into view\n * @param {HTMLElement} menuNode the menu element of the component\n */ function scrollIntoView(node, menuNode) {\n if (!node) {\n return;\n }\n var actions = (0,compute_scroll_into_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(node, {\n boundary: menuNode,\n block: \"nearest\",\n scrollMode: \"if-needed\"\n });\n actions.forEach(function(_ref) {\n var el = _ref.el, top = _ref.top, left = _ref.left;\n el.scrollTop = top;\n el.scrollLeft = left;\n });\n}\n/**\n * @param {HTMLElement} parent the parent node\n * @param {HTMLElement} child the child node\n * @param {Window} environment The window context where downshift renders.\n * @return {Boolean} whether the parent is the child or the child is in the parent\n */ function isOrContainsNode(parent, child, environment) {\n var result = parent === child || _instanceof(child, environment.Node) && parent.contains && parent.contains(child);\n return result;\n}\n/**\n * Simple debounce implementation. Will call the given\n * function once after the time given has passed since\n * it was last called.\n * @param {Function} fn the function to call after the time\n * @param {Number} time the time to wait\n * @return {Function} the debounced function\n */ function debounce(fn, time) {\n var cancel = function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n var wrapper = function wrapper() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n cancel();\n timeoutId = setTimeout(function() {\n timeoutId = null;\n fn.apply(void 0, args);\n }, time);\n };\n var timeoutId;\n wrapper.cancel = cancel;\n return wrapper;\n}\n/**\n * This is intended to be used to compose event handlers.\n * They are executed in order until one of them sets\n * `event.preventDownshiftDefault = true`.\n * @param {...Function} fns the event handler functions\n * @return {Function} the event handler to add to an element\n */ function callAllEventHandlers() {\n for(var _len2 = arguments.length, fns = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n fns[_key2] = arguments[_key2];\n }\n return function(event) {\n for(var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++){\n args[_key3 - 1] = arguments[_key3];\n }\n return fns.some(function(fn) {\n if (fn) {\n fn.apply(void 0, [\n event\n ].concat(args));\n }\n return event.preventDownshiftDefault || event.hasOwnProperty(\"nativeEvent\") && event.nativeEvent.preventDownshiftDefault;\n });\n };\n}\nfunction handleRefs() {\n for(var _len4 = arguments.length, refs = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++){\n refs[_key4] = arguments[_key4];\n }\n return function(node) {\n refs.forEach(function(ref) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n });\n };\n}\n/**\n * This generates a unique ID for an instance of Downshift\n * @return {String} the unique ID\n */ function generateId() {\n return String(idCounter++);\n}\n/**\n * Resets idCounter to 0. Used for SSR.\n */ function resetIdCounter() {\n // istanbul ignore next\n if (\"useId\" in (react__WEBPACK_IMPORTED_MODULE_4___default())) {\n console.warn(\"It is not necessary to call resetIdCounter when using React 18+\");\n return;\n }\n idCounter = 0;\n}\n/**\n * Default implementation for status message. Only added when menu is open.\n * Will specify if there are results in the list, and if so, how many,\n * and what keys are relevant.\n *\n * @param {Object} param the downshift state and other relevant properties\n * @return {String} the a11y status message\n */ function getA11yStatusMessage$1(_ref2) {\n var isOpen = _ref2.isOpen, resultCount = _ref2.resultCount, previousResultCount = _ref2.previousResultCount;\n if (!isOpen) {\n return \"\";\n }\n if (!resultCount) {\n return \"No results are available.\";\n }\n if (resultCount !== previousResultCount) {\n return resultCount + \" result\" + (resultCount === 1 ? \" is\" : \"s are\") + \" available, use up and down arrow keys to navigate. Press Enter key to select.\";\n }\n return \"\";\n}\n/**\n * Takes an argument and if it's an array, returns the first item in the array\n * otherwise returns the argument\n * @param {*} arg the maybe-array\n * @param {*} defaultValue the value if arg is falsey not defined\n * @return {*} the arg or it's first item\n */ function unwrapArray(arg, defaultValue) {\n arg = Array.isArray(arg) ? /* istanbul ignore next (preact) */ arg[0] : arg;\n if (!arg && defaultValue) {\n return defaultValue;\n } else {\n return arg;\n }\n}\n/**\n * @param {Object} element (P)react element\n * @return {Boolean} whether it's a DOM element\n */ function isDOMElement(element) {\n // then we assume this is react\n return typeof element.type === \"string\";\n}\n/**\n * @param {Object} element (P)react element\n * @return {Object} the props\n */ function getElementProps(element) {\n return element.props;\n}\n/**\n * Throws a helpful error message for required properties. Useful\n * to be used as a default in destructuring or object params.\n * @param {String} fnName the function name\n * @param {String} propName the prop name\n */ function requiredProp(fnName, propName) {\n // eslint-disable-next-line no-console\n console.error('The property \"' + propName + '\" is required in \"' + fnName + '\"');\n}\nvar stateKeys = [\n \"highlightedIndex\",\n \"inputValue\",\n \"isOpen\",\n \"selectedItem\",\n \"type\"\n];\n/**\n * @param {Object} state the state object\n * @return {Object} state that is relevant to downshift\n */ function pickState(state) {\n if (state === void 0) {\n state = {};\n }\n var result = {};\n stateKeys.forEach(function(k) {\n if (state.hasOwnProperty(k)) {\n result[k] = state[k];\n }\n });\n return result;\n}\n/**\n * This will perform a shallow merge of the given state object\n * with the state coming from props\n * (for the controlled component scenario)\n * This is used in state updater functions so they're referencing\n * the right state regardless of where it comes from.\n *\n * @param {Object} state The state of the component/hook.\n * @param {Object} props The props that may contain controlled values.\n * @returns {Object} The merged controlled state.\n */ function getState(state, props) {\n return Object.keys(state).reduce(function(prevState, key) {\n prevState[key] = isControlledProp(props, key) ? props[key] : state[key];\n return prevState;\n }, {});\n}\n/**\n * This determines whether a prop is a \"controlled prop\" meaning it is\n * state which is controlled by the outside of this component rather\n * than within this component.\n *\n * @param {Object} props The props that may contain controlled values.\n * @param {String} key the key to check\n * @return {Boolean} whether it is a controlled controlled prop\n */ function isControlledProp(props, key) {\n return props[key] !== undefined;\n}\n/**\n * Normalizes the 'key' property of a KeyboardEvent in IE/Edge\n * @param {Object} event a keyboardEvent object\n * @return {String} keyboard key\n */ function normalizeArrowKey(event) {\n var key = event.key, keyCode = event.keyCode;\n /* istanbul ignore next (ie) */ if (keyCode >= 37 && keyCode <= 40 && key.indexOf(\"Arrow\") !== 0) {\n return \"Arrow\" + key;\n }\n return key;\n}\n/**\n * Simple check if the value passed is object literal\n * @param {*} obj any things\n * @return {Boolean} whether it's object literal\n */ function isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {number} offset The offset from the current highlightedIndex to start searching.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean?} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next highlightedIndex.\n */ function getHighlightedIndex(start, offset, items, isItemDisabled, circular) {\n if (circular === void 0) {\n circular = false;\n }\n var count = items.length;\n if (count === 0) {\n return -1;\n }\n var itemsLastIndex = count - 1;\n if (typeof start !== \"number\" || start < 0 || start > itemsLastIndex) {\n start = offset > 0 ? -1 : itemsLastIndex + 1;\n }\n var current = start + offset;\n if (current < 0) {\n current = circular ? itemsLastIndex : 0;\n } else if (current > itemsLastIndex) {\n current = circular ? 0 : itemsLastIndex;\n }\n var highlightedIndex = getNonDisabledIndex(current, offset < 0, items, isItemDisabled, circular);\n if (highlightedIndex === -1) {\n return start >= count ? -1 : start;\n }\n return highlightedIndex;\n}\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {boolean} backwards If true, it will search backwards from the start.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next non-disabled index.\n */ function getNonDisabledIndex(start, backwards, items, isItemDisabled, circular) {\n if (circular === void 0) {\n circular = false;\n }\n var count = items.length;\n if (backwards) {\n for(var index = start; index >= 0; index--){\n if (!isItemDisabled(items[index], index)) {\n return index;\n }\n }\n } else {\n for(var _index = start; _index < count; _index++){\n if (!isItemDisabled(items[_index], _index)) {\n return _index;\n }\n }\n }\n if (circular) {\n return getNonDisabledIndex(backwards ? count - 1 : 0, backwards, items, isItemDisabled);\n }\n return -1;\n}\n/**\n * Checks if event target is within the downshift elements.\n *\n * @param {EventTarget} target Target to check.\n * @param {HTMLElement[]} downshiftElements The elements that form downshift (list, toggle button etc).\n * @param {Window} environment The window context where downshift renders.\n * @param {boolean} checkActiveElement Whether to also check activeElement.\n *\n * @returns {boolean} Whether or not the target is within downshift elements.\n */ function targetWithinDownshift(target, downshiftElements, environment, checkActiveElement) {\n if (checkActiveElement === void 0) {\n checkActiveElement = true;\n }\n return downshiftElements.some(function(contextNode) {\n return contextNode && (isOrContainsNode(contextNode, target, environment) || checkActiveElement && isOrContainsNode(contextNode, environment.document.activeElement, environment));\n });\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar validateControlledUnchanged = noop;\n/* istanbul ignore next */ if (true) {\n validateControlledUnchanged = function validateControlledUnchanged(state, prevProps, nextProps) {\n var warningDescription = \"This prop should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled Downshift element for the lifetime of the component. More info: https://github.com/downshift-js/downshift#control-props\";\n Object.keys(state).forEach(function(propKey) {\n if (prevProps[propKey] !== undefined && nextProps[propKey] === undefined) {\n // eslint-disable-next-line no-console\n console.error('downshift: A component has changed the controlled prop \"' + propKey + '\" to be uncontrolled. ' + warningDescription);\n } else if (prevProps[propKey] === undefined && nextProps[propKey] !== undefined) {\n // eslint-disable-next-line no-console\n console.error('downshift: A component has changed the uncontrolled prop \"' + propKey + '\" to be controlled. ' + warningDescription);\n }\n });\n };\n}\nvar cleanupStatus = debounce(function(documentProp) {\n getStatusDiv(documentProp).textContent = \"\";\n}, 500);\n/**\n * @param {String} status the status message\n * @param {Object} documentProp document passed by the user.\n */ function setStatus(status, documentProp) {\n var div = getStatusDiv(documentProp);\n if (!status) {\n return;\n }\n div.textContent = status;\n cleanupStatus(documentProp);\n}\n/**\n * Get the status node or create it if it does not already exist.\n * @param {Object} documentProp document passed by the user.\n * @return {HTMLElement} the status node.\n */ function getStatusDiv(documentProp) {\n if (documentProp === void 0) {\n documentProp = document;\n }\n var statusDiv = documentProp.getElementById(\"a11y-status-message\");\n if (statusDiv) {\n return statusDiv;\n }\n statusDiv = documentProp.createElement(\"div\");\n statusDiv.setAttribute(\"id\", \"a11y-status-message\");\n statusDiv.setAttribute(\"role\", \"status\");\n statusDiv.setAttribute(\"aria-live\", \"polite\");\n statusDiv.setAttribute(\"aria-relevant\", \"additions text\");\n Object.assign(statusDiv.style, {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\"\n });\n documentProp.body.appendChild(statusDiv);\n return statusDiv;\n}\nvar unknown = true ? \"__autocomplete_unknown__\" : 0;\nvar mouseUp = true ? \"__autocomplete_mouseup__\" : 0;\nvar itemMouseEnter = true ? \"__autocomplete_item_mouseenter__\" : 0;\nvar keyDownArrowUp = true ? \"__autocomplete_keydown_arrow_up__\" : 0;\nvar keyDownArrowDown = true ? \"__autocomplete_keydown_arrow_down__\" : 0;\nvar keyDownEscape = true ? \"__autocomplete_keydown_escape__\" : 0;\nvar keyDownEnter = true ? \"__autocomplete_keydown_enter__\" : 0;\nvar keyDownHome = true ? \"__autocomplete_keydown_home__\" : 0;\nvar keyDownEnd = true ? \"__autocomplete_keydown_end__\" : 0;\nvar clickItem = true ? \"__autocomplete_click_item__\" : 0;\nvar blurInput = true ? \"__autocomplete_blur_input__\" : 0;\nvar changeInput = true ? \"__autocomplete_change_input__\" : 0;\nvar keyDownSpaceButton = true ? \"__autocomplete_keydown_space_button__\" : 0;\nvar clickButton = true ? \"__autocomplete_click_button__\" : 0;\nvar blurButton = true ? \"__autocomplete_blur_button__\" : 0;\nvar controlledPropUpdatedSelectedItem = true ? \"__autocomplete_controlled_prop_updated_selected_item__\" : 0;\nvar touchEnd = true ? \"__autocomplete_touchend__\" : 0;\nvar stateChangeTypes$3 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n unknown: unknown,\n mouseUp: mouseUp,\n itemMouseEnter: itemMouseEnter,\n keyDownArrowUp: keyDownArrowUp,\n keyDownArrowDown: keyDownArrowDown,\n keyDownEscape: keyDownEscape,\n keyDownEnter: keyDownEnter,\n keyDownHome: keyDownHome,\n keyDownEnd: keyDownEnd,\n clickItem: clickItem,\n blurInput: blurInput,\n changeInput: changeInput,\n keyDownSpaceButton: keyDownSpaceButton,\n clickButton: clickButton,\n blurButton: blurButton,\n controlledPropUpdatedSelectedItem: controlledPropUpdatedSelectedItem,\n touchEnd: touchEnd\n});\nvar _excluded$4 = [\n \"refKey\",\n \"ref\"\n], _excluded2$3 = [\n \"onClick\",\n \"onPress\",\n \"onKeyDown\",\n \"onKeyUp\",\n \"onBlur\"\n], _excluded3$2 = [\n \"onKeyDown\",\n \"onBlur\",\n \"onChange\",\n \"onInput\",\n \"onChangeText\"\n], _excluded4$1 = [\n \"refKey\",\n \"ref\"\n], _excluded5 = [\n \"onMouseMove\",\n \"onMouseDown\",\n \"onClick\",\n \"onPress\",\n \"index\",\n \"item\"\n];\nvar Downshift = /*#__PURE__*/ function() {\n var Downshift = /*#__PURE__*/ function(_Component) {\n var Downshift = function Downshift(_props) {\n var _this;\n _this = _Component.call(this, _props) || this;\n // fancy destructuring + defaults + aliases\n // this basically says each value of state should either be set to\n // the initial value or the default value if the initial value is not provided\n _this.id = _this.props.id || \"downshift-\" + generateId();\n _this.menuId = _this.props.menuId || _this.id + \"-menu\";\n _this.labelId = _this.props.labelId || _this.id + \"-label\";\n _this.inputId = _this.props.inputId || _this.id + \"-input\";\n _this.getItemId = _this.props.getItemId || function(index) {\n return _this.id + \"-item-\" + index;\n };\n _this.input = null;\n _this.items = [];\n // itemCount can be changed asynchronously\n // from within downshift (so it can't come from a prop)\n // this is why we store it as an instance and use\n // getItemCount rather than just use items.length\n // (to support windowing + async)\n _this.itemCount = null;\n _this.previousResultCount = 0;\n _this.timeoutIds = [];\n /**\n * @param {Function} fn the function to call after the time\n * @param {Number} time the time to wait\n */ _this.internalSetTimeout = function(fn, time) {\n var id = setTimeout(function() {\n _this.timeoutIds = _this.timeoutIds.filter(function(i) {\n return i !== id;\n });\n fn();\n }, time);\n _this.timeoutIds.push(id);\n };\n _this.setItemCount = function(count) {\n _this.itemCount = count;\n };\n _this.unsetItemCount = function() {\n _this.itemCount = null;\n };\n _this.isItemDisabled = function(_item, index) {\n var currentElementNode = _this.getItemNodeFromIndex(index);\n return currentElementNode && currentElementNode.hasAttribute(\"disabled\");\n };\n _this.setHighlightedIndex = function(highlightedIndex, otherStateToSet) {\n if (highlightedIndex === void 0) {\n highlightedIndex = _this.props.defaultHighlightedIndex;\n }\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n highlightedIndex: highlightedIndex\n }, otherStateToSet));\n };\n _this.clearSelection = function(cb) {\n _this.internalSetState({\n selectedItem: null,\n inputValue: \"\",\n highlightedIndex: _this.props.defaultHighlightedIndex,\n isOpen: _this.props.defaultIsOpen\n }, cb);\n };\n _this.selectItem = function(item, otherStateToSet, cb) {\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: _this.props.defaultIsOpen,\n highlightedIndex: _this.props.defaultHighlightedIndex,\n selectedItem: item,\n inputValue: _this.props.itemToString(item)\n }, otherStateToSet), cb);\n };\n _this.selectItemAtIndex = function(itemIndex, otherStateToSet, cb) {\n var item = _this.items[itemIndex];\n if (item == null) {\n return;\n }\n _this.selectItem(item, otherStateToSet, cb);\n };\n _this.selectHighlightedItem = function(otherStateToSet, cb) {\n return _this.selectItemAtIndex(_this.getState().highlightedIndex, otherStateToSet, cb);\n };\n // any piece of our state can live in two places:\n // 1. Uncontrolled: it's internal (this.state)\n // We will call this.setState to update that state\n // 2. Controlled: it's external (this.props)\n // We will call this.props.onStateChange to update that state\n //\n // In addition, we'll call this.props.onChange if the\n // selectedItem is changed.\n _this.internalSetState = function(stateToSet, cb) {\n var isItemSelected, onChangeArg;\n var onStateChangeArg = {};\n var isStateToSetFunction = typeof stateToSet === \"function\";\n // we want to call `onInputValueChange` before the `setState` call\n // so someone controlling the `inputValue` state gets notified of\n // the input change as soon as possible. This avoids issues with\n // preserving the cursor position.\n // See https://github.com/downshift-js/downshift/issues/217 for more info.\n if (!isStateToSetFunction && stateToSet.hasOwnProperty(\"inputValue\")) {\n _this.props.onInputValueChange(stateToSet.inputValue, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.getStateAndHelpers(), stateToSet));\n }\n return _this.setState(function(state) {\n state = _this.getState(state);\n var newStateToSet = isStateToSetFunction ? stateToSet(state) : stateToSet;\n // Your own function that could modify the state that will be set.\n newStateToSet = _this.props.stateReducer(state, newStateToSet);\n // checks if an item is selected, regardless of if it's different from\n // what was selected before\n // used to determine if onSelect and onChange callbacks should be called\n isItemSelected = newStateToSet.hasOwnProperty(\"selectedItem\");\n // this keeps track of the object we want to call with setState\n var nextState = {};\n // we need to call on change if the outside world is controlling any of our state\n // and we're trying to update that state. OR if the selection has changed and we're\n // trying to update the selection\n if (isItemSelected && newStateToSet.selectedItem !== state.selectedItem) {\n onChangeArg = newStateToSet.selectedItem;\n }\n newStateToSet.type = newStateToSet.type || unknown;\n Object.keys(newStateToSet).forEach(function(key) {\n // onStateChangeArg should only have the state that is\n // actually changing\n if (state[key] !== newStateToSet[key]) {\n onStateChangeArg[key] = newStateToSet[key];\n }\n // the type is useful for the onStateChangeArg\n // but we don't actually want to set it in internal state.\n // this is an undocumented feature for now... Not all internalSetState\n // calls support it and I'm not certain we want them to yet.\n // But it enables users controlling the isOpen state to know when\n // the isOpen state changes due to mouseup events which is quite handy.\n if (key === \"type\") {\n return;\n }\n newStateToSet[key];\n // if it's coming from props, then we don't care to set it internally\n if (!isControlledProp(_this.props, key)) {\n nextState[key] = newStateToSet[key];\n }\n });\n // if stateToSet is a function, then we weren't able to call onInputValueChange\n // earlier, so we'll call it now that we know what the inputValue state will be.\n if (isStateToSetFunction && newStateToSet.hasOwnProperty(\"inputValue\")) {\n _this.props.onInputValueChange(newStateToSet.inputValue, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.getStateAndHelpers(), newStateToSet));\n }\n return nextState;\n }, function() {\n // call the provided callback if it's a function\n cbToCb(cb)();\n // only call the onStateChange and onChange callbacks if\n // we have relevant information to pass them.\n var hasMoreStateThanType = Object.keys(onStateChangeArg).length > 1;\n if (hasMoreStateThanType) {\n _this.props.onStateChange(onStateChangeArg, _this.getStateAndHelpers());\n }\n if (isItemSelected) {\n _this.props.onSelect(stateToSet.selectedItem, _this.getStateAndHelpers());\n }\n if (onChangeArg !== undefined) {\n _this.props.onChange(onChangeArg, _this.getStateAndHelpers());\n }\n // this is currently undocumented and therefore subject to change\n // We'll try to not break it, but just be warned.\n _this.props.onUserAction(onStateChangeArg, _this.getStateAndHelpers());\n });\n };\n //////////////////////////// ROOT\n _this.rootRef = function(node) {\n return _this._rootNode = node;\n };\n _this.getRootProps = function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey, ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$4);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n // this is used in the render to know whether the user has called getRootProps.\n // It uses that to know whether to apply the props automatically\n _this.getRootProps.called = true;\n _this.getRootProps.refKey = refKey;\n _this.getRootProps.suppressRefError = suppressRefError;\n var _this$getState = _this.getState(), isOpen = _this$getState.isOpen;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, _this.rootRef), _extends2.role = \"combobox\", _extends2[\"aria-expanded\"] = isOpen, _extends2[\"aria-haspopup\"] = \"listbox\", _extends2[\"aria-owns\"] = isOpen ? _this.menuId : undefined, _extends2[\"aria-labelledby\"] = _this.labelId, _extends2), rest);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ROOT\n _this.keyDownHandlers = {\n ArrowDown: function ArrowDown(event) {\n var _this2 = this;\n event.preventDefault();\n if (this.getState().isOpen) {\n var amount = event.shiftKey ? 5 : 1;\n this.moveHighlightedIndex(amount, {\n type: keyDownArrowDown\n });\n } else {\n this.internalSetState({\n isOpen: true,\n type: keyDownArrowDown\n }, function() {\n var itemCount = _this2.getItemCount();\n if (itemCount > 0) {\n var _this2$getState = _this2.getState(), highlightedIndex = _this2$getState.highlightedIndex;\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, 1, {\n length: itemCount\n }, _this2.isItemDisabled, true);\n _this2.setHighlightedIndex(nextHighlightedIndex, {\n type: keyDownArrowDown\n });\n }\n });\n }\n },\n ArrowUp: function ArrowUp(event) {\n var _this3 = this;\n event.preventDefault();\n if (this.getState().isOpen) {\n var amount = event.shiftKey ? -5 : -1;\n this.moveHighlightedIndex(amount, {\n type: keyDownArrowUp\n });\n } else {\n this.internalSetState({\n isOpen: true,\n type: keyDownArrowUp\n }, function() {\n var itemCount = _this3.getItemCount();\n if (itemCount > 0) {\n var _this3$getState = _this3.getState(), highlightedIndex = _this3$getState.highlightedIndex;\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, -1, {\n length: itemCount\n }, _this3.isItemDisabled, true);\n _this3.setHighlightedIndex(nextHighlightedIndex, {\n type: keyDownArrowUp\n });\n }\n });\n }\n },\n Enter: function Enter(event) {\n if (event.which === 229) {\n return;\n }\n var _this$getState2 = this.getState(), isOpen = _this$getState2.isOpen, highlightedIndex = _this$getState2.highlightedIndex;\n if (isOpen && highlightedIndex != null) {\n event.preventDefault();\n var item = this.items[highlightedIndex];\n var itemNode = this.getItemNodeFromIndex(highlightedIndex);\n if (item == null || itemNode && itemNode.hasAttribute(\"disabled\")) {\n return;\n }\n this.selectHighlightedItem({\n type: keyDownEnter\n });\n }\n },\n Escape: function Escape(event) {\n event.preventDefault();\n this.reset((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: keyDownEscape\n }, !this.state.isOpen && {\n selectedItem: null,\n inputValue: \"\"\n }));\n }\n };\n //////////////////////////// BUTTON\n _this.buttonKeyDownHandlers = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.keyDownHandlers, {\n \" \": function _(event) {\n event.preventDefault();\n this.toggleMenu({\n type: keyDownSpaceButton\n });\n }\n });\n _this.inputKeyDownHandlers = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.keyDownHandlers, {\n Home: function Home(event) {\n var _this$getState3 = this.getState(), isOpen = _this$getState3.isOpen;\n if (!isOpen) {\n return;\n }\n event.preventDefault();\n var itemCount = this.getItemCount();\n if (itemCount <= 0 || !isOpen) {\n return;\n }\n // get next non-disabled starting downwards from 0 if that's disabled.\n var newHighlightedIndex = getNonDisabledIndex(0, false, {\n length: itemCount\n }, this.isItemDisabled);\n this.setHighlightedIndex(newHighlightedIndex, {\n type: keyDownHome\n });\n },\n End: function End(event) {\n var _this$getState4 = this.getState(), isOpen = _this$getState4.isOpen;\n if (!isOpen) {\n return;\n }\n event.preventDefault();\n var itemCount = this.getItemCount();\n if (itemCount <= 0 || !isOpen) {\n return;\n }\n // get next non-disabled starting upwards from last index if that's disabled.\n var newHighlightedIndex = getNonDisabledIndex(itemCount - 1, true, {\n length: itemCount\n }, this.isItemDisabled);\n this.setHighlightedIndex(newHighlightedIndex, {\n type: keyDownEnd\n });\n }\n });\n _this.getToggleButtonProps = function(_temp3) {\n var _ref3 = _temp3 === void 0 ? {} : _temp3, onClick = _ref3.onClick;\n _ref3.onPress;\n var onKeyDown = _ref3.onKeyDown, onKeyUp = _ref3.onKeyUp, onBlur = _ref3.onBlur, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$3);\n var _this$getState5 = _this.getState(), isOpen = _this$getState5.isOpen;\n var enabledEventHandlers = {\n onClick: callAllEventHandlers(onClick, _this.buttonHandleClick),\n onKeyDown: callAllEventHandlers(onKeyDown, _this.buttonHandleKeyDown),\n onKeyUp: callAllEventHandlers(onKeyUp, _this.buttonHandleKeyUp),\n onBlur: callAllEventHandlers(onBlur, _this.buttonHandleBlur)\n };\n var eventHandlers = rest.disabled ? {} : enabledEventHandlers;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: \"button\",\n role: \"button\",\n \"aria-label\": isOpen ? \"close menu\" : \"open menu\",\n \"aria-haspopup\": true,\n \"data-toggle\": true\n }, eventHandlers, rest);\n };\n _this.buttonHandleKeyUp = function(event) {\n // Prevent click event from emitting in Firefox\n event.preventDefault();\n };\n _this.buttonHandleKeyDown = function(event) {\n var key = normalizeArrowKey(event);\n if (_this.buttonKeyDownHandlers[key]) {\n _this.buttonKeyDownHandlers[key].call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this), event);\n }\n };\n _this.buttonHandleClick = function(event) {\n event.preventDefault();\n // handle odd case for Safari and Firefox which\n // don't give the button the focus properly.\n /* istanbul ignore if (can't reasonably test this) */ if (_this.props.environment.document.activeElement === _this.props.environment.document.body) {\n event.target.focus();\n }\n // to simplify testing components that use downshift, we'll not wrap this in a setTimeout\n // if the NODE_ENV is test. With the proper build system, this should be dead code eliminated\n // when building for production and should therefore have no impact on production code.\n if (false) {} else {\n // Ensure that toggle of menu occurs after the potential blur event in iOS\n _this.internalSetTimeout(function() {\n return _this.toggleMenu({\n type: clickButton\n });\n });\n }\n };\n _this.buttonHandleBlur = function(event) {\n var blurTarget = event.target; // Save blur target for comparison with activeElement later\n // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not body element\n _this.internalSetTimeout(function() {\n if (!_this.isMouseDown && (_this.props.environment.document.activeElement == null || _this.props.environment.document.activeElement.id !== _this.inputId) && _this.props.environment.document.activeElement !== blurTarget // Do nothing if we refocus the same element again (to solve issue in Safari on iOS)\n ) {\n _this.reset({\n type: blurButton\n });\n }\n });\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BUTTON\n /////////////////////////////// LABEL\n _this.getLabelProps = function(props) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n htmlFor: _this.inputId,\n id: _this.labelId\n }, props);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LABEL\n /////////////////////////////// INPUT\n _this.getInputProps = function(_temp4) {\n var _ref4 = _temp4 === void 0 ? {} : _temp4, onKeyDown = _ref4.onKeyDown, onBlur = _ref4.onBlur, onChange = _ref4.onChange, onInput = _ref4.onInput;\n _ref4.onChangeText;\n var rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref4, _excluded3$2);\n var onChangeKey;\n var eventHandlers = {};\n /* istanbul ignore next (preact) */ {\n onChangeKey = \"onChange\";\n }\n var _this$getState6 = _this.getState(), inputValue = _this$getState6.inputValue, isOpen = _this$getState6.isOpen, highlightedIndex = _this$getState6.highlightedIndex;\n if (!rest.disabled) {\n var _eventHandlers;\n eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, _this.inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, _this.inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, _this.inputHandleBlur), _eventHandlers);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"aria-autocomplete\": \"list\",\n \"aria-activedescendant\": isOpen && typeof highlightedIndex === \"number\" && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,\n \"aria-controls\": isOpen ? _this.menuId : undefined,\n \"aria-labelledby\": rest && rest[\"aria-label\"] ? undefined : _this.labelId,\n // https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion\n // revert back since autocomplete=\"nope\" is ignored on latest Chrome and Opera\n autoComplete: \"off\",\n value: inputValue,\n id: _this.inputId\n }, eventHandlers, rest);\n };\n _this.inputHandleKeyDown = function(event) {\n var key = normalizeArrowKey(event);\n if (key && _this.inputKeyDownHandlers[key]) {\n _this.inputKeyDownHandlers[key].call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this), event);\n }\n };\n _this.inputHandleChange = function(event) {\n _this.internalSetState({\n type: changeInput,\n isOpen: true,\n inputValue: event.target.value,\n highlightedIndex: _this.props.defaultHighlightedIndex\n });\n };\n _this.inputHandleBlur = function() {\n // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not the body element\n _this.internalSetTimeout(function() {\n var downshiftButtonIsActive = _this.props.environment.document && !!_this.props.environment.document.activeElement && !!_this.props.environment.document.activeElement.dataset && _this.props.environment.document.activeElement.dataset.toggle && _this._rootNode && _this._rootNode.contains(_this.props.environment.document.activeElement);\n if (!_this.isMouseDown && !downshiftButtonIsActive) {\n _this.reset({\n type: blurInput\n });\n }\n });\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ INPUT\n /////////////////////////////// MENU\n _this.menuRef = function(node) {\n _this._menuNode = node;\n };\n _this.getMenuProps = function(_temp5, _temp6) {\n var _extends3;\n var _ref5 = _temp5 === void 0 ? {} : _temp5, _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, ref = _ref5.ref, props = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded4$1);\n var _ref6 = _temp6 === void 0 ? {} : _temp6, _ref6$suppressRefErro = _ref6.suppressRefError, suppressRefError = _ref6$suppressRefErro === void 0 ? false : _ref6$suppressRefErro;\n _this.getMenuProps.called = true;\n _this.getMenuProps.refKey = refKey;\n _this.getMenuProps.suppressRefError = suppressRefError;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = \"listbox\", _extends3[\"aria-labelledby\"] = props && props[\"aria-label\"] ? undefined : _this.labelId, _extends3.id = _this.menuId, _extends3), props);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU\n /////////////////////////////// ITEM\n _this.getItemProps = function(_temp7) {\n var _enabledEventHandlers;\n var _ref7 = _temp7 === void 0 ? {} : _temp7, onMouseMove = _ref7.onMouseMove, onMouseDown = _ref7.onMouseDown, onClick = _ref7.onClick;\n _ref7.onPress;\n var index = _ref7.index, _ref7$item = _ref7.item, item = _ref7$item === void 0 ? false ? /* istanbul ignore next */ 0 : requiredProp(\"getItemProps\", \"item\") : _ref7$item, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref7, _excluded5);\n if (index === undefined) {\n _this.items.push(item);\n index = _this.items.indexOf(item);\n } else {\n _this.items[index] = item;\n }\n var onSelectKey = \"onClick\";\n var customClickHandler = onClick;\n var enabledEventHandlers = (_enabledEventHandlers = {\n // onMouseMove is used over onMouseEnter here. onMouseMove\n // is only triggered on actual mouse movement while onMouseEnter\n // can fire on DOM changes, interrupting keyboard navigation\n onMouseMove: callAllEventHandlers(onMouseMove, function() {\n if (index === _this.getState().highlightedIndex) {\n return;\n }\n _this.setHighlightedIndex(index, {\n type: itemMouseEnter\n });\n // We never want to manually scroll when changing state based\n // on `onMouseMove` because we will be moving the element out\n // from under the user which is currently scrolling/moving the\n // cursor\n _this.avoidScrolling = true;\n _this.internalSetTimeout(function() {\n return _this.avoidScrolling = false;\n }, 250);\n }),\n onMouseDown: callAllEventHandlers(onMouseDown, function(event) {\n // This prevents the activeElement from being changed\n // to the item so it can remain with the current activeElement\n // which is a more common use case.\n event.preventDefault();\n })\n }, _enabledEventHandlers[onSelectKey] = callAllEventHandlers(customClickHandler, function() {\n _this.selectItemAtIndex(index, {\n type: clickItem\n });\n }), _enabledEventHandlers);\n // Passing down the onMouseDown handler to prevent redirect\n // of the activeElement if clicking on disabled items\n var eventHandlers = rest.disabled ? {\n onMouseDown: enabledEventHandlers.onMouseDown\n } : enabledEventHandlers;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: _this.getItemId(index),\n role: \"option\",\n \"aria-selected\": _this.getState().highlightedIndex === index\n }, eventHandlers, rest);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ITEM\n _this.clearItems = function() {\n _this.items = [];\n };\n _this.reset = function(otherStateToSet, cb) {\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState(function(_ref8) {\n var selectedItem = _ref8.selectedItem;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: _this.props.defaultIsOpen,\n highlightedIndex: _this.props.defaultHighlightedIndex,\n inputValue: _this.props.itemToString(selectedItem)\n }, otherStateToSet);\n }, cb);\n };\n _this.toggleMenu = function(otherStateToSet, cb) {\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState(function(_ref9) {\n var isOpen = _ref9.isOpen;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: !isOpen\n }, isOpen && {\n highlightedIndex: _this.props.defaultHighlightedIndex\n }, otherStateToSet);\n }, function() {\n var _this$getState7 = _this.getState(), isOpen = _this$getState7.isOpen, highlightedIndex = _this$getState7.highlightedIndex;\n if (isOpen) {\n if (_this.getItemCount() > 0 && typeof highlightedIndex === \"number\") {\n _this.setHighlightedIndex(highlightedIndex, otherStateToSet);\n }\n }\n cbToCb(cb)();\n });\n };\n _this.openMenu = function(cb) {\n _this.internalSetState({\n isOpen: true\n }, cb);\n };\n _this.closeMenu = function(cb) {\n _this.internalSetState({\n isOpen: false\n }, cb);\n };\n _this.updateStatus = debounce(function() {\n var state = _this.getState();\n var item = _this.items[state.highlightedIndex];\n var resultCount = _this.getItemCount();\n var status = _this.props.getA11yStatusMessage((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n itemToString: _this.props.itemToString,\n previousResultCount: _this.previousResultCount,\n resultCount: resultCount,\n highlightedItem: item\n }, state));\n _this.previousResultCount = resultCount;\n setStatus(status, _this.props.environment.document);\n }, 200);\n var _this$props = _this.props, defaultHighlightedIndex = _this$props.defaultHighlightedIndex, _this$props$initialHi = _this$props.initialHighlightedIndex, _highlightedIndex = _this$props$initialHi === void 0 ? defaultHighlightedIndex : _this$props$initialHi, defaultIsOpen = _this$props.defaultIsOpen, _this$props$initialIs = _this$props.initialIsOpen, _isOpen = _this$props$initialIs === void 0 ? defaultIsOpen : _this$props$initialIs, _this$props$initialIn = _this$props.initialInputValue, _inputValue = _this$props$initialIn === void 0 ? \"\" : _this$props$initialIn, _this$props$initialSe = _this$props.initialSelectedItem, _selectedItem = _this$props$initialSe === void 0 ? null : _this$props$initialSe;\n var _state = _this.getState({\n highlightedIndex: _highlightedIndex,\n isOpen: _isOpen,\n inputValue: _inputValue,\n selectedItem: _selectedItem\n });\n if (_state.selectedItem != null && _this.props.initialInputValue === undefined) {\n _state.inputValue = _this.props.itemToString(_state.selectedItem);\n }\n _this.state = _state;\n return _this;\n };\n (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Downshift, _Component);\n var _proto = Downshift.prototype;\n /**\n * Clear all running timeouts\n */ _proto.internalClearTimeouts = function internalClearTimeouts() {\n this.timeoutIds.forEach(function(id) {\n clearTimeout(id);\n });\n this.timeoutIds = [];\n } /**\n * Gets the state based on internal state or props\n * If a state value is passed via props, then that\n * is the value given, otherwise it's retrieved from\n * stateToMerge\n *\n * @param {Object} stateToMerge defaults to this.state\n * @return {Object} the state\n */ ;\n _proto.getState = function getState$1(stateToMerge) {\n if (stateToMerge === void 0) {\n stateToMerge = this.state;\n }\n return getState(stateToMerge, this.props);\n };\n _proto.getItemCount = function getItemCount() {\n // things read better this way. They're in priority order:\n // 1. `this.itemCount`\n // 2. `this.props.itemCount`\n // 3. `this.items.length`\n var itemCount = this.items.length;\n if (this.itemCount != null) {\n itemCount = this.itemCount;\n } else if (this.props.itemCount !== undefined) {\n itemCount = this.props.itemCount;\n }\n return itemCount;\n };\n _proto.getItemNodeFromIndex = function getItemNodeFromIndex(index) {\n return this.props.environment.document.getElementById(this.getItemId(index));\n };\n _proto.scrollHighlightedItemIntoView = function scrollHighlightedItemIntoView() {\n /* istanbul ignore else (react-native) */ {\n var node = this.getItemNodeFromIndex(this.getState().highlightedIndex);\n this.props.scrollIntoView(node, this._menuNode);\n }\n };\n _proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {\n var itemCount = this.getItemCount();\n var _this$getState8 = this.getState(), highlightedIndex = _this$getState8.highlightedIndex;\n if (itemCount > 0) {\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {\n length: itemCount\n }, this.isItemDisabled, true);\n this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);\n }\n };\n _proto.getStateAndHelpers = function getStateAndHelpers() {\n var _this$getState9 = this.getState(), highlightedIndex = _this$getState9.highlightedIndex, inputValue = _this$getState9.inputValue, selectedItem = _this$getState9.selectedItem, isOpen = _this$getState9.isOpen;\n var _$itemToString = this.props.itemToString;\n var id = this.id;\n var getRootProps = this.getRootProps, getToggleButtonProps = this.getToggleButtonProps, getLabelProps = this.getLabelProps, getMenuProps = this.getMenuProps, getInputProps = this.getInputProps, getItemProps = this.getItemProps, openMenu = this.openMenu, closeMenu = this.closeMenu, toggleMenu = this.toggleMenu, selectItem = this.selectItem, selectItemAtIndex = this.selectItemAtIndex, selectHighlightedItem = this.selectHighlightedItem, setHighlightedIndex = this.setHighlightedIndex, clearSelection = this.clearSelection, clearItems = this.clearItems, reset = this.reset, setItemCount = this.setItemCount, unsetItemCount = this.unsetItemCount, setState = this.internalSetState;\n return {\n // prop getters\n getRootProps: getRootProps,\n getToggleButtonProps: getToggleButtonProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getInputProps: getInputProps,\n getItemProps: getItemProps,\n // actions\n reset: reset,\n openMenu: openMenu,\n closeMenu: closeMenu,\n toggleMenu: toggleMenu,\n selectItem: selectItem,\n selectItemAtIndex: selectItemAtIndex,\n selectHighlightedItem: selectHighlightedItem,\n setHighlightedIndex: setHighlightedIndex,\n clearSelection: clearSelection,\n clearItems: clearItems,\n setItemCount: setItemCount,\n unsetItemCount: unsetItemCount,\n setState: setState,\n // props\n itemToString: _$itemToString,\n // derived\n id: id,\n // state\n highlightedIndex: highlightedIndex,\n inputValue: inputValue,\n isOpen: isOpen,\n selectedItem: selectedItem\n };\n };\n _proto.componentDidMount = function componentDidMount() {\n var _this4 = this;\n /* istanbul ignore if (react-native) */ if ( true && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n }\n /* istanbul ignore if (react-native) */ {\n // this.isMouseDown helps us track whether the mouse is currently held down.\n // This is useful when the user clicks on an item in the list, but holds the mouse\n // down long enough for the list to disappear (because the blur event fires on the input)\n // this.isMouseDown is used in the blur handler on the input to determine whether the blur event should\n // trigger hiding the menu.\n var onMouseDown = function onMouseDown() {\n _this4.isMouseDown = true;\n };\n var onMouseUp = function onMouseUp(event) {\n _this4.isMouseDown = false;\n // if the target element or the activeElement is within a downshift node\n // then we don't want to reset downshift\n var contextWithinDownshift = targetWithinDownshift(event.target, [\n _this4._rootNode,\n _this4._menuNode\n ], _this4.props.environment);\n if (!contextWithinDownshift && _this4.getState().isOpen) {\n _this4.reset({\n type: mouseUp\n }, function() {\n return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n });\n }\n };\n // Touching an element in iOS gives focus and hover states, but touching out of\n // the element will remove hover, and persist the focus state, resulting in the\n // blur event not being triggered.\n // this.isTouchMove helps us track whether the user is tapping or swiping on a touch screen.\n // If the user taps outside of Downshift, the component should be reset,\n // but not if the user is swiping\n var onTouchStart = function onTouchStart() {\n _this4.isTouchMove = false;\n };\n var onTouchMove = function onTouchMove() {\n _this4.isTouchMove = true;\n };\n var onTouchEnd = function onTouchEnd(event) {\n var contextWithinDownshift = targetWithinDownshift(event.target, [\n _this4._rootNode,\n _this4._menuNode\n ], _this4.props.environment, false);\n if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {\n _this4.reset({\n type: touchEnd\n }, function() {\n return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n });\n }\n };\n var environment = this.props.environment;\n environment.addEventListener(\"mousedown\", onMouseDown);\n environment.addEventListener(\"mouseup\", onMouseUp);\n environment.addEventListener(\"touchstart\", onTouchStart);\n environment.addEventListener(\"touchmove\", onTouchMove);\n environment.addEventListener(\"touchend\", onTouchEnd);\n this.cleanup = function() {\n _this4.internalClearTimeouts();\n _this4.updateStatus.cancel();\n environment.removeEventListener(\"mousedown\", onMouseDown);\n environment.removeEventListener(\"mouseup\", onMouseUp);\n environment.removeEventListener(\"touchstart\", onTouchStart);\n environment.removeEventListener(\"touchmove\", onTouchMove);\n environment.removeEventListener(\"touchend\", onTouchEnd);\n };\n }\n };\n _proto.shouldScroll = function shouldScroll(prevState, prevProps) {\n var _ref10 = this.props.highlightedIndex === undefined ? this.getState() : this.props, currentHighlightedIndex = _ref10.highlightedIndex;\n var _ref11 = prevProps.highlightedIndex === undefined ? prevState : prevProps, prevHighlightedIndex = _ref11.highlightedIndex;\n var scrollWhenOpen = currentHighlightedIndex && this.getState().isOpen && !prevState.isOpen;\n var scrollWhenNavigating = currentHighlightedIndex !== prevHighlightedIndex;\n return scrollWhenOpen || scrollWhenNavigating;\n };\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (true) {\n validateControlledUnchanged(this.state, prevProps, this.props);\n /* istanbul ignore if (react-native) */ if (this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n }\n }\n if (isControlledProp(this.props, \"selectedItem\") && this.props.selectedItemChanged(prevProps.selectedItem, this.props.selectedItem)) {\n this.internalSetState({\n type: controlledPropUpdatedSelectedItem,\n inputValue: this.props.itemToString(this.props.selectedItem)\n });\n }\n if (!this.avoidScrolling && this.shouldScroll(prevState, prevProps)) {\n this.scrollHighlightedItemIntoView();\n }\n /* istanbul ignore else (react-native) */ {\n this.updateStatus();\n }\n };\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cleanup(); // avoids memory leak\n };\n _proto.render = function render() {\n var children = unwrapArray(this.props.children, noop);\n // because the items are rerendered every time we call the children\n // we clear this out each render and it will be populated again as\n // getItemProps is called.\n this.clearItems();\n // we reset this so we know whether the user calls getRootProps during\n // this render. If they do then we don't need to do anything,\n // if they don't then we need to clone the element they return and\n // apply the props for them.\n this.getRootProps.called = false;\n this.getRootProps.refKey = undefined;\n this.getRootProps.suppressRefError = undefined;\n // we do something similar for getMenuProps\n this.getMenuProps.called = false;\n this.getMenuProps.refKey = undefined;\n this.getMenuProps.suppressRefError = undefined;\n // we do something similar for getLabelProps\n this.getLabelProps.called = false;\n // and something similar for getInputProps\n this.getInputProps.called = false;\n var element = unwrapArray(children(this.getStateAndHelpers()));\n if (!element) {\n return null;\n }\n if (this.getRootProps.called || this.props.suppressRefError) {\n if ( true && !this.getRootProps.suppressRefError && !this.props.suppressRefError) {\n validateGetRootPropsCalledCorrectly(element, this.getRootProps);\n }\n return element;\n } else if (isDOMElement(element)) {\n // they didn't apply the root props, but we can clone\n // this and apply the props ourselves\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_4__.cloneElement)(element, this.getRootProps(getElementProps(element)));\n }\n /* istanbul ignore else */ if (true) {\n // they didn't apply the root props, but they need to\n // otherwise we can't query around the autocomplete\n throw new Error(\"downshift: If you return a non-DOM element, you must apply the getRootProps function\");\n }\n /* istanbul ignore next */ return undefined;\n };\n return Downshift;\n }(react__WEBPACK_IMPORTED_MODULE_4__.Component);\n Downshift.defaultProps = {\n defaultHighlightedIndex: null,\n defaultIsOpen: false,\n getA11yStatusMessage: getA11yStatusMessage$1,\n itemToString: function itemToString(i) {\n if (i == null) {\n return \"\";\n }\n if ( true && isPlainObject(i) && !i.hasOwnProperty(\"toString\")) {\n // eslint-disable-next-line no-console\n console.warn(\"downshift: An object was passed to the default implementation of `itemToString`. You should probably provide your own `itemToString` implementation. Please refer to the `itemToString` API documentation.\", \"The object that was passed:\", i);\n }\n return String(i);\n },\n onStateChange: noop,\n onInputValueChange: noop,\n onUserAction: noop,\n onChange: noop,\n onSelect: noop,\n onOuterClick: noop,\n selectedItemChanged: function selectedItemChanged(prevItem, item) {\n return prevItem !== item;\n },\n environment: /* istanbul ignore next (ssr) */ typeof window === \"undefined\" ? {} : window,\n stateReducer: function stateReducer(state, stateToSet) {\n return stateToSet;\n },\n suppressRefError: false,\n scrollIntoView: scrollIntoView\n };\n Downshift.stateChangeTypes = stateChangeTypes$3;\n return Downshift;\n}();\n true ? Downshift.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n defaultHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n initialHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n initialInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n initialIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n getA11yStatusMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n itemToString: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onSelect: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onStateChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onInputValueChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onUserAction: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onOuterClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n selectedItemChanged: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n stateReducer: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n itemCount: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n id: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n environment: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n addEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n removeEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n document: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n createElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n getElementById: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n activeElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired,\n body: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired\n }).isRequired,\n Node: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n }),\n suppressRefError: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n // things we keep in state for uncontrolled components\n // but can accept as props for controlled components\n /* eslint-disable react/no-unused-prop-types */ selectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n isOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n inputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n highlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n labelId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n inputId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n menuId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n getItemId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n} : 0;\nvar Downshift$1 = Downshift;\nfunction validateGetMenuPropsCalledCorrectly(node, _ref12) {\n var refKey = _ref12.refKey;\n if (!node) {\n // eslint-disable-next-line no-console\n console.error('downshift: The ref prop \"' + refKey + '\" from getMenuProps was not applied correctly on your menu element.');\n }\n}\nfunction validateGetRootPropsCalledCorrectly(element, _ref13) {\n var refKey = _ref13.refKey;\n var refKeySpecified = refKey !== \"ref\";\n var isComposite = !isDOMElement(element);\n if (isComposite && !refKeySpecified && !(0,react_is__WEBPACK_IMPORTED_MODULE_5__.isForwardRef)(element)) {\n // eslint-disable-next-line no-console\n console.error(\"downshift: You returned a non-DOM element. You must specify a refKey in getRootProps\");\n } else if (!isComposite && refKeySpecified) {\n // eslint-disable-next-line no-console\n console.error('downshift: You returned a DOM element. You should not specify a refKey in getRootProps. You specified \"' + refKey + '\"');\n }\n if (!(0,react_is__WEBPACK_IMPORTED_MODULE_5__.isForwardRef)(element) && !getElementProps(element)[refKey]) {\n // eslint-disable-next-line no-console\n console.error('downshift: You must apply the ref prop \"' + refKey + '\" from getRootProps onto your root element.');\n }\n}\nvar _excluded$3 = [\n \"isInitialMount\",\n \"highlightedIndex\",\n \"items\",\n \"environment\"\n];\nvar dropdownDefaultStateValues = {\n highlightedIndex: -1,\n isOpen: false,\n selectedItem: null,\n inputValue: \"\"\n};\nfunction callOnChangeProps(action, state, newState) {\n var props = action.props, type = action.type;\n var changes = {};\n Object.keys(state).forEach(function(key) {\n invokeOnChangeHandler(key, action, state, newState);\n if (newState[key] !== state[key]) {\n changes[key] = newState[key];\n }\n });\n if (props.onStateChange && Object.keys(changes).length) {\n props.onStateChange((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: type\n }, changes));\n }\n}\nfunction invokeOnChangeHandler(key, action, state, newState) {\n var props = action.props, type = action.type;\n var handler = \"on\" + capitalizeString(key) + \"Change\";\n if (props[handler] && newState[key] !== undefined && newState[key] !== state[key]) {\n props[handler]((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: type\n }, newState));\n }\n}\n/**\n * Default state reducer that returns the changes.\n *\n * @param {Object} s state.\n * @param {Object} a action with changes.\n * @returns {Object} changes.\n */ function stateReducer(s, a) {\n return a.changes;\n}\n/**\n * Returns a message to be added to aria-live region when item is selected.\n *\n * @param {Object} selectionParameters Parameters required to build the message.\n * @returns {string} The a11y message.\n */ function getA11ySelectionMessage(selectionParameters) {\n var selectedItem = selectionParameters.selectedItem, itemToStringLocal = selectionParameters.itemToString;\n return selectedItem ? itemToStringLocal(selectedItem) + \" has been selected.\" : \"\";\n}\n/**\n * Debounced call for updating the a11y message.\n */ var updateA11yStatus = debounce(function(getA11yMessage, document1) {\n setStatus(getA11yMessage(), document1);\n}, 200);\n// istanbul ignore next\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\" ? react__WEBPACK_IMPORTED_MODULE_4__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_4__.useEffect;\n// istanbul ignore next\nvar useElementIds = \"useId\" in (react__WEBPACK_IMPORTED_MODULE_4___default()) // Avoid conditional useId call\n ? function useElementIds(_ref) {\n var id = _ref.id, labelId = _ref.labelId, menuId = _ref.menuId, getItemId = _ref.getItemId, toggleButtonId = _ref.toggleButtonId, inputId = _ref.inputId;\n // Avoid conditional useId call\n var reactId = \"downshift-\" + react__WEBPACK_IMPORTED_MODULE_4___default().useId();\n if (!id) {\n id = reactId;\n }\n var elementIdsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n labelId: labelId || id + \"-label\",\n menuId: menuId || id + \"-menu\",\n getItemId: getItemId || function(index) {\n return id + \"-item-\" + index;\n },\n toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n inputId: inputId || id + \"-input\"\n });\n return elementIdsRef.current;\n} : function useElementIds(_ref2) {\n var _ref2$id = _ref2.id, id = _ref2$id === void 0 ? \"downshift-\" + generateId() : _ref2$id, labelId = _ref2.labelId, menuId = _ref2.menuId, getItemId = _ref2.getItemId, toggleButtonId = _ref2.toggleButtonId, inputId = _ref2.inputId;\n var elementIdsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n labelId: labelId || id + \"-label\",\n menuId: menuId || id + \"-menu\",\n getItemId: getItemId || function(index) {\n return id + \"-item-\" + index;\n },\n toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n inputId: inputId || id + \"-input\"\n });\n return elementIdsRef.current;\n};\nfunction getItemAndIndex(itemProp, indexProp, items, errorMessage) {\n var item, index;\n if (itemProp === undefined) {\n if (indexProp === undefined) {\n throw new Error(errorMessage);\n }\n item = items[indexProp];\n index = indexProp;\n } else {\n index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;\n item = itemProp;\n }\n return [\n item,\n index\n ];\n}\nfunction itemToString(item) {\n return item ? String(item) : \"\";\n}\nfunction isAcceptedCharacterKey(key) {\n return /^\\S{1}$/.test(key);\n}\nfunction capitalizeString(string) {\n return \"\" + string.slice(0, 1).toUpperCase() + string.slice(1);\n}\nfunction useLatestRef(val) {\n var ref = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(val);\n // technically this is not \"concurrent mode safe\" because we're manipulating\n // the value during render (so it's not idempotent). However, the places this\n // hook is used is to support memoizing callbacks which will be called\n // *during* render, so we need the latest values *during* render.\n // If not for this, then we'd probably want to use useLayoutEffect instead.\n ref.current = val;\n return ref;\n}\n/**\n * Computes the controlled state using a the previous state, props,\n * two reducers, one from downshift and an optional one from the user.\n * Also calls the onChange handlers for state values that have changed.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useEnhancedReducer(reducer, initialState, props) {\n var prevStateRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var actionRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var enhancedReducer = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(state, action) {\n actionRef.current = action;\n state = getState(state, action.props);\n var changes = reducer(state, action);\n var newState = action.props.stateReducer(state, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, action, {\n changes: changes\n }));\n return newState;\n }, [\n reducer\n ]);\n var _useReducer = (0,react__WEBPACK_IMPORTED_MODULE_4__.useReducer)(enhancedReducer, initialState), state = _useReducer[0], dispatch = _useReducer[1];\n var propsRef = useLatestRef(props);\n var dispatchWithProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(action) {\n return dispatch((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n props: propsRef.current\n }, action));\n }, [\n propsRef\n ]);\n var action = actionRef.current;\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (action && prevStateRef.current && prevStateRef.current !== state) {\n callOnChangeProps(action, getState(prevStateRef.current, action.props), state);\n }\n prevStateRef.current = state;\n }, [\n state,\n props,\n action\n ]);\n return [\n state,\n dispatchWithProps\n ];\n}\n/**\n * Wraps the useEnhancedReducer and applies the controlled prop values before\n * returning the new state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useControlledReducer$1(reducer, initialState, props) {\n var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];\n return [\n getState(state, props),\n dispatch\n ];\n}\nvar defaultProps$3 = {\n itemToString: itemToString,\n stateReducer: stateReducer,\n getA11ySelectionMessage: getA11ySelectionMessage,\n scrollIntoView: scrollIntoView,\n environment: /* istanbul ignore next (ssr) */ typeof window === \"undefined\" ? {} : window\n};\nfunction getDefaultValue$1(props, propKey, defaultStateValues) {\n if (defaultStateValues === void 0) {\n defaultStateValues = dropdownDefaultStateValues;\n }\n var defaultValue = props[\"default\" + capitalizeString(propKey)];\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n return defaultStateValues[propKey];\n}\nfunction getInitialValue$1(props, propKey, defaultStateValues) {\n if (defaultStateValues === void 0) {\n defaultStateValues = dropdownDefaultStateValues;\n }\n var value = props[propKey];\n if (value !== undefined) {\n return value;\n }\n var initialValue = props[\"initial\" + capitalizeString(propKey)];\n if (initialValue !== undefined) {\n return initialValue;\n }\n return getDefaultValue$1(props, propKey, defaultStateValues);\n}\nfunction getInitialState$2(props) {\n var selectedItem = getInitialValue$1(props, \"selectedItem\");\n var isOpen = getInitialValue$1(props, \"isOpen\");\n var highlightedIndex = getInitialValue$1(props, \"highlightedIndex\");\n var inputValue = getInitialValue$1(props, \"inputValue\");\n return {\n highlightedIndex: highlightedIndex < 0 && selectedItem && isOpen ? props.items.indexOf(selectedItem) : highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nfunction getHighlightedIndexOnOpen(props, state, offset) {\n var items = props.items, initialHighlightedIndex = props.initialHighlightedIndex, defaultHighlightedIndex = props.defaultHighlightedIndex;\n var selectedItem = state.selectedItem, highlightedIndex = state.highlightedIndex;\n if (items.length === 0) {\n return -1;\n }\n // initialHighlightedIndex will give value to highlightedIndex on initial state only.\n if (initialHighlightedIndex !== undefined && highlightedIndex === initialHighlightedIndex) {\n return initialHighlightedIndex;\n }\n if (defaultHighlightedIndex !== undefined) {\n return defaultHighlightedIndex;\n }\n if (selectedItem) {\n return items.indexOf(selectedItem);\n }\n if (offset === 0) {\n return -1;\n }\n return offset < 0 ? items.length - 1 : 0;\n}\n/**\n * Reuse the movement tracking of mouse and touch events.\n *\n * @param {boolean} isOpen Whether the dropdown is open or not.\n * @param {Array<Object>} downshiftElementRefs Downshift element refs to track movement (toggleButton, menu etc.)\n * @param {Object} environment Environment where component/hook exists.\n * @param {Function} handleBlur Handler on blur from mouse or touch.\n * @returns {Object} Ref containing whether mouseDown or touchMove event is happening\n */ function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {\n var mouseAndTouchTrackersRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n isMouseDown: false,\n isTouchMove: false\n });\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if ((environment == null ? void 0 : environment.addEventListener) == null) {\n return;\n }\n // The same strategy for checking if a click occurred inside or outside downshift\n // as in downshift.js.\n var onMouseDown = function onMouseDown() {\n mouseAndTouchTrackersRef.current.isMouseDown = true;\n };\n var onMouseUp = function onMouseUp(event) {\n mouseAndTouchTrackersRef.current.isMouseDown = false;\n if (isOpen && !targetWithinDownshift(event.target, downshiftElementRefs.map(function(ref) {\n return ref.current;\n }), environment)) {\n handleBlur();\n }\n };\n var onTouchStart = function onTouchStart() {\n mouseAndTouchTrackersRef.current.isTouchMove = false;\n };\n var onTouchMove = function onTouchMove() {\n mouseAndTouchTrackersRef.current.isTouchMove = true;\n };\n var onTouchEnd = function onTouchEnd(event) {\n if (isOpen && !mouseAndTouchTrackersRef.current.isTouchMove && !targetWithinDownshift(event.target, downshiftElementRefs.map(function(ref) {\n return ref.current;\n }), environment, false)) {\n handleBlur();\n }\n };\n environment.addEventListener(\"mousedown\", onMouseDown);\n environment.addEventListener(\"mouseup\", onMouseUp);\n environment.addEventListener(\"touchstart\", onTouchStart);\n environment.addEventListener(\"touchmove\", onTouchMove);\n environment.addEventListener(\"touchend\", onTouchEnd);\n // eslint-disable-next-line consistent-return\n return function cleanup() {\n environment.removeEventListener(\"mousedown\", onMouseDown);\n environment.removeEventListener(\"mouseup\", onMouseUp);\n environment.removeEventListener(\"touchstart\", onTouchStart);\n environment.removeEventListener(\"touchmove\", onTouchMove);\n environment.removeEventListener(\"touchend\", onTouchEnd);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isOpen,\n environment\n ]);\n return mouseAndTouchTrackersRef;\n}\n/* istanbul ignore next */ // eslint-disable-next-line import/no-mutable-exports\nvar useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n return noop;\n};\n/**\n * Custom hook that checks if getter props are called correctly.\n *\n * @param {...any} propKeys Getter prop names to be handled.\n * @returns {Function} Setter function called inside getter props to set call information.\n */ /* istanbul ignore next */ if (true) {\n useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n for(var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++){\n propKeys[_key] = arguments[_key];\n }\n var getterPropsCalledRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(propKeys.reduce(function(acc, propKey) {\n acc[propKey] = {};\n return acc;\n }, {}));\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n Object.keys(getterPropsCalledRef.current).forEach(function(propKey) {\n var propCallInfo = getterPropsCalledRef.current[propKey];\n if (isInitialMountRef.current) {\n if (!Object.keys(propCallInfo).length) {\n // eslint-disable-next-line no-console\n console.error(\"downshift: You forgot to call the \" + propKey + \" getter function on your component / element.\");\n return;\n }\n }\n var suppressRefError = propCallInfo.suppressRefError, refKey = propCallInfo.refKey, elementRef = propCallInfo.elementRef;\n if ((!elementRef || !elementRef.current) && !suppressRefError) {\n // eslint-disable-next-line no-console\n console.error('downshift: The ref prop \"' + refKey + '\" from ' + propKey + \" was not applied correctly on your element.\");\n }\n });\n isInitialMountRef.current = false;\n });\n var setGetterPropCallInfo = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(propKey, suppressRefError, refKey, elementRef) {\n getterPropsCalledRef.current[propKey] = {\n suppressRefError: suppressRefError,\n refKey: refKey,\n elementRef: elementRef\n };\n }, []);\n return setGetterPropCallInfo;\n };\n}\nfunction useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {\n var isInitialMount = _ref3.isInitialMount, highlightedIndex = _ref3.highlightedIndex, items = _ref3.items, environment = _ref3.environment, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded$3);\n // Sets a11y status message on changes in state.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMount || false) {\n return;\n }\n updateA11yStatus(function() {\n return getA11yMessage((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n highlightedIndex: highlightedIndex,\n highlightedItem: items[highlightedIndex],\n resultCount: items.length\n }, rest));\n }, environment.document);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencyArray);\n}\nfunction useScrollIntoView(_ref4) {\n var highlightedIndex = _ref4.highlightedIndex, isOpen = _ref4.isOpen, itemRefs = _ref4.itemRefs, getItemNodeFromIndex = _ref4.getItemNodeFromIndex, menuElement = _ref4.menuElement, scrollIntoViewProp = _ref4.scrollIntoView;\n // used not to scroll on highlight by mouse.\n var shouldScrollRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // Scroll on highlighted item if change comes from keyboard.\n useIsomorphicLayoutEffect(function() {\n if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {\n return;\n }\n if (shouldScrollRef.current === false) {\n shouldScrollRef.current = true;\n } else {\n scrollIntoViewProp(getItemNodeFromIndex(highlightedIndex), menuElement);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n highlightedIndex\n ]);\n return shouldScrollRef;\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar useControlPropsValidator = noop;\n/* istanbul ignore next */ if (true) {\n useControlPropsValidator = function useControlPropsValidator(_ref5) {\n var isInitialMount = _ref5.isInitialMount, props = _ref5.props, state = _ref5.state;\n // used for checking when props are moving from controlled to uncontrolled.\n var prevPropsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(props);\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMount) {\n return;\n }\n validateControlledUnchanged(state, prevPropsRef.current, props);\n prevPropsRef.current = props;\n }, [\n state,\n props,\n isInitialMount\n ]);\n };\n}\n/**\n * Handles selection on Enter / Alt + ArrowUp. Closes the menu and resets the highlighted index, unless there is a highlighted.\n * In that case, selects the item and resets to defaults for open state and highlighted idex.\n * @param {Object} props The useCombobox props.\n * @param {number} highlightedIndex The index from the state.\n * @param {boolean} inputValue Also return the input value for state.\n * @returns The changes for the state.\n */ function getChangesOnSelection(props, highlightedIndex, inputValue) {\n var _props$items;\n if (inputValue === void 0) {\n inputValue = true;\n }\n var shouldSelect = ((_props$items = props.items) == null ? void 0 : _props$items.length) && highlightedIndex >= 0;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, shouldSelect && (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n selectedItem: props.items[highlightedIndex],\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\")\n }, inputValue && {\n inputValue: props.itemToString(props.items[highlightedIndex])\n }));\n}\n// Shared between all exports.\nvar commonPropTypes = {\n environment: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n addEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n removeEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n document: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n createElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n getElementById: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n activeElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired,\n body: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired\n }).isRequired,\n Node: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n }),\n itemToString: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n stateReducer: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n// Shared between useSelect, useCombobox, Downshift.\nvar commonDropdownPropTypes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonPropTypes, {\n getA11yStatusMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n highlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n isOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n defaultIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n initialIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n selectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n initialSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n defaultSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n id: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n labelId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n menuId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n getItemId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n toggleButtonId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n onSelectedItemChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onHighlightedIndexChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onStateChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onIsOpenChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\nfunction downshiftCommonReducer(state, action, stateChangeTypes) {\n var type = action.type, props = action.props;\n var changes;\n switch(type){\n case stateChangeTypes.ItemMouseMove:\n changes = {\n highlightedIndex: action.disabled ? -1 : action.index\n };\n break;\n case stateChangeTypes.MenuMouseLeave:\n changes = {\n highlightedIndex: -1\n };\n break;\n case stateChangeTypes.ToggleButtonClick:\n case stateChangeTypes.FunctionToggleMenu:\n changes = {\n isOpen: !state.isOpen,\n highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case stateChangeTypes.FunctionOpenMenu:\n changes = {\n isOpen: true,\n highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case stateChangeTypes.FunctionCloseMenu:\n changes = {\n isOpen: false\n };\n break;\n case stateChangeTypes.FunctionSetHighlightedIndex:\n changes = {\n highlightedIndex: action.highlightedIndex\n };\n break;\n case stateChangeTypes.FunctionSetInputValue:\n changes = {\n inputValue: action.inputValue\n };\n break;\n case stateChangeTypes.FunctionReset:\n changes = {\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n selectedItem: getDefaultValue$1(props, \"selectedItem\"),\n inputValue: getDefaultValue$1(props, \"inputValue\")\n };\n break;\n default:\n throw new Error(\"Reducer called without proper action type.\");\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ function getItemIndexByCharacterKey(_a) {\n var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, _$itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;\n var lowerCasedKeysSoFar = keysSoFar.toLowerCase();\n for(var index = 0; index < items.length; index++){\n // if we already have a search query in progress, we also consider the current highlighted item.\n var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;\n var item = items[offsetIndex];\n if (item !== undefined && _$itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) && !isItemDisabled(item, offsetIndex)) {\n return offsetIndex;\n }\n }\n return highlightedIndex;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nvar propTypes$2 = (0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)({}, commonDropdownPropTypes), {\n items: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array).isRequired,\n isItemDisabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n getA11ySelectionMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\n/**\n * Default implementation for status message. Only added when menu is open.\n * Will specift if there are results in the list, and if so, how many,\n * and what keys are relevant.\n *\n * @param {Object} param the downshift state and other relevant properties\n * @return {String} the a11y status message\n */ function getA11yStatusMessage(_a) {\n var isOpen = _a.isOpen, resultCount = _a.resultCount, previousResultCount = _a.previousResultCount;\n if (!isOpen) {\n return \"\";\n }\n if (!resultCount) {\n return \"No results are available.\";\n }\n if (resultCount !== previousResultCount) {\n return \"\".concat(resultCount, \" result\").concat(resultCount === 1 ? \" is\" : \"s are\", \" available, use up and down arrow keys to navigate. Press Enter or Space Bar keys to select.\");\n }\n return \"\";\n}\nvar defaultProps$2 = (0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)({}, defaultProps$3), {\n getA11yStatusMessage: getA11yStatusMessage,\n isItemDisabled: function isItemDisabled() {\n return false;\n }\n});\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$2 = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes$2 = function validatePropTypes$2(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes$2, options, \"prop\", caller.name);\n };\n}\nvar ToggleButtonClick$1 = true ? \"__togglebutton_click__\" : 0;\nvar ToggleButtonKeyDownArrowDown = true ? \"__togglebutton_keydown_arrow_down__\" : 0;\nvar ToggleButtonKeyDownArrowUp = true ? \"__togglebutton_keydown_arrow_up__\" : 0;\nvar ToggleButtonKeyDownCharacter = true ? \"__togglebutton_keydown_character__\" : 0;\nvar ToggleButtonKeyDownEscape = true ? \"__togglebutton_keydown_escape__\" : 0;\nvar ToggleButtonKeyDownHome = true ? \"__togglebutton_keydown_home__\" : 0;\nvar ToggleButtonKeyDownEnd = true ? \"__togglebutton_keydown_end__\" : 0;\nvar ToggleButtonKeyDownEnter = true ? \"__togglebutton_keydown_enter__\" : 0;\nvar ToggleButtonKeyDownSpaceButton = true ? \"__togglebutton_keydown_space_button__\" : 0;\nvar ToggleButtonKeyDownPageUp = true ? \"__togglebutton_keydown_page_up__\" : 0;\nvar ToggleButtonKeyDownPageDown = true ? \"__togglebutton_keydown_page_down__\" : 0;\nvar ToggleButtonBlur = true ? \"__togglebutton_blur__\" : 0;\nvar MenuMouseLeave$1 = true ? \"__menu_mouse_leave__\" : 0;\nvar ItemMouseMove$1 = true ? \"__item_mouse_move__\" : 0;\nvar ItemClick$1 = true ? \"__item_click__\" : 0;\nvar FunctionToggleMenu$1 = true ? \"__function_toggle_menu__\" : 0;\nvar FunctionOpenMenu$1 = true ? \"__function_open_menu__\" : 0;\nvar FunctionCloseMenu$1 = true ? \"__function_close_menu__\" : 0;\nvar FunctionSetHighlightedIndex$1 = true ? \"__function_set_highlighted_index__\" : 0;\nvar FunctionSelectItem$1 = true ? \"__function_select_item__\" : 0;\nvar FunctionSetInputValue$1 = true ? \"__function_set_input_value__\" : 0;\nvar FunctionReset$2 = true ? \"__function_reset__\" : 0;\nvar stateChangeTypes$2 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n ToggleButtonClick: ToggleButtonClick$1,\n ToggleButtonKeyDownArrowDown: ToggleButtonKeyDownArrowDown,\n ToggleButtonKeyDownArrowUp: ToggleButtonKeyDownArrowUp,\n ToggleButtonKeyDownCharacter: ToggleButtonKeyDownCharacter,\n ToggleButtonKeyDownEscape: ToggleButtonKeyDownEscape,\n ToggleButtonKeyDownHome: ToggleButtonKeyDownHome,\n ToggleButtonKeyDownEnd: ToggleButtonKeyDownEnd,\n ToggleButtonKeyDownEnter: ToggleButtonKeyDownEnter,\n ToggleButtonKeyDownSpaceButton: ToggleButtonKeyDownSpaceButton,\n ToggleButtonKeyDownPageUp: ToggleButtonKeyDownPageUp,\n ToggleButtonKeyDownPageDown: ToggleButtonKeyDownPageDown,\n ToggleButtonBlur: ToggleButtonBlur,\n MenuMouseLeave: MenuMouseLeave$1,\n ItemMouseMove: ItemMouseMove$1,\n ItemClick: ItemClick$1,\n FunctionToggleMenu: FunctionToggleMenu$1,\n FunctionOpenMenu: FunctionOpenMenu$1,\n FunctionCloseMenu: FunctionCloseMenu$1,\n FunctionSetHighlightedIndex: FunctionSetHighlightedIndex$1,\n FunctionSelectItem: FunctionSelectItem$1,\n FunctionSetInputValue: FunctionSetInputValue$1,\n FunctionReset: FunctionReset$2\n});\n/* eslint-disable complexity */ function downshiftSelectReducer(state, action) {\n var _props$items;\n var type = action.type, props = action.props, altKey = action.altKey;\n var changes;\n switch(type){\n case ItemClick$1:\n changes = {\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n selectedItem: props.items[action.index]\n };\n break;\n case ToggleButtonKeyDownCharacter:\n {\n var lowercasedKey = action.key;\n var inputValue = \"\" + state.inputValue + lowercasedKey;\n var prevHighlightedIndex = !state.isOpen && state.selectedItem ? props.items.indexOf(state.selectedItem) : state.highlightedIndex;\n var highlightedIndex = getItemIndexByCharacterKey({\n keysSoFar: inputValue,\n highlightedIndex: prevHighlightedIndex,\n items: props.items,\n itemToString: props.itemToString,\n isItemDisabled: props.isItemDisabled\n });\n changes = {\n inputValue: inputValue,\n highlightedIndex: highlightedIndex,\n isOpen: true\n };\n }\n break;\n case ToggleButtonKeyDownArrowDown:\n {\n var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);\n changes = {\n highlightedIndex: _highlightedIndex,\n isOpen: true\n };\n }\n break;\n case ToggleButtonKeyDownArrowUp:\n if (state.isOpen && altKey) {\n changes = getChangesOnSelection(props, state.highlightedIndex, false);\n } else {\n var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);\n changes = {\n highlightedIndex: _highlightedIndex2,\n isOpen: true\n };\n }\n break;\n // only triggered when menu is open.\n case ToggleButtonKeyDownEnter:\n case ToggleButtonKeyDownSpaceButton:\n changes = getChangesOnSelection(props, state.highlightedIndex, false);\n break;\n case ToggleButtonKeyDownHome:\n changes = {\n highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),\n isOpen: true\n };\n break;\n case ToggleButtonKeyDownEnd:\n changes = {\n highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),\n isOpen: true\n };\n break;\n case ToggleButtonKeyDownPageUp:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)\n };\n break;\n case ToggleButtonKeyDownPageDown:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)\n };\n break;\n case ToggleButtonKeyDownEscape:\n changes = {\n isOpen: false,\n highlightedIndex: -1\n };\n break;\n case ToggleButtonBlur:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && {\n selectedItem: props.items[state.highlightedIndex]\n });\n break;\n case FunctionSelectItem$1:\n changes = {\n selectedItem: action.selectedItem\n };\n break;\n default:\n return downshiftCommonReducer(state, action, stateChangeTypes$2);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ var _excluded$2 = [\n \"onMouseLeave\",\n \"refKey\",\n \"onKeyDown\",\n \"onBlur\",\n \"ref\"\n], _excluded2$2 = [\n \"onBlur\",\n \"onClick\",\n \"onPress\",\n \"onKeyDown\",\n \"refKey\",\n \"ref\"\n], _excluded3$1 = [\n \"item\",\n \"index\",\n \"onMouseMove\",\n \"onClick\",\n \"onPress\",\n \"refKey\",\n \"disabled\",\n \"ref\"\n];\nuseSelect.stateChangeTypes = stateChangeTypes$2;\nfunction useSelect(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes$2(userProps, useSelect);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$2, userProps);\n var items = props.items, _$scrollIntoView = props.scrollIntoView, environment = props.environment, _$itemToString = props.itemToString, _$getA11ySelectionMessage = props.getA11ySelectionMessage, _$getA11yStatusMessage = props.getA11yStatusMessage;\n // Initial state depending on controlled props.\n var initialState = getInitialState$2(props);\n var _useControlledReducer = useControlledReducer$1(downshiftSelectReducer, initialState, props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var isOpen = state.isOpen, highlightedIndex = state.highlightedIndex, selectedItem = state.selectedItem, inputValue = state.inputValue;\n // Element efs.\n var toggleButtonRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var menuRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var itemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({});\n // used to keep the inputValue clearTimeout object between renders.\n var clearTimeoutRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n // prevent id re-generation between renders.\n var elementIds = useElementIds(props);\n // used to keep track of how many items we had on previous cycle.\n var previousResultCountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // utility callback to get item element.\n var latest = useLatestRef({\n state: state,\n props: props\n });\n // Some utils.\n var getItemNodeFromIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(index) {\n return itemRefs.current[elementIds.getItemId(index)];\n }, [\n elementIds\n ]);\n // Effects.\n // Sets a11y status message on changes in state.\n useA11yMessageSetter(_$getA11yStatusMessage, [\n isOpen,\n highlightedIndex,\n inputValue,\n items\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Sets a11y status message on changes in selectedItem.\n useA11yMessageSetter(_$getA11ySelectionMessage, [\n selectedItem\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Scroll on highlighted item if change comes from keyboard.\n var shouldScrollRef = useScrollIntoView({\n menuElement: menuRef.current,\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n itemRefs: itemRefs,\n scrollIntoView: _$scrollIntoView,\n getItemNodeFromIndex: getItemNodeFromIndex\n });\n // Sets cleanup for the keysSoFar callback, debounded after 500ms.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n // init the clean function here as we need access to dispatch.\n clearTimeoutRef.current = debounce(function(outerDispatch) {\n outerDispatch({\n type: FunctionSetInputValue$1,\n inputValue: \"\"\n });\n }, 500);\n // Cancel any pending debounced calls on mount\n return function() {\n clearTimeoutRef.current.cancel();\n };\n }, []);\n // Invokes the keysSoFar callback set up above.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!inputValue) {\n return;\n }\n clearTimeoutRef.current(dispatch);\n }, [\n dispatch,\n inputValue\n ]);\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n previousResultCountRef.current = items.length;\n });\n // Focus the toggle button on first render if required.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var focusOnOpen = getInitialValue$1(props, \"isOpen\");\n if (focusOnOpen && toggleButtonRef.current) {\n toggleButtonRef.current.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Add mouse/touch events to document.\n var mouseAndTouchTrackersRef = useMouseAndTouchTracker(isOpen, [\n menuRef,\n toggleButtonRef\n ], environment, function() {\n dispatch({\n type: ToggleButtonBlur\n });\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getMenuProps\", \"getToggleButtonProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Reset itemRefs on close.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!isOpen) {\n itemRefs.current = {};\n }\n }, [\n isOpen\n ]);\n // Event handler functions.\n var toggleButtonKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n return {\n ArrowDown: function ArrowDown(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownArrowDown,\n altKey: event.altKey\n });\n },\n ArrowUp: function ArrowUp(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownArrowUp,\n altKey: event.altKey\n });\n },\n Home: function Home(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownHome\n });\n },\n End: function End(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownEnd\n });\n },\n Escape: function Escape() {\n if (latest.current.state.isOpen) {\n dispatch({\n type: ToggleButtonKeyDownEscape\n });\n }\n },\n Enter: function Enter(event) {\n event.preventDefault();\n dispatch({\n type: latest.current.state.isOpen ? ToggleButtonKeyDownEnter : ToggleButtonClick$1\n });\n },\n PageUp: function PageUp(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownPageUp\n });\n }\n },\n PageDown: function PageDown(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownPageDown\n });\n }\n },\n \" \": function _(event) {\n event.preventDefault();\n var currentState = latest.current.state;\n if (!currentState.isOpen) {\n dispatch({\n type: ToggleButtonClick$1\n });\n return;\n }\n if (currentState.inputValue) {\n dispatch({\n type: ToggleButtonKeyDownCharacter,\n key: \" \"\n });\n } else {\n dispatch({\n type: ToggleButtonKeyDownSpaceButton\n });\n }\n }\n };\n }, [\n dispatch,\n latest\n ]);\n // Action functions.\n var toggleMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionToggleMenu$1\n });\n }, [\n dispatch\n ]);\n var closeMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionCloseMenu$1\n });\n }, [\n dispatch\n ]);\n var openMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionOpenMenu$1\n });\n }, [\n dispatch\n ]);\n var setHighlightedIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newHighlightedIndex) {\n dispatch({\n type: FunctionSetHighlightedIndex$1,\n highlightedIndex: newHighlightedIndex\n });\n }, [\n dispatch\n ]);\n var selectItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItem) {\n dispatch({\n type: FunctionSelectItem$1,\n selectedItem: newSelectedItem\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset$2\n });\n }, [\n dispatch\n ]);\n var setInputValue = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newInputValue) {\n dispatch({\n type: FunctionSetInputValue$1,\n inputValue: newInputValue\n });\n }, [\n dispatch\n ]);\n // Getter functions.\n var getLabelProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(labelProps) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: elementIds.labelId,\n htmlFor: elementIds.toggleButtonId\n }, labelProps);\n }, [\n elementIds\n ]);\n var getMenuProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, onMouseLeave = _ref.onMouseLeave, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey;\n _ref.onKeyDown;\n _ref.onBlur;\n var ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$2);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n var menuHandleMouseLeave = function menuHandleMouseLeave() {\n dispatch({\n type: MenuMouseLeave$1\n });\n };\n setGetterPropCallInfo(\"getMenuProps\", suppressRefError, refKey, menuRef);\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(menuNode) {\n menuRef.current = menuNode;\n }), _extends2.id = elementIds.menuId, _extends2.role = \"listbox\", _extends2[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);\n }, [\n dispatch,\n setGetterPropCallInfo,\n elementIds\n ]);\n var getToggleButtonProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp3, _temp4) {\n var _extends3;\n var _ref3 = _temp3 === void 0 ? {} : _temp3, onBlur = _ref3.onBlur, onClick = _ref3.onClick;\n _ref3.onPress;\n var onKeyDown = _ref3.onKeyDown, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$2);\n var _ref4 = _temp4 === void 0 ? {} : _temp4, _ref4$suppressRefErro = _ref4.suppressRefError, suppressRefError = _ref4$suppressRefErro === void 0 ? false : _ref4$suppressRefErro;\n var latestState = latest.current.state;\n var toggleButtonHandleClick = function toggleButtonHandleClick() {\n dispatch({\n type: ToggleButtonClick$1\n });\n };\n var toggleButtonHandleBlur = function toggleButtonHandleBlur() {\n if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {\n dispatch({\n type: ToggleButtonBlur\n });\n }\n };\n var toggleButtonHandleKeyDown = function toggleButtonHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && toggleButtonKeyDownHandlers[key]) {\n toggleButtonKeyDownHandlers[key](event);\n } else if (isAcceptedCharacterKey(key)) {\n dispatch({\n type: ToggleButtonKeyDownCharacter,\n key: key\n });\n }\n };\n var toggleProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(toggleButtonNode) {\n toggleButtonRef.current = toggleButtonNode;\n }), _extends3[\"aria-activedescendant\"] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : \"\", _extends3[\"aria-controls\"] = elementIds.menuId, _extends3[\"aria-expanded\"] = latest.current.state.isOpen, _extends3[\"aria-haspopup\"] = \"listbox\", _extends3[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends3.id = elementIds.toggleButtonId, _extends3.role = \"combobox\", _extends3.tabIndex = 0, _extends3.onBlur = callAllEventHandlers(onBlur, toggleButtonHandleBlur), _extends3), rest);\n if (!rest.disabled) {\n /* istanbul ignore if (react-native) */ {\n toggleProps.onClick = callAllEventHandlers(onClick, toggleButtonHandleClick);\n toggleProps.onKeyDown = callAllEventHandlers(onKeyDown, toggleButtonHandleKeyDown);\n }\n }\n setGetterPropCallInfo(\"getToggleButtonProps\", suppressRefError, refKey, toggleButtonRef);\n return toggleProps;\n }, [\n latest,\n elementIds,\n setGetterPropCallInfo,\n dispatch,\n mouseAndTouchTrackersRef,\n toggleButtonKeyDownHandlers\n ]);\n var getItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp5) {\n var _extends4;\n var _ref5 = _temp5 === void 0 ? {} : _temp5, itemProp = _ref5.item, indexProp = _ref5.index, onMouseMove = _ref5.onMouseMove, onClick = _ref5.onClick;\n _ref5.onPress;\n var _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, disabledProp = _ref5.disabled, ref = _ref5.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded3$1);\n if (disabledProp !== undefined) {\n console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');\n }\n var _latest$current = latest.current, latestState = _latest$current.state, latestProps = _latest$current.props;\n var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, \"Pass either item or index to getItemProps!\"), item = _getItemAndIndex[0], index = _getItemAndIndex[1];\n var disabled = latestProps.isItemDisabled(item, index);\n var itemHandleMouseMove = function itemHandleMouseMove() {\n if (index === latestState.highlightedIndex) {\n return;\n }\n shouldScrollRef.current = false;\n dispatch({\n type: ItemMouseMove$1,\n index: index,\n disabled: disabled\n });\n };\n var itemHandleClick = function itemHandleClick() {\n dispatch({\n type: ItemClick$1,\n index: index\n });\n };\n var itemProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function(itemNode) {\n if (itemNode) {\n itemRefs.current[elementIds.getItemId(index)] = itemNode;\n }\n }), _extends4[\"aria-disabled\"] = disabled, _extends4[\"aria-selected\"] = \"\" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = \"option\", _extends4), rest);\n if (!disabled) {\n /* istanbul ignore next (react-native) */ {\n itemProps.onClick = callAllEventHandlers(onClick, itemHandleClick);\n }\n }\n itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);\n return itemProps;\n }, [\n latest,\n elementIds,\n shouldScrollRef,\n dispatch\n ]);\n return {\n // prop getters.\n getToggleButtonProps: getToggleButtonProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getItemProps: getItemProps,\n // actions.\n toggleMenu: toggleMenu,\n openMenu: openMenu,\n closeMenu: closeMenu,\n setHighlightedIndex: setHighlightedIndex,\n selectItem: selectItem,\n reset: reset,\n setInputValue: setInputValue,\n // state.\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nvar InputKeyDownArrowDown = true ? \"__input_keydown_arrow_down__\" : 0;\nvar InputKeyDownArrowUp = true ? \"__input_keydown_arrow_up__\" : 0;\nvar InputKeyDownEscape = true ? \"__input_keydown_escape__\" : 0;\nvar InputKeyDownHome = true ? \"__input_keydown_home__\" : 0;\nvar InputKeyDownEnd = true ? \"__input_keydown_end__\" : 0;\nvar InputKeyDownPageUp = true ? \"__input_keydown_page_up__\" : 0;\nvar InputKeyDownPageDown = true ? \"__input_keydown_page_down__\" : 0;\nvar InputKeyDownEnter = true ? \"__input_keydown_enter__\" : 0;\nvar InputChange = true ? \"__input_change__\" : 0;\nvar InputBlur = true ? \"__input_blur__\" : 0;\nvar InputClick = true ? \"__input_click__\" : 0;\nvar MenuMouseLeave = true ? \"__menu_mouse_leave__\" : 0;\nvar ItemMouseMove = true ? \"__item_mouse_move__\" : 0;\nvar ItemClick = true ? \"__item_click__\" : 0;\nvar ToggleButtonClick = true ? \"__togglebutton_click__\" : 0;\nvar FunctionToggleMenu = true ? \"__function_toggle_menu__\" : 0;\nvar FunctionOpenMenu = true ? \"__function_open_menu__\" : 0;\nvar FunctionCloseMenu = true ? \"__function_close_menu__\" : 0;\nvar FunctionSetHighlightedIndex = true ? \"__function_set_highlighted_index__\" : 0;\nvar FunctionSelectItem = true ? \"__function_select_item__\" : 0;\nvar FunctionSetInputValue = true ? \"__function_set_input_value__\" : 0;\nvar FunctionReset$1 = true ? \"__function_reset__\" : 0;\nvar ControlledPropUpdatedSelectedItem = true ? \"__controlled_prop_updated_selected_item__\" : 0;\nvar stateChangeTypes$1 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n InputKeyDownArrowDown: InputKeyDownArrowDown,\n InputKeyDownArrowUp: InputKeyDownArrowUp,\n InputKeyDownEscape: InputKeyDownEscape,\n InputKeyDownHome: InputKeyDownHome,\n InputKeyDownEnd: InputKeyDownEnd,\n InputKeyDownPageUp: InputKeyDownPageUp,\n InputKeyDownPageDown: InputKeyDownPageDown,\n InputKeyDownEnter: InputKeyDownEnter,\n InputChange: InputChange,\n InputBlur: InputBlur,\n InputClick: InputClick,\n MenuMouseLeave: MenuMouseLeave,\n ItemMouseMove: ItemMouseMove,\n ItemClick: ItemClick,\n ToggleButtonClick: ToggleButtonClick,\n FunctionToggleMenu: FunctionToggleMenu,\n FunctionOpenMenu: FunctionOpenMenu,\n FunctionCloseMenu: FunctionCloseMenu,\n FunctionSetHighlightedIndex: FunctionSetHighlightedIndex,\n FunctionSelectItem: FunctionSelectItem,\n FunctionSetInputValue: FunctionSetInputValue,\n FunctionReset: FunctionReset$1,\n ControlledPropUpdatedSelectedItem: ControlledPropUpdatedSelectedItem\n});\nfunction getInitialState$1(props) {\n var initialState = getInitialState$2(props);\n var selectedItem = initialState.selectedItem;\n var inputValue = initialState.inputValue;\n if (inputValue === \"\" && selectedItem && props.defaultInputValue === undefined && props.initialInputValue === undefined && props.inputValue === undefined) {\n inputValue = props.itemToString(selectedItem);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, initialState, {\n inputValue: inputValue\n });\n}\nvar propTypes$1 = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonDropdownPropTypes, {\n items: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array).isRequired,\n isItemDisabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n selectedItemChanged: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n getA11ySelectionMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n inputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n defaultInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n initialInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n inputId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n onInputValueChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\n/**\n * The useCombobox version of useControlledReducer, which also\n * checks if the controlled prop selectedItem changed between\n * renders. If so, it will also update inputValue with its\n * string equivalent. It uses the common useEnhancedReducer to\n * compute the rest of the state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useControlledReducer(reducer, initialState, props) {\n var previousSelectedItemRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];\n // ToDo: if needed, make same approach as selectedItemChanged from Downshift.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!isControlledProp(props, \"selectedItem\")) {\n return;\n }\n if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {\n dispatch({\n type: ControlledPropUpdatedSelectedItem,\n inputValue: props.itemToString(props.selectedItem)\n });\n }\n previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n state.selectedItem,\n props.selectedItem\n ]);\n return [\n getState(state, props),\n dispatch\n ];\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$1 = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes$1 = function validatePropTypes(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes$1, options, \"prop\", caller.name);\n };\n}\nvar defaultProps$1 = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$3, {\n selectedItemChanged: function selectedItemChanged(prevItem, item) {\n return prevItem !== item;\n },\n getA11yStatusMessage: getA11yStatusMessage$1,\n isItemDisabled: function isItemDisabled() {\n return false;\n }\n});\n/* eslint-disable complexity */ function downshiftUseComboboxReducer(state, action) {\n var _props$items;\n var type = action.type, props = action.props, altKey = action.altKey;\n var changes;\n switch(type){\n case ItemClick:\n changes = {\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n selectedItem: props.items[action.index],\n inputValue: props.itemToString(props.items[action.index])\n };\n break;\n case InputKeyDownArrowDown:\n if (state.isOpen) {\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)\n };\n } else {\n changes = {\n highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),\n isOpen: props.items.length >= 0\n };\n }\n break;\n case InputKeyDownArrowUp:\n if (state.isOpen) {\n if (altKey) {\n changes = getChangesOnSelection(props, state.highlightedIndex);\n } else {\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)\n };\n }\n } else {\n changes = {\n highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),\n isOpen: props.items.length >= 0\n };\n }\n break;\n case InputKeyDownEnter:\n changes = getChangesOnSelection(props, state.highlightedIndex);\n break;\n case InputKeyDownEscape:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, !state.isOpen && {\n selectedItem: null,\n inputValue: \"\"\n });\n break;\n case InputKeyDownPageUp:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)\n };\n break;\n case InputKeyDownPageDown:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)\n };\n break;\n case InputKeyDownHome:\n changes = {\n highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)\n };\n break;\n case InputKeyDownEnd:\n changes = {\n highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)\n };\n break;\n case InputBlur:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && action.selectItem && {\n selectedItem: props.items[state.highlightedIndex],\n inputValue: props.itemToString(props.items[state.highlightedIndex])\n });\n break;\n case InputChange:\n changes = {\n isOpen: true,\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n inputValue: action.inputValue\n };\n break;\n case InputClick:\n changes = {\n isOpen: !state.isOpen,\n highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case FunctionSelectItem:\n changes = {\n selectedItem: action.selectedItem,\n inputValue: props.itemToString(action.selectedItem)\n };\n break;\n case ControlledPropUpdatedSelectedItem:\n changes = {\n inputValue: action.inputValue\n };\n break;\n default:\n return downshiftCommonReducer(state, action, stateChangeTypes$1);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ var _excluded$1 = [\n \"onMouseLeave\",\n \"refKey\",\n \"ref\"\n], _excluded2$1 = [\n \"item\",\n \"index\",\n \"refKey\",\n \"ref\",\n \"onMouseMove\",\n \"onMouseDown\",\n \"onClick\",\n \"onPress\",\n \"disabled\"\n], _excluded3 = [\n \"onClick\",\n \"onPress\",\n \"refKey\",\n \"ref\"\n], _excluded4 = [\n \"onKeyDown\",\n \"onChange\",\n \"onInput\",\n \"onBlur\",\n \"onChangeText\",\n \"onClick\",\n \"refKey\",\n \"ref\"\n];\nuseCombobox.stateChangeTypes = stateChangeTypes$1;\nfunction useCombobox(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes$1(userProps, useCombobox);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$1, userProps);\n var items = props.items, _$scrollIntoView = props.scrollIntoView, environment = props.environment, _$getA11yStatusMessage = props.getA11yStatusMessage, _$getA11ySelectionMessage = props.getA11ySelectionMessage, _$itemToString = props.itemToString;\n // Initial state depending on controlled props.\n var initialState = getInitialState$1(props);\n var _useControlledReducer = useControlledReducer(downshiftUseComboboxReducer, initialState, props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var isOpen = state.isOpen, highlightedIndex = state.highlightedIndex, selectedItem = state.selectedItem, inputValue = state.inputValue;\n // Element refs.\n var menuRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var itemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({});\n var inputRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var toggleButtonRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // prevent id re-generation between renders.\n var elementIds = useElementIds(props);\n // used to keep track of how many items we had on previous cycle.\n var previousResultCountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n // utility callback to get item element.\n var latest = useLatestRef({\n state: state,\n props: props\n });\n var getItemNodeFromIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(index) {\n return itemRefs.current[elementIds.getItemId(index)];\n }, [\n elementIds\n ]);\n // Effects.\n // Sets a11y status message on changes in state.\n useA11yMessageSetter(_$getA11yStatusMessage, [\n isOpen,\n highlightedIndex,\n inputValue,\n items\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Sets a11y status message on changes in selectedItem.\n useA11yMessageSetter(_$getA11ySelectionMessage, [\n selectedItem\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Scroll on highlighted item if change comes from keyboard.\n var shouldScrollRef = useScrollIntoView({\n menuElement: menuRef.current,\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n itemRefs: itemRefs,\n scrollIntoView: _$scrollIntoView,\n getItemNodeFromIndex: getItemNodeFromIndex\n });\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n // Focus the input on first render if required.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var focusOnOpen = getInitialValue$1(props, \"isOpen\");\n if (focusOnOpen && inputRef.current) {\n inputRef.current.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n previousResultCountRef.current = items.length;\n });\n // Add mouse/touch events to document.\n var mouseAndTouchTrackersRef = useMouseAndTouchTracker(isOpen, [\n inputRef,\n menuRef,\n toggleButtonRef\n ], environment, function() {\n dispatch({\n type: InputBlur,\n selectItem: false\n });\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getInputProps\", \"getMenuProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Reset itemRefs on close.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var _environment$document;\n if (!isOpen) {\n itemRefs.current = {};\n } else if (((_environment$document = environment.document) == null ? void 0 : _environment$document.activeElement) !== inputRef.current) {\n var _inputRef$current;\n inputRef == null || (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();\n }\n }, [\n isOpen,\n environment\n ]);\n /* Event handler functions */ var inputKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n return {\n ArrowDown: function ArrowDown(event) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownArrowDown,\n altKey: event.altKey\n });\n },\n ArrowUp: function ArrowUp(event) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownArrowUp,\n altKey: event.altKey\n });\n },\n Home: function Home(event) {\n if (!latest.current.state.isOpen) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownHome\n });\n },\n End: function End(event) {\n if (!latest.current.state.isOpen) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownEnd\n });\n },\n Escape: function Escape(event) {\n var latestState = latest.current.state;\n if (latestState.isOpen || latestState.inputValue || latestState.selectedItem || latestState.highlightedIndex > -1) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownEscape\n });\n }\n },\n Enter: function Enter(event) {\n var latestState = latest.current.state;\n // if closed or no highlighted index, do nothing.\n if (!latestState.isOpen || event.which === 229 // if IME composing, wait for next Enter keydown event.\n ) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownEnter\n });\n },\n PageUp: function PageUp(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownPageUp\n });\n }\n },\n PageDown: function PageDown(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownPageDown\n });\n }\n }\n };\n }, [\n dispatch,\n latest\n ]);\n // Getter props.\n var getLabelProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(labelProps) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: elementIds.labelId,\n htmlFor: elementIds.inputId\n }, labelProps);\n }, [\n elementIds\n ]);\n var getMenuProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, onMouseLeave = _ref.onMouseLeave, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey, ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$1);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n setGetterPropCallInfo(\"getMenuProps\", suppressRefError, refKey, menuRef);\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(menuNode) {\n menuRef.current = menuNode;\n }), _extends2.id = elementIds.menuId, _extends2.role = \"listbox\", _extends2[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, function() {\n dispatch({\n type: MenuMouseLeave\n });\n }), _extends2), rest);\n }, [\n dispatch,\n setGetterPropCallInfo,\n elementIds\n ]);\n var getItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp3) {\n var _extends3, _ref4;\n var _ref3 = _temp3 === void 0 ? {} : _temp3, itemProp = _ref3.item, indexProp = _ref3.index, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, onMouseMove = _ref3.onMouseMove, onMouseDown = _ref3.onMouseDown, onClick = _ref3.onClick;\n _ref3.onPress;\n var disabledProp = _ref3.disabled, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$1);\n if (disabledProp !== undefined) {\n console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');\n }\n var _latest$current = latest.current, latestProps = _latest$current.props, latestState = _latest$current.state;\n var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, \"Pass either item or index to getItemProps!\"), item = _getItemAndIndex[0], index = _getItemAndIndex[1];\n var disabled = latestProps.isItemDisabled(item, index);\n var onSelectKey = \"onClick\";\n var customClickHandler = onClick;\n var itemHandleMouseMove = function itemHandleMouseMove() {\n if (index === latestState.highlightedIndex) {\n return;\n }\n shouldScrollRef.current = false;\n dispatch({\n type: ItemMouseMove,\n index: index,\n disabled: disabled\n });\n };\n var itemHandleClick = function itemHandleClick() {\n dispatch({\n type: ItemClick,\n index: index\n });\n };\n var itemHandleMouseDown = function itemHandleMouseDown(e) {\n return e.preventDefault();\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(itemNode) {\n if (itemNode) {\n itemRefs.current[elementIds.getItemId(index)] = itemNode;\n }\n }), _extends3[\"aria-disabled\"] = disabled, _extends3[\"aria-selected\"] = \"\" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3.role = \"option\", _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {\n onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),\n onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)\n }, rest);\n }, [\n dispatch,\n latest,\n shouldScrollRef,\n elementIds\n ]);\n var getToggleButtonProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp4) {\n var _extends4;\n var _ref5 = _temp4 === void 0 ? {} : _temp4, onClick = _ref5.onClick;\n _ref5.onPress;\n var _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, ref = _ref5.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded3);\n var latestState = latest.current.state;\n var toggleButtonHandleClick = function toggleButtonHandleClick() {\n dispatch({\n type: ToggleButtonClick\n });\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function(toggleButtonNode) {\n toggleButtonRef.current = toggleButtonNode;\n }), _extends4[\"aria-controls\"] = elementIds.menuId, _extends4[\"aria-expanded\"] = latestState.isOpen, _extends4.id = elementIds.toggleButtonId, _extends4.tabIndex = -1, _extends4), !rest.disabled && (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, {\n onClick: callAllEventHandlers(onClick, toggleButtonHandleClick)\n }), rest);\n }, [\n dispatch,\n latest,\n elementIds\n ]);\n var getInputProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp5, _temp6) {\n var _extends5;\n var _ref6 = _temp5 === void 0 ? {} : _temp5, onKeyDown = _ref6.onKeyDown, onChange = _ref6.onChange, onInput = _ref6.onInput, onBlur = _ref6.onBlur;\n _ref6.onChangeText;\n var onClick = _ref6.onClick, _ref6$refKey = _ref6.refKey, refKey = _ref6$refKey === void 0 ? \"ref\" : _ref6$refKey, ref = _ref6.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref6, _excluded4);\n var _ref7 = _temp6 === void 0 ? {} : _temp6, _ref7$suppressRefErro = _ref7.suppressRefError, suppressRefError = _ref7$suppressRefErro === void 0 ? false : _ref7$suppressRefErro;\n setGetterPropCallInfo(\"getInputProps\", suppressRefError, refKey, inputRef);\n var latestState = latest.current.state;\n var inputHandleKeyDown = function inputHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && inputKeyDownHandlers[key]) {\n inputKeyDownHandlers[key](event);\n }\n };\n var inputHandleChange = function inputHandleChange(event) {\n dispatch({\n type: InputChange,\n inputValue: event.target.value\n });\n };\n var inputHandleBlur = function inputHandleBlur(event) {\n /* istanbul ignore else */ if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {\n var isBlurByTabChange = event.relatedTarget === null && environment.document.activeElement !== environment.document.body;\n dispatch({\n type: InputBlur,\n selectItem: !isBlurByTabChange\n });\n }\n };\n var inputHandleClick = function inputHandleClick() {\n dispatch({\n type: InputClick\n });\n };\n /* istanbul ignore next (preact) */ var onChangeKey = \"onChange\";\n var eventHandlers = {};\n if (!rest.disabled) {\n var _eventHandlers;\n eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function(inputNode) {\n inputRef.current = inputNode;\n }), _extends5[\"aria-activedescendant\"] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : \"\", _extends5[\"aria-autocomplete\"] = \"list\", _extends5[\"aria-controls\"] = elementIds.menuId, _extends5[\"aria-expanded\"] = latestState.isOpen, _extends5[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : elementIds.labelId, _extends5.autoComplete = \"off\", _extends5.id = elementIds.inputId, _extends5.role = \"combobox\", _extends5.value = latestState.inputValue, _extends5), eventHandlers, rest);\n }, [\n setGetterPropCallInfo,\n latest,\n elementIds,\n inputKeyDownHandlers,\n dispatch,\n mouseAndTouchTrackersRef,\n environment\n ]);\n // returns\n var toggleMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionToggleMenu\n });\n }, [\n dispatch\n ]);\n var closeMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionCloseMenu\n });\n }, [\n dispatch\n ]);\n var openMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionOpenMenu\n });\n }, [\n dispatch\n ]);\n var setHighlightedIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newHighlightedIndex) {\n dispatch({\n type: FunctionSetHighlightedIndex,\n highlightedIndex: newHighlightedIndex\n });\n }, [\n dispatch\n ]);\n var selectItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItem) {\n dispatch({\n type: FunctionSelectItem,\n selectedItem: newSelectedItem\n });\n }, [\n dispatch\n ]);\n var setInputValue = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newInputValue) {\n dispatch({\n type: FunctionSetInputValue,\n inputValue: newInputValue\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset$1\n });\n }, [\n dispatch\n ]);\n return {\n // prop getters.\n getItemProps: getItemProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getInputProps: getInputProps,\n getToggleButtonProps: getToggleButtonProps,\n // actions.\n toggleMenu: toggleMenu,\n openMenu: openMenu,\n closeMenu: closeMenu,\n setHighlightedIndex: setHighlightedIndex,\n setInputValue: setInputValue,\n selectItem: selectItem,\n reset: reset,\n // state.\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nvar defaultStateValues = {\n activeIndex: -1,\n selectedItems: []\n};\n/**\n * Returns the initial value for a state key in the following order:\n * 1. controlled prop, 2. initial prop, 3. default prop, 4. default\n * value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */ function getInitialValue(props, propKey) {\n return getInitialValue$1(props, propKey, defaultStateValues);\n}\n/**\n * Returns the default value for a state key in the following order:\n * 1. controlled prop, 2. default prop, 3. default value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */ function getDefaultValue(props, propKey) {\n return getDefaultValue$1(props, propKey, defaultStateValues);\n}\n/**\n * Gets the initial state based on the provided props. It uses initial, default\n * and controlled props related to state in order to compute the initial value.\n *\n * @param {Object} props Props passed to the hook.\n * @returns {Object} The initial state.\n */ function getInitialState(props) {\n var activeIndex = getInitialValue(props, \"activeIndex\");\n var selectedItems = getInitialValue(props, \"selectedItems\");\n return {\n activeIndex: activeIndex,\n selectedItems: selectedItems\n };\n}\n/**\n * Returns true if dropdown keydown operation is permitted. Should not be\n * allowed on keydown with modifier keys (ctrl, alt, shift, meta), on\n * input element with text content that is either highlighted or selection\n * cursor is not at the starting position.\n *\n * @param {KeyboardEvent} event The event from keydown.\n * @returns {boolean} Whether the operation is allowed.\n */ function isKeyDownOperationPermitted(event) {\n if (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {\n return false;\n }\n var element = event.target;\n if (_instanceof(element, HTMLInputElement) && // if element is a text input\n element.value !== \"\" && // and we have text in it\n // and cursor is either not at the start or is currently highlighting text.\n (element.selectionStart !== 0 || element.selectionEnd !== 0)) {\n return false;\n }\n return true;\n}\n/**\n * Returns a message to be added to aria-live region when item is removed.\n *\n * @param {Object} selectionParameters Parameters required to build the message.\n * @returns {string} The a11y message.\n */ function getA11yRemovalMessage(selectionParameters) {\n var removedSelectedItem = selectionParameters.removedSelectedItem, itemToStringLocal = selectionParameters.itemToString;\n return itemToStringLocal(removedSelectedItem) + \" has been removed.\";\n}\nvar propTypes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonPropTypes, {\n selectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n initialSelectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n defaultSelectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n getA11yRemovalMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n activeIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialActiveIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultActiveIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n onActiveIndexChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onSelectedItemsChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n keyNavigationNext: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n keyNavigationPrevious: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n});\nvar defaultProps = {\n itemToString: defaultProps$3.itemToString,\n stateReducer: defaultProps$3.stateReducer,\n environment: defaultProps$3.environment,\n getA11yRemovalMessage: getA11yRemovalMessage,\n keyNavigationNext: \"ArrowRight\",\n keyNavigationPrevious: \"ArrowLeft\"\n};\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes = function validatePropTypes(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes, options, \"prop\", caller.name);\n };\n}\nvar SelectedItemClick = true ? \"__selected_item_click__\" : 0;\nvar SelectedItemKeyDownDelete = true ? \"__selected_item_keydown_delete__\" : 0;\nvar SelectedItemKeyDownBackspace = true ? \"__selected_item_keydown_backspace__\" : 0;\nvar SelectedItemKeyDownNavigationNext = true ? \"__selected_item_keydown_navigation_next__\" : 0;\nvar SelectedItemKeyDownNavigationPrevious = true ? \"__selected_item_keydown_navigation_previous__\" : 0;\nvar DropdownKeyDownNavigationPrevious = true ? \"__dropdown_keydown_navigation_previous__\" : 0;\nvar DropdownKeyDownBackspace = true ? \"__dropdown_keydown_backspace__\" : 0;\nvar DropdownClick = true ? \"__dropdown_click__\" : 0;\nvar FunctionAddSelectedItem = true ? \"__function_add_selected_item__\" : 0;\nvar FunctionRemoveSelectedItem = true ? \"__function_remove_selected_item__\" : 0;\nvar FunctionSetSelectedItems = true ? \"__function_set_selected_items__\" : 0;\nvar FunctionSetActiveIndex = true ? \"__function_set_active_index__\" : 0;\nvar FunctionReset = true ? \"__function_reset__\" : 0;\nvar stateChangeTypes = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n SelectedItemClick: SelectedItemClick,\n SelectedItemKeyDownDelete: SelectedItemKeyDownDelete,\n SelectedItemKeyDownBackspace: SelectedItemKeyDownBackspace,\n SelectedItemKeyDownNavigationNext: SelectedItemKeyDownNavigationNext,\n SelectedItemKeyDownNavigationPrevious: SelectedItemKeyDownNavigationPrevious,\n DropdownKeyDownNavigationPrevious: DropdownKeyDownNavigationPrevious,\n DropdownKeyDownBackspace: DropdownKeyDownBackspace,\n DropdownClick: DropdownClick,\n FunctionAddSelectedItem: FunctionAddSelectedItem,\n FunctionRemoveSelectedItem: FunctionRemoveSelectedItem,\n FunctionSetSelectedItems: FunctionSetSelectedItems,\n FunctionSetActiveIndex: FunctionSetActiveIndex,\n FunctionReset: FunctionReset\n});\n/* eslint-disable complexity */ function downshiftMultipleSelectionReducer(state, action) {\n var type = action.type, index = action.index, props = action.props, selectedItem = action.selectedItem;\n var activeIndex = state.activeIndex, selectedItems = state.selectedItems;\n var changes;\n switch(type){\n case SelectedItemClick:\n changes = {\n activeIndex: index\n };\n break;\n case SelectedItemKeyDownNavigationPrevious:\n changes = {\n activeIndex: activeIndex - 1 < 0 ? 0 : activeIndex - 1\n };\n break;\n case SelectedItemKeyDownNavigationNext:\n changes = {\n activeIndex: activeIndex + 1 >= selectedItems.length ? -1 : activeIndex + 1\n };\n break;\n case SelectedItemKeyDownBackspace:\n case SelectedItemKeyDownDelete:\n {\n if (activeIndex < 0) {\n break;\n }\n var newActiveIndex = activeIndex;\n if (selectedItems.length === 1) {\n newActiveIndex = -1;\n } else if (activeIndex === selectedItems.length - 1) {\n newActiveIndex = selectedItems.length - 2;\n }\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n selectedItems: [].concat(selectedItems.slice(0, activeIndex), selectedItems.slice(activeIndex + 1))\n }, {\n activeIndex: newActiveIndex\n });\n break;\n }\n case DropdownKeyDownNavigationPrevious:\n changes = {\n activeIndex: selectedItems.length - 1\n };\n break;\n case DropdownKeyDownBackspace:\n changes = {\n selectedItems: selectedItems.slice(0, selectedItems.length - 1)\n };\n break;\n case FunctionAddSelectedItem:\n changes = {\n selectedItems: [].concat(selectedItems, [\n selectedItem\n ])\n };\n break;\n case DropdownClick:\n changes = {\n activeIndex: -1\n };\n break;\n case FunctionRemoveSelectedItem:\n {\n var _newActiveIndex = activeIndex;\n var selectedItemIndex = selectedItems.indexOf(selectedItem);\n if (selectedItemIndex < 0) {\n break;\n }\n if (selectedItems.length === 1) {\n _newActiveIndex = -1;\n } else if (selectedItemIndex === selectedItems.length - 1) {\n _newActiveIndex = selectedItems.length - 2;\n }\n changes = {\n selectedItems: [].concat(selectedItems.slice(0, selectedItemIndex), selectedItems.slice(selectedItemIndex + 1)),\n activeIndex: _newActiveIndex\n };\n break;\n }\n case FunctionSetSelectedItems:\n {\n var newSelectedItems = action.selectedItems;\n changes = {\n selectedItems: newSelectedItems\n };\n break;\n }\n case FunctionSetActiveIndex:\n {\n var _newActiveIndex2 = action.activeIndex;\n changes = {\n activeIndex: _newActiveIndex2\n };\n break;\n }\n case FunctionReset:\n changes = {\n activeIndex: getDefaultValue(props, \"activeIndex\"),\n selectedItems: getDefaultValue(props, \"selectedItems\")\n };\n break;\n default:\n throw new Error(\"Reducer called without proper action type.\");\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\nvar _excluded = [\n \"refKey\",\n \"ref\",\n \"onClick\",\n \"onKeyDown\",\n \"selectedItem\",\n \"index\"\n], _excluded2 = [\n \"refKey\",\n \"ref\",\n \"onKeyDown\",\n \"onClick\",\n \"preventKeyAction\"\n];\nuseMultipleSelection.stateChangeTypes = stateChangeTypes;\nfunction useMultipleSelection(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes(userProps, useMultipleSelection);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps, userProps);\n var _$getA11yRemovalMessage = props.getA11yRemovalMessage, _$itemToString = props.itemToString, environment = props.environment, keyNavigationNext = props.keyNavigationNext, keyNavigationPrevious = props.keyNavigationPrevious;\n // Reducer init.\n var _useControlledReducer = useControlledReducer$1(downshiftMultipleSelectionReducer, getInitialState(props), props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var activeIndex = state.activeIndex, selectedItems = state.selectedItems;\n // Refs.\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n var dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var previousSelectedItemsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(selectedItems);\n var selectedItemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n selectedItemRefs.current = [];\n var latest = useLatestRef({\n state: state,\n props: props\n });\n // Effects.\n /* Sets a11y status message on changes in selectedItem. */ (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current || false) {\n return;\n }\n if (selectedItems.length < previousSelectedItemsRef.current.length) {\n var removedSelectedItem = previousSelectedItemsRef.current.find(function(item) {\n return selectedItems.indexOf(item) < 0;\n });\n setStatus(_$getA11yRemovalMessage({\n itemToString: _$itemToString,\n resultCount: selectedItems.length,\n removedSelectedItem: removedSelectedItem,\n activeIndex: activeIndex,\n activeSelectedItem: selectedItems[activeIndex]\n }), environment.document);\n }\n previousSelectedItemsRef.current = selectedItems;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n selectedItems.length\n ]);\n // Sets focus on active item.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n if (activeIndex === -1 && dropdownRef.current) {\n dropdownRef.current.focus();\n } else if (selectedItemRefs.current[activeIndex]) {\n selectedItemRefs.current[activeIndex].focus();\n }\n }, [\n activeIndex\n ]);\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getDropdownProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Event handler functions.\n var selectedItemKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n var _ref;\n return _ref = {}, _ref[keyNavigationPrevious] = function() {\n dispatch({\n type: SelectedItemKeyDownNavigationPrevious\n });\n }, _ref[keyNavigationNext] = function() {\n dispatch({\n type: SelectedItemKeyDownNavigationNext\n });\n }, _ref.Delete = function Delete() {\n dispatch({\n type: SelectedItemKeyDownDelete\n });\n }, _ref.Backspace = function Backspace() {\n dispatch({\n type: SelectedItemKeyDownBackspace\n });\n }, _ref;\n }, [\n dispatch,\n keyNavigationNext,\n keyNavigationPrevious\n ]);\n var dropdownKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n var _ref2;\n return _ref2 = {}, _ref2[keyNavigationPrevious] = function(event) {\n if (isKeyDownOperationPermitted(event)) {\n dispatch({\n type: DropdownKeyDownNavigationPrevious\n });\n }\n }, _ref2.Backspace = function Backspace(event) {\n if (isKeyDownOperationPermitted(event)) {\n dispatch({\n type: DropdownKeyDownBackspace\n });\n }\n }, _ref2;\n }, [\n dispatch,\n keyNavigationPrevious\n ]);\n // Getter props.\n var getSelectedItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp) {\n var _extends2;\n var _ref3 = _temp === void 0 ? {} : _temp, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, onClick = _ref3.onClick, onKeyDown = _ref3.onKeyDown, selectedItemProp = _ref3.selectedItem, indexProp = _ref3.index, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded);\n var latestState = latest.current.state;\n var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, \"Pass either item or index to getSelectedItemProps!\"), index = _getItemAndIndex[1];\n var isFocusable = index > -1 && index === latestState.activeIndex;\n var selectedItemHandleClick = function selectedItemHandleClick() {\n dispatch({\n type: SelectedItemClick,\n index: index\n });\n };\n var selectedItemHandleKeyDown = function selectedItemHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && selectedItemKeyDownHandlers[key]) {\n selectedItemKeyDownHandlers[key](event);\n }\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(selectedItemNode) {\n if (selectedItemNode) {\n selectedItemRefs.current.push(selectedItemNode);\n }\n }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);\n }, [\n dispatch,\n latest,\n selectedItemKeyDownHandlers\n ]);\n var getDropdownProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp2, _temp3) {\n var _extends3;\n var _ref4 = _temp2 === void 0 ? {} : _temp2, _ref4$refKey = _ref4.refKey, refKey = _ref4$refKey === void 0 ? \"ref\" : _ref4$refKey, ref = _ref4.ref, onKeyDown = _ref4.onKeyDown, onClick = _ref4.onClick, _ref4$preventKeyActio = _ref4.preventKeyAction, preventKeyAction = _ref4$preventKeyActio === void 0 ? false : _ref4$preventKeyActio, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref4, _excluded2);\n var _ref5 = _temp3 === void 0 ? {} : _temp3, _ref5$suppressRefErro = _ref5.suppressRefError, suppressRefError = _ref5$suppressRefErro === void 0 ? false : _ref5$suppressRefErro;\n setGetterPropCallInfo(\"getDropdownProps\", suppressRefError, refKey, dropdownRef);\n var dropdownHandleKeyDown = function dropdownHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && dropdownKeyDownHandlers[key]) {\n dropdownKeyDownHandlers[key](event);\n }\n };\n var dropdownHandleClick = function dropdownHandleClick() {\n dispatch({\n type: DropdownClick\n });\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(dropdownNode) {\n if (dropdownNode) {\n dropdownRef.current = dropdownNode;\n }\n }), _extends3), !preventKeyAction && {\n onKeyDown: callAllEventHandlers(onKeyDown, dropdownHandleKeyDown),\n onClick: callAllEventHandlers(onClick, dropdownHandleClick)\n }, rest);\n }, [\n dispatch,\n dropdownKeyDownHandlers,\n setGetterPropCallInfo\n ]);\n // returns\n var addSelectedItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(selectedItem) {\n dispatch({\n type: FunctionAddSelectedItem,\n selectedItem: selectedItem\n });\n }, [\n dispatch\n ]);\n var removeSelectedItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(selectedItem) {\n dispatch({\n type: FunctionRemoveSelectedItem,\n selectedItem: selectedItem\n });\n }, [\n dispatch\n ]);\n var setSelectedItems = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItems) {\n dispatch({\n type: FunctionSetSelectedItems,\n selectedItems: newSelectedItems\n });\n }, [\n dispatch\n ]);\n var setActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newActiveIndex) {\n dispatch({\n type: FunctionSetActiveIndex,\n activeIndex: newActiveIndex\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset\n });\n }, [\n dispatch\n ]);\n return {\n getSelectedItemProps: getSelectedItemProps,\n getDropdownProps: getDropdownProps,\n addSelectedItem: addSelectedItem,\n removeSelectedItem: removeSelectedItem,\n setSelectedItems: setSelectedItems,\n setActiveIndex: setActiveIndex,\n reset: reset,\n selectedItems: selectedItems,\n activeIndex: activeIndex\n };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9kaXN0L2Rvd25zaGlmdC5lc20uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0c7QUFDMUM7QUFDNEI7QUFDaEI7QUFDbkM7QUFDMEY7QUFDckY7QUFDTztBQUNkO0FBRWpDLElBQUlpQixZQUFZO0FBRWhCOzs7Ozs7O0NBT0MsR0FDRCxTQUFTQyxPQUFPQyxFQUFFLEVBQUU7SUFDbEIsT0FBTyxPQUFPQSxPQUFPLGFBQWFBLEtBQUtDLElBQUk7QUFDN0M7QUFDQSxTQUFTQSxPQUFPLENBQUM7QUFFakI7Ozs7Q0FJQyxHQUNELFNBQVNDLGVBQWVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3RDLElBQUksQ0FBQ0QsTUFBTTtRQUNUO0lBQ0YsQ0FBQztJQUNELElBQUlFLFVBQVVULG9FQUFPQSxDQUFDTyxNQUFNO1FBQzFCRyxVQUFVRjtRQUNWRyxPQUFPO1FBQ1BDLFlBQVk7SUFDZDtJQUNBSCxRQUFRSSxPQUFPLENBQUMsU0FBVUMsSUFBSSxFQUFFO1FBQzlCLElBQUlDLEtBQUtELEtBQUtDLEVBQUUsRUFDZEMsTUFBTUYsS0FBS0UsR0FBRyxFQUNkQyxPQUFPSCxLQUFLRyxJQUFJO1FBQ2xCRixHQUFHRyxTQUFTLEdBQUdGO1FBQ2ZELEdBQUdJLFVBQVUsR0FBR0Y7SUFDbEI7QUFDRjtBQUVBOzs7OztDQUtDLEdBQ0QsU0FBU0csaUJBQWlCQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFFO0lBQ3BELElBQUlDLFNBQVNILFdBQVdDLFNBQVNBLFlBQUFBLE9BQWlCQyxZQUFZRSxJQUFJLEtBQUlKLE9BQU9LLFFBQVEsSUFBSUwsT0FBT0ssUUFBUSxDQUFDSjtJQUN6RyxPQUFPRTtBQUNUO0FBRUE7Ozs7Ozs7Q0FPQyxHQUNELFNBQVNHLFNBQVNDLEVBQUUsRUFBRUMsSUFBSSxFQUFFO1FBRWpCQyxTQUFULFNBQVNBLFNBQVM7UUFDaEIsSUFBSUMsV0FBVztZ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SUFBSW9QLHFCQUFxQnJyQixrREFBV0EsQ0FBQyxTQUFVbU4sWUFBWSxFQUFFO1FBQzNEOE8sU0FBUztZQUNQaFgsTUFBTWdrQjtZQUNOOWIsY0FBY0E7UUFDaEI7SUFDRixHQUFHO1FBQUM4TztLQUFTO0lBQ2IsSUFBSXFQLG1CQUFtQnRyQixrREFBV0EsQ0FBQyxTQUFVd3BCLGdCQUFnQixFQUFFO1FBQzdEdk4sU0FBUztZQUNQaFgsTUFBTWlrQjtZQUNOOUIsZUFBZW9DO1FBQ2pCO0lBQ0YsR0FBRztRQUFDdk47S0FBUztJQUNiLElBQUlzUCxpQkFBaUJ2ckIsa0RBQVdBLENBQUMsU0FBVXFwQixjQUFjLEVBQUU7UUFDekRwTixTQUFTO1lBQ1BoWCxNQUFNa2tCO1lBQ05oQyxhQUFha0M7UUFDZjtJQUNGLEdBQUc7UUFBQ3BOO0tBQVM7SUFDYixJQUFJckwsUUFBUTVRLGtEQUFXQSxDQUFDLFdBQVk7UUFDbENpYyxTQUFTO1lBQ1BoWCxNQUFNcWE7UUFDUjtJQUNGLEdBQUc7UUFBQ3JEO0tBQVM7SUFDYixPQUFPO1FBQ0xxTyxzQkFBc0JBO1FBQ3RCTSxrQkFBa0JBO1FBQ2xCUSxpQkFBaUJBO1FBQ2pCQyxvQkFBb0JBO1FBQ3BCQyxrQkFBa0JBO1FBQ2xCQyxnQkFBZ0JBO1FBQ2hCM2EsT0FBT0E7UUFDUHdXLGVBQWVBO1FBQ2ZELGFBQWFBO0lBQ2Y7QUFDRjtBQUVnRyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9kaXN0L2Rvd25zaGlmdC5lc20uanM/OWMzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZHVjZXIsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZvcndhcmRSZWYgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgY29tcHV0ZSBmcm9tICdjb21wdXRlLXNjcm9sbC1pbnRvLXZpZXcnO1xuaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEFjY2VwdHMgYSBwYXJhbWV0ZXIgYW5kIHJldHVybnMgaXQgaWYgaXQncyBhIGZ1bmN0aW9uXG4gKiBvciBhIG5vb3AgZnVuY3Rpb24gaWYgaXQncyBub3QuIFRoaXMgYWxsb3dzIHVzIHRvXG4gKiBhY2NlcHQgYSBjYWxsYmFjaywgYnV0IG5vdCB3b3JyeSBhYm91dCBpdCBpZiBpdCdzIG5vdFxuICogcGFzc2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgdGhlIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjYlRvQ2IoY2IpIHtcbiAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiIDogbm9vcDtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIFNjcm9sbCBub2RlIGludG8gdmlldyBpZiBuZWNlc3NhcnlcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgc2Nyb2xsIGludG8gdmlld1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbWVudU5vZGUgdGhlIG1lbnUgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG5vZGUsIG1lbnVOb2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYWN0aW9ucyA9IGNvbXB1dGUobm9kZSwge1xuICAgIGJvdW5kYXJ5OiBtZW51Tm9kZSxcbiAgICBibG9jazogJ25lYXJlc3QnLFxuICAgIHNjcm9sbE1vZGU6ICdpZi1uZWVkZWQnXG4gIH0pO1xuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgZWwgPSBfcmVmLmVsLFxuICAgICAgdG9wID0gX3JlZi50b3AsXG4gICAgICBsZWZ0ID0gX3JlZi5sZWZ0O1xuICAgIGVsLnNjcm9sbFRvcCA9IHRvcDtcbiAgICBlbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50IHRoZSBwYXJlbnQgbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2hpbGQgdGhlIGNoaWxkIG5vZGVcbiAqIEBwYXJhbSB7V2luZG93fSBlbnZpcm9ubWVudCBUaGUgd2luZG93IGNvbnRleHQgd2hlcmUgZG93bnNoaWZ0IHJlbmRlcnMuXG4gKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIHRoZSBwYXJlbnQgaXMgdGhlIGNoaWxkIG9yIHRoZSBjaGlsZCBpcyBpbiB0aGUgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGlzT3JDb250YWluc05vZGUocGFyZW50LCBjaGlsZCwgZW52aXJvbm1lbnQpIHtcbiAgdmFyIHJlc3VsdCA9IHBhcmVudCA9PT0gY2hpbGQgfHwgY2hpbGQgaW5zdGFuY2VvZiBlbnZpcm9ubWVudC5Ob2RlICYmIHBhcmVudC5jb250YWlucyAmJiBwYXJlbnQuY29udGFpbnMoY2hpbGQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNpbXBsZSBkZWJvdW5jZSBpbXBsZW1lbnRhdGlvbi4gV2lsbCBjYWxsIHRoZSBnaXZlblxuICogZnVuY3Rpb24gb25jZSBhZnRlciB0aGUgdGltZSBnaXZlbiBoYXMgcGFzc2VkIHNpbmNlXG4gKiBpdCB3YXMgbGFzdCBjYWxsZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgdGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHRpbWUgdGhlIHRpbWUgdG8gd2FpdFxuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHRpbWUpIHtcbiAgdmFyIHRpbWVvdXRJZDtcbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgY2FuY2VsKCk7XG4gICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICB9LCB0aW1lKTtcbiAgfVxuICB3cmFwcGVyLmNhbmNlbCA9IGNhbmNlbDtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnMuXG4gKiBUaGV5IGFyZSBleGVjdXRlZCBpbiBvcmRlciB1bnRpbCBvbmUgb2YgdGhlbSBzZXRzXG4gKiBgZXZlbnQucHJldmVudERvd25zaGlmdERlZmF1bHQgPSB0cnVlYC5cbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZucyB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgZXZlbnQgaGFuZGxlciB0byBhZGQgdG8gYW4gZWxlbWVudFxuICovXG5mdW5jdGlvbiBjYWxsQWxsRXZlbnRIYW5kbGVycygpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBmbnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBmbnNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zID4gMSA/IF9sZW4zIC0gMSA6IDApLCBfa2V5MyA9IDE7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuICAgIHJldHVybiBmbnMuc29tZShmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICBmbi5hcHBseSh2b2lkIDAsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RG93bnNoaWZ0RGVmYXVsdCB8fCBldmVudC5oYXNPd25Qcm9wZXJ0eSgnbmF0aXZlRXZlbnQnKSAmJiBldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RG93bnNoaWZ0RGVmYXVsdDtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVJlZnMoKSB7XG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVmcyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgIHJlZnNbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZ2VuZXJhdGVzIGEgdW5pcXVlIElEIGZvciBhbiBpbnN0YW5jZSBvZiBEb3duc2hpZnRcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaXF1ZSBJRFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuICByZXR1cm4gU3RyaW5nKGlkQ291bnRlcisrKTtcbn1cblxuLyoqXG4gKiBSZXNldHMgaWRDb3VudGVyIHRvIDAuIFVzZWQgZm9yIFNTUi5cbiAqL1xuZnVuY3Rpb24gcmVzZXRJZENvdW50ZXIoKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIGlmICgndXNlSWQnIGluIFJlYWN0KSB7XG4gICAgY29uc29sZS53YXJuKFwiSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIHJlc2V0SWRDb3VudGVyIHdoZW4gdXNpbmcgUmVhY3QgMTgrXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZENvdW50ZXIgPSAwO1xufVxuXG4vKipcbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHN0YXR1cyBtZXNzYWdlLiBPbmx5IGFkZGVkIHdoZW4gbWVudSBpcyBvcGVuLlxuICogV2lsbCBzcGVjaWZ5IGlmIHRoZXJlIGFyZSByZXN1bHRzIGluIHRoZSBsaXN0LCBhbmQgaWYgc28sIGhvdyBtYW55LFxuICogYW5kIHdoYXQga2V5cyBhcmUgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtIHRoZSBkb3duc2hpZnQgc3RhdGUgYW5kIG90aGVyIHJlbGV2YW50IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGExMXkgc3RhdHVzIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0QTExeVN0YXR1c01lc3NhZ2UkMShfcmVmMikge1xuICB2YXIgaXNPcGVuID0gX3JlZjIuaXNPcGVuLFxuICAgIHJlc3VsdENvdW50ID0gX3JlZjIucmVzdWx0Q291bnQsXG4gICAgcHJldmlvdXNSZXN1bHRDb3VudCA9IF9yZWYyLnByZXZpb3VzUmVzdWx0Q291bnQ7XG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICghcmVzdWx0Q291bnQpIHtcbiAgICByZXR1cm4gJ05vIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS4nO1xuICB9XG4gIGlmIChyZXN1bHRDb3VudCAhPT0gcHJldmlvdXNSZXN1bHRDb3VudCkge1xuICAgIHJldHVybiByZXN1bHRDb3VudCArIFwiIHJlc3VsdFwiICsgKHJlc3VsdENvdW50ID09PSAxID8gJyBpcycgOiAncyBhcmUnKSArIFwiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIFByZXNzIEVudGVyIGtleSB0byBzZWxlY3QuXCI7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCBpZiBpdCdzIGFuIGFycmF5LCByZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheVxuICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGFyZ3VtZW50XG4gKiBAcGFyYW0geyp9IGFyZyB0aGUgbWF5YmUtYXJyYXlcbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIHRoZSB2YWx1ZSBpZiBhcmcgaXMgZmFsc2V5IG5vdCBkZWZpbmVkXG4gKiBAcmV0dXJuIHsqfSB0aGUgYXJnIG9yIGl0J3MgZmlyc3QgaXRlbVxuICovXG5mdW5jdGlvbiB1bndyYXBBcnJheShhcmcsIGRlZmF1bHRWYWx1ZSkge1xuICBhcmcgPSBBcnJheS5pc0FycmF5KGFyZykgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL2FyZ1swXSA6IGFyZztcbiAgaWYgKCFhcmcgJiYgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXJnO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgKFApcmVhY3QgZWxlbWVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gd2hldGhlciBpdCdzIGEgRE9NIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNET01FbGVtZW50KGVsZW1lbnQpIHtcblxuICAvLyB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIHJlYWN0XG4gIHJldHVybiB0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAoUClyZWFjdCBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwcm9wc1xuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50UHJvcHMoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5wcm9wcztcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXMuIFVzZWZ1bFxuICogdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgaW4gZGVzdHJ1Y3R1cmluZyBvciBvYmplY3QgcGFyYW1zLlxuICogQHBhcmFtIHtTdHJpbmd9IGZuTmFtZSB0aGUgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lIHRoZSBwcm9wIG5hbWVcbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQcm9wKGZuTmFtZSwgcHJvcE5hbWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihcIlRoZSBwcm9wZXJ0eSBcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBpcyByZXF1aXJlZCBpbiBcXFwiXCIgKyBmbk5hbWUgKyBcIlxcXCJcIik7XG59XG52YXIgc3RhdGVLZXlzID0gWydoaWdobGlnaHRlZEluZGV4JywgJ2lucHV0VmFsdWUnLCAnaXNPcGVuJywgJ3NlbGVjdGVkSXRlbScsICd0eXBlJ107XG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSB0aGUgc3RhdGUgb2JqZWN0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHN0YXRlIHRoYXQgaXMgcmVsZXZhbnQgdG8gZG93bnNoaWZ0XG4gKi9cbmZ1bmN0aW9uIHBpY2tTdGF0ZShzdGF0ZSkge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0ge307XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBzdGF0ZUtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgcmVzdWx0W2tdID0gc3RhdGVba107XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgcGVyZm9ybSBhIHNoYWxsb3cgbWVyZ2Ugb2YgdGhlIGdpdmVuIHN0YXRlIG9iamVjdFxuICogd2l0aCB0aGUgc3RhdGUgY29taW5nIGZyb20gcHJvcHNcbiAqIChmb3IgdGhlIGNvbnRyb2xsZWQgY29tcG9uZW50IHNjZW5hcmlvKVxuICogVGhpcyBpcyB1c2VkIGluIHN0YXRlIHVwZGF0ZXIgZnVuY3Rpb25zIHNvIHRoZXkncmUgcmVmZXJlbmNpbmdcbiAqIHRoZSByaWdodCBzdGF0ZSByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGNvbWVzIGZyb20uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIFRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50L2hvb2suXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BzIHRoYXQgbWF5IGNvbnRhaW4gY29udHJvbGxlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbWVyZ2VkIGNvbnRyb2xsZWQgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKHN0YXRlLCBwcm9wcykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUpLnJlZHVjZShmdW5jdGlvbiAocHJldlN0YXRlLCBrZXkpIHtcbiAgICBwcmV2U3RhdGVba2V5XSA9IGlzQ29udHJvbGxlZFByb3AocHJvcHMsIGtleSkgPyBwcm9wc1trZXldIDogc3RhdGVba2V5XTtcbiAgICByZXR1cm4gcHJldlN0YXRlO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgYSBwcm9wIGlzIGEgXCJjb250cm9sbGVkIHByb3BcIiBtZWFuaW5nIGl0IGlzXG4gKiBzdGF0ZSB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBvdXRzaWRlIG9mIHRoaXMgY29tcG9uZW50IHJhdGhlclxuICogdGhhbiB3aXRoaW4gdGhpcyBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wcyB0aGF0IG1heSBjb250YWluIGNvbnRyb2xsZWQgdmFsdWVzLlxuICogQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUga2V5IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIGl0IGlzIGEgY29udHJvbGxlZCBjb250cm9sbGVkIHByb3BcbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sbGVkUHJvcChwcm9wcywga2V5KSB7XG4gIHJldHVybiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgJ2tleScgcHJvcGVydHkgb2YgYSBLZXlib2FyZEV2ZW50IGluIElFL0VkZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBhIGtleWJvYXJkRXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IGtleWJvYXJkIGtleVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBcnJvd0tleShldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5LFxuICAgIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAoaWUpICovXG4gIGlmIChrZXlDb2RlID49IDM3ICYmIGtleUNvZGUgPD0gNDAgJiYga2V5LmluZGV4T2YoJ0Fycm93JykgIT09IDApIHtcbiAgICByZXR1cm4gXCJBcnJvd1wiICsga2V5O1xuICB9XG4gIHJldHVybiBrZXk7XG59XG5cbi8qKlxuICogU2ltcGxlIGNoZWNrIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb2JqZWN0IGxpdGVyYWxcbiAqIEBwYXJhbSB7Kn0gb2JqIGFueSB0aGluZ3NcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHdoZXRoZXIgaXQncyBvYmplY3QgbGl0ZXJhbFxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5leHQgbm9uLWRpc2FibGVkIGhpZ2hsaWdodGVkSW5kZXggdmFsdWUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBjdXJyZW50IGhpZ2hsaWdodGVkSW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCBoaWdobGlnaHRlZEluZGV4IHRvIHN0YXJ0IHNlYXJjaGluZy5cbiAqIEBwYXJhbSB7dW5rbm93bltdfSBpdGVtcyBUaGUgaXRlbXMgYXJyYXkuXG4gKiBAcGFyYW0geyhpdGVtOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFufSBpc0l0ZW1EaXNhYmxlZCBGdW5jdGlvbiB0aGF0IHRlbGxzIGlmIGFuIGl0ZW0gaXMgZGlzYWJsZWQgb3Igbm90LlxuICogQHBhcmFtIHtib29sZWFuP30gY2lyY3VsYXIgSWYgdGhlIHNlYXJjaCByZWFjaGVzIHRoZSBlbmQsIGlmIGl0IGNhbiBzZWFyY2ggYWdhaW4gc3RhcnRpbmcgZnJvbSB0aGUgb3RoZXIgZW5kLlxuICogQHJldHVybnMge251bWJlcn0gVGhlIG5leHQgaGlnaGxpZ2h0ZWRJbmRleC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGFydCwgb2Zmc2V0LCBpdGVtcywgaXNJdGVtRGlzYWJsZWQsIGNpcmN1bGFyKSB7XG4gIGlmIChjaXJjdWxhciA9PT0gdm9pZCAwKSB7XG4gICAgY2lyY3VsYXIgPSBmYWxzZTtcbiAgfVxuICB2YXIgY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaXRlbXNMYXN0SW5kZXggPSBjb3VudCAtIDE7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInIHx8IHN0YXJ0IDwgMCB8fCBzdGFydCA+IGl0ZW1zTGFzdEluZGV4KSB7XG4gICAgc3RhcnQgPSBvZmZzZXQgPiAwID8gLTEgOiBpdGVtc0xhc3RJbmRleCArIDE7XG4gIH1cbiAgdmFyIGN1cnJlbnQgPSBzdGFydCArIG9mZnNldDtcbiAgaWYgKGN1cnJlbnQgPCAwKSB7XG4gICAgY3VycmVudCA9IGNpcmN1bGFyID8gaXRlbXNMYXN0SW5kZXggOiAwO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPiBpdGVtc0xhc3RJbmRleCkge1xuICAgIGN1cnJlbnQgPSBjaXJjdWxhciA/IDAgOiBpdGVtc0xhc3RJbmRleDtcbiAgfVxuICB2YXIgaGlnaGxpZ2h0ZWRJbmRleCA9IGdldE5vbkRpc2FibGVkSW5kZXgoY3VycmVudCwgb2Zmc2V0IDwgMCwgaXRlbXMsIGlzSXRlbURpc2FibGVkLCBjaXJjdWxhcik7XG4gIGlmIChoaWdobGlnaHRlZEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGFydCA+PSBjb3VudCA/IC0xIDogc3RhcnQ7XG4gIH1cbiAgcmV0dXJuIGhpZ2hsaWdodGVkSW5kZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmV4dCBub24tZGlzYWJsZWQgaGlnaGxpZ2h0ZWRJbmRleCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIGN1cnJlbnQgaGlnaGxpZ2h0ZWRJbmRleC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFja3dhcmRzIElmIHRydWUsIGl0IHdpbGwgc2VhcmNoIGJhY2t3YXJkcyBmcm9tIHRoZSBzdGFydC5cbiAqIEBwYXJhbSB7dW5rbm93bltdfSBpdGVtcyBUaGUgaXRlbXMgYXJyYXkuXG4gKiBAcGFyYW0geyhpdGVtOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFufSBpc0l0ZW1EaXNhYmxlZCBGdW5jdGlvbiB0aGF0IHRlbGxzIGlmIGFuIGl0ZW0gaXMgZGlzYWJsZWQgb3Igbm90LlxuICogQHBhcmFtIHtib29sZWFufSBjaXJjdWxhciBJZiB0aGUgc2VhcmNoIHJlYWNoZXMgdGhlIGVuZCwgaWYgaXQgY2FuIHNlYXJjaCBhZ2FpbiBzdGFydGluZyBmcm9tIHRoZSBvdGhlciBlbmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV4dCBub24tZGlzYWJsZWQgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGdldE5vbkRpc2FibGVkSW5kZXgoc3RhcnQsIGJhY2t3YXJkcywgaXRlbXMsIGlzSXRlbURpc2FibGVkLCBjaXJjdWxhcikge1xuICBpZiAoY2lyY3VsYXIgPT09IHZvaWQgMCkge1xuICAgIGNpcmN1bGFyID0gZmFsc2U7XG4gIH1cbiAgdmFyIGNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAoYmFja3dhcmRzKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSBzdGFydDsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgaWYgKCFpc0l0ZW1EaXNhYmxlZChpdGVtc1tpbmRleF0sIGluZGV4KSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0OyBfaW5kZXggPCBjb3VudDsgX2luZGV4KyspIHtcbiAgICAgIGlmICghaXNJdGVtRGlzYWJsZWQoaXRlbXNbX2luZGV4XSwgX2luZGV4KSkge1xuICAgICAgICByZXR1cm4gX2luZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2lyY3VsYXIpIHtcbiAgICByZXR1cm4gZ2V0Tm9uRGlzYWJsZWRJbmRleChiYWNrd2FyZHMgPyBjb3VudCAtIDEgOiAwLCBiYWNrd2FyZHMsIGl0ZW1zLCBpc0l0ZW1EaXNhYmxlZCk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBldmVudCB0YXJnZXQgaXMgd2l0aGluIHRoZSBkb3duc2hpZnQgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0IFRhcmdldCB0byBjaGVjay5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gZG93bnNoaWZ0RWxlbWVudHMgVGhlIGVsZW1lbnRzIHRoYXQgZm9ybSBkb3duc2hpZnQgKGxpc3QsIHRvZ2dsZSBidXR0b24gZXRjKS5cbiAqIEBwYXJhbSB7V2luZG93fSBlbnZpcm9ubWVudCBUaGUgd2luZG93IGNvbnRleHQgd2hlcmUgZG93bnNoaWZ0IHJlbmRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrQWN0aXZlRWxlbWVudCBXaGV0aGVyIHRvIGFsc28gY2hlY2sgYWN0aXZlRWxlbWVudC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHRhcmdldCBpcyB3aXRoaW4gZG93bnNoaWZ0IGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXJnZXRXaXRoaW5Eb3duc2hpZnQodGFyZ2V0LCBkb3duc2hpZnRFbGVtZW50cywgZW52aXJvbm1lbnQsIGNoZWNrQWN0aXZlRWxlbWVudCkge1xuICBpZiAoY2hlY2tBY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHtcbiAgICBjaGVja0FjdGl2ZUVsZW1lbnQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkb3duc2hpZnRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChjb250ZXh0Tm9kZSkge1xuICAgIHJldHVybiBjb250ZXh0Tm9kZSAmJiAoaXNPckNvbnRhaW5zTm9kZShjb250ZXh0Tm9kZSwgdGFyZ2V0LCBlbnZpcm9ubWVudCkgfHwgY2hlY2tBY3RpdmVFbGVtZW50ICYmIGlzT3JDb250YWluc05vZGUoY29udGV4dE5vZGUsIGVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIGVudmlyb25tZW50KSk7XG4gIH0pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlQ29udHJvbGxlZFVuY2hhbmdlZCA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkID0gZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkKHN0YXRlLCBwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICAgIHZhciB3YXJuaW5nRGVzY3JpcHRpb24gPSBcIlRoaXMgcHJvcCBzaG91bGQgbm90IHN3aXRjaCBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBEb3duc2hpZnQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXRodWIuY29tL2Rvd25zaGlmdC1qcy9kb3duc2hpZnQjY29udHJvbC1wcm9wc1wiO1xuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wS2V5KSB7XG4gICAgICBpZiAocHJldlByb3BzW3Byb3BLZXldICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzW3Byb3BLZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImRvd25zaGlmdDogQSBjb21wb25lbnQgaGFzIGNoYW5nZWQgdGhlIGNvbnRyb2xsZWQgcHJvcCBcXFwiXCIgKyBwcm9wS2V5ICsgXCJcXFwiIHRvIGJlIHVuY29udHJvbGxlZC4gXCIgKyB3YXJuaW5nRGVzY3JpcHRpb24pO1xuICAgICAgfSBlbHNlIGlmIChwcmV2UHJvcHNbcHJvcEtleV0gPT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHNbcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBBIGNvbXBvbmVudCBoYXMgY2hhbmdlZCB0aGUgdW5jb250cm9sbGVkIHByb3AgXFxcIlwiICsgcHJvcEtleSArIFwiXFxcIiB0byBiZSBjb250cm9sbGVkLiBcIiArIHdhcm5pbmdEZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbnZhciBjbGVhbnVwU3RhdHVzID0gZGVib3VuY2UoZnVuY3Rpb24gKGRvY3VtZW50UHJvcCkge1xuICBnZXRTdGF0dXNEaXYoZG9jdW1lbnRQcm9wKS50ZXh0Q29udGVudCA9ICcnO1xufSwgNTAwKTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RhdHVzIHRoZSBzdGF0dXMgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3R9IGRvY3VtZW50UHJvcCBkb2N1bWVudCBwYXNzZWQgYnkgdGhlIHVzZXIuXG4gKi9cbmZ1bmN0aW9uIHNldFN0YXR1cyhzdGF0dXMsIGRvY3VtZW50UHJvcCkge1xuICB2YXIgZGl2ID0gZ2V0U3RhdHVzRGl2KGRvY3VtZW50UHJvcCk7XG4gIGlmICghc3RhdHVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRpdi50ZXh0Q29udGVudCA9IHN0YXR1cztcbiAgY2xlYW51cFN0YXR1cyhkb2N1bWVudFByb3ApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RhdHVzIG5vZGUgb3IgY3JlYXRlIGl0IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gZG9jdW1lbnRQcm9wIGRvY3VtZW50IHBhc3NlZCBieSB0aGUgdXNlci5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSB0aGUgc3RhdHVzIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c0Rpdihkb2N1bWVudFByb3ApIHtcbiAgaWYgKGRvY3VtZW50UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgZG9jdW1lbnRQcm9wID0gZG9jdW1lbnQ7XG4gIH1cbiAgdmFyIHN0YXR1c0RpdiA9IGRvY3VtZW50UHJvcC5nZXRFbGVtZW50QnlJZCgnYTExeS1zdGF0dXMtbWVzc2FnZScpO1xuICBpZiAoc3RhdHVzRGl2KSB7XG4gICAgcmV0dXJuIHN0YXR1c0RpdjtcbiAgfVxuICBzdGF0dXNEaXYgPSBkb2N1bWVudFByb3AuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHN0YXR1c0Rpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2ExMXktc3RhdHVzLW1lc3NhZ2UnKTtcbiAgc3RhdHVzRGl2LnNldEF0dHJpYnV0ZSgncm9sZScsICdzdGF0dXMnKTtcbiAgc3RhdHVzRGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICBzdGF0dXNEaXYuc2V0QXR0cmlidXRlKCdhcmlhLXJlbGV2YW50JywgJ2FkZGl0aW9ucyB0ZXh0Jyk7XG4gIE9iamVjdC5hc3NpZ24oc3RhdHVzRGl2LnN0eWxlLCB7XG4gICAgYm9yZGVyOiAnMCcsXG4gICAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAgIGhlaWdodDogJzFweCcsXG4gICAgbWFyZ2luOiAnLTFweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB3aWR0aDogJzFweCdcbiAgfSk7XG4gIGRvY3VtZW50UHJvcC5ib2R5LmFwcGVuZENoaWxkKHN0YXR1c0Rpdik7XG4gIHJldHVybiBzdGF0dXNEaXY7XG59XG5cbnZhciB1bmtub3duID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX3Vua25vd25fXycgOiAwO1xudmFyIG1vdXNlVXAgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfbW91c2V1cF9fJyA6IDE7XG52YXIgaXRlbU1vdXNlRW50ZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfaXRlbV9tb3VzZWVudGVyX18nIDogMjtcbnZhciBrZXlEb3duQXJyb3dVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2Fycm93X3VwX18nIDogMztcbnZhciBrZXlEb3duQXJyb3dEb3duID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fYXJyb3dfZG93bl9fJyA6IDQ7XG52YXIga2V5RG93bkVzY2FwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2VzY2FwZV9fJyA6IDU7XG52YXIga2V5RG93bkVudGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fZW50ZXJfXycgOiA2O1xudmFyIGtleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25faG9tZV9fJyA6IDc7XG52YXIga2V5RG93bkVuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2VuZF9fJyA6IDg7XG52YXIgY2xpY2tJdGVtID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2NsaWNrX2l0ZW1fXycgOiA5O1xudmFyIGJsdXJJbnB1dCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9ibHVyX2lucHV0X18nIDogMTA7XG52YXIgY2hhbmdlSW5wdXQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfY2hhbmdlX2lucHV0X18nIDogMTE7XG52YXIga2V5RG93blNwYWNlQnV0dG9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fc3BhY2VfYnV0dG9uX18nIDogMTI7XG52YXIgY2xpY2tCdXR0b24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfY2xpY2tfYnV0dG9uX18nIDogMTM7XG52YXIgYmx1ckJ1dHRvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9ibHVyX2J1dHRvbl9fJyA6IDE0O1xudmFyIGNvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9jb250cm9sbGVkX3Byb3BfdXBkYXRlZF9zZWxlY3RlZF9pdGVtX18nIDogMTU7XG52YXIgdG91Y2hFbmQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfdG91Y2hlbmRfXycgOiAxNjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMkMyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICB1bmtub3duOiB1bmtub3duLFxuICBtb3VzZVVwOiBtb3VzZVVwLFxuICBpdGVtTW91c2VFbnRlcjogaXRlbU1vdXNlRW50ZXIsXG4gIGtleURvd25BcnJvd1VwOiBrZXlEb3duQXJyb3dVcCxcbiAga2V5RG93bkFycm93RG93bjoga2V5RG93bkFycm93RG93bixcbiAga2V5RG93bkVzY2FwZToga2V5RG93bkVzY2FwZSxcbiAga2V5RG93bkVudGVyOiBrZXlEb3duRW50ZXIsXG4gIGtleURvd25Ib21lOiBrZXlEb3duSG9tZSxcbiAga2V5RG93bkVuZDoga2V5RG93bkVuZCxcbiAgY2xpY2tJdGVtOiBjbGlja0l0ZW0sXG4gIGJsdXJJbnB1dDogYmx1cklucHV0LFxuICBjaGFuZ2VJbnB1dDogY2hhbmdlSW5wdXQsXG4gIGtleURvd25TcGFjZUJ1dHRvbjoga2V5RG93blNwYWNlQnV0dG9uLFxuICBjbGlja0J1dHRvbjogY2xpY2tCdXR0b24sXG4gIGJsdXJCdXR0b246IGJsdXJCdXR0b24sXG4gIGNvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbTogY29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtLFxuICB0b3VjaEVuZDogdG91Y2hFbmRcbn0pO1xuXG52YXIgX2V4Y2x1ZGVkJDQgPSBbXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMyA9IFtcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uQmx1clwiXSxcbiAgX2V4Y2x1ZGVkMyQyID0gW1wib25LZXlEb3duXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbklucHV0XCIsIFwib25DaGFuZ2VUZXh0XCJdLFxuICBfZXhjbHVkZWQ0JDEgPSBbXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDUgPSBbXCJvbk1vdXNlTW92ZVwiLCBcIm9uTW91c2VEb3duXCIsIFwib25DbGlja1wiLCBcIm9uUHJlc3NcIiwgXCJpbmRleFwiLCBcIml0ZW1cIl07XG52YXIgRG93bnNoaWZ0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIERvd25zaGlmdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKERvd25zaGlmdCwgX0NvbXBvbmVudCk7XG4gICAgZnVuY3Rpb24gRG93bnNoaWZ0KF9wcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgX3Byb3BzKSB8fCB0aGlzO1xuICAgICAgLy8gZmFuY3kgZGVzdHJ1Y3R1cmluZyArIGRlZmF1bHRzICsgYWxpYXNlc1xuICAgICAgLy8gdGhpcyBiYXNpY2FsbHkgc2F5cyBlYWNoIHZhbHVlIG9mIHN0YXRlIHNob3VsZCBlaXRoZXIgYmUgc2V0IHRvXG4gICAgICAvLyB0aGUgaW5pdGlhbCB2YWx1ZSBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBub3QgcHJvdmlkZWRcbiAgICAgIF90aGlzLmlkID0gX3RoaXMucHJvcHMuaWQgfHwgXCJkb3duc2hpZnQtXCIgKyBnZW5lcmF0ZUlkKCk7XG4gICAgICBfdGhpcy5tZW51SWQgPSBfdGhpcy5wcm9wcy5tZW51SWQgfHwgX3RoaXMuaWQgKyBcIi1tZW51XCI7XG4gICAgICBfdGhpcy5sYWJlbElkID0gX3RoaXMucHJvcHMubGFiZWxJZCB8fCBfdGhpcy5pZCArIFwiLWxhYmVsXCI7XG4gICAgICBfdGhpcy5pbnB1dElkID0gX3RoaXMucHJvcHMuaW5wdXRJZCB8fCBfdGhpcy5pZCArIFwiLWlucHV0XCI7XG4gICAgICBfdGhpcy5nZXRJdGVtSWQgPSBfdGhpcy5wcm9wcy5nZXRJdGVtSWQgfHwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pZCArIFwiLWl0ZW0tXCIgKyBpbmRleDtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dCA9IG51bGw7XG4gICAgICBfdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgLy8gaXRlbUNvdW50IGNhbiBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBmcm9tIHdpdGhpbiBkb3duc2hpZnQgKHNvIGl0IGNhbid0IGNvbWUgZnJvbSBhIHByb3ApXG4gICAgICAvLyB0aGlzIGlzIHdoeSB3ZSBzdG9yZSBpdCBhcyBhbiBpbnN0YW5jZSBhbmQgdXNlXG4gICAgICAvLyBnZXRJdGVtQ291bnQgcmF0aGVyIHRoYW4ganVzdCB1c2UgaXRlbXMubGVuZ3RoXG4gICAgICAvLyAodG8gc3VwcG9ydCB3aW5kb3dpbmcgKyBhc3luYylcbiAgICAgIF90aGlzLml0ZW1Db3VudCA9IG51bGw7XG4gICAgICBfdGhpcy5wcmV2aW91c1Jlc3VsdENvdW50ID0gMDtcbiAgICAgIF90aGlzLnRpbWVvdXRJZHMgPSBbXTtcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIHRpbWVcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIHRoZSB0aW1lIHRvIHdhaXRcbiAgICAgICAqL1xuICAgICAgX3RoaXMuaW50ZXJuYWxTZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCB0aW1lKSB7XG4gICAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLnRpbWVvdXRJZHMgPSBfdGhpcy50aW1lb3V0SWRzLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgIT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZuKCk7XG4gICAgICAgIH0sIHRpbWUpO1xuICAgICAgICBfdGhpcy50aW1lb3V0SWRzLnB1c2goaWQpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldEl0ZW1Db3VudCA9IGZ1bmN0aW9uIChjb3VudCkge1xuICAgICAgICBfdGhpcy5pdGVtQ291bnQgPSBjb3VudDtcbiAgICAgIH07XG4gICAgICBfdGhpcy51bnNldEl0ZW1Db3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuaXRlbUNvdW50ID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pc0l0ZW1EaXNhYmxlZCA9IGZ1bmN0aW9uIChfaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRFbGVtZW50Tm9kZSA9IF90aGlzLmdldEl0ZW1Ob2RlRnJvbUluZGV4KGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50Tm9kZSAmJiBjdXJyZW50RWxlbWVudE5vZGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldEhpZ2hsaWdodGVkSW5kZXggPSBmdW5jdGlvbiAoaGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KSB7XG4gICAgICAgIGlmIChoaWdobGlnaHRlZEluZGV4ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyU3RhdGVUb1NldCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgb3RoZXJTdGF0ZVRvU2V0ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJTdGF0ZVRvU2V0ID0gcGlja1N0YXRlKG90aGVyU3RhdGVUb1NldCk7XG4gICAgICAgIF90aGlzLmludGVybmFsU2V0U3RhdGUoX2V4dGVuZHMoe1xuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXhcbiAgICAgICAgfSwgb3RoZXJTdGF0ZVRvU2V0KSk7XG4gICAgICB9O1xuICAgICAgX3RoaXMuY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IF90aGlzLnByb3BzLmRlZmF1bHRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGlzT3BlbjogX3RoaXMucHJvcHMuZGVmYXVsdElzT3BlblxuICAgICAgICB9LCBjYik7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2VsZWN0SXRlbSA9IGZ1bmN0aW9uIChpdGVtLCBvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIG90aGVyU3RhdGVUb1NldCA9IHBpY2tTdGF0ZShvdGhlclN0YXRlVG9TZXQpO1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKF9leHRlbmRzKHtcbiAgICAgICAgICBpc09wZW46IF90aGlzLnByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtOiBpdGVtLFxuICAgICAgICAgIGlucHV0VmFsdWU6IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhpdGVtKVxuICAgICAgICB9LCBvdGhlclN0YXRlVG9TZXQpLCBjYik7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2VsZWN0SXRlbUF0SW5kZXggPSBmdW5jdGlvbiAoaXRlbUluZGV4LCBvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIHZhciBpdGVtID0gX3RoaXMuaXRlbXNbaXRlbUluZGV4XTtcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zZWxlY3RJdGVtKGl0ZW0sIG90aGVyU3RhdGVUb1NldCwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNlbGVjdEhpZ2hsaWdodGVkSXRlbSA9IGZ1bmN0aW9uIChvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5zZWxlY3RJdGVtQXRJbmRleChfdGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgsIG90aGVyU3RhdGVUb1NldCwgY2IpO1xuICAgICAgfTtcbiAgICAgIC8vIGFueSBwaWVjZSBvZiBvdXIgc3RhdGUgY2FuIGxpdmUgaW4gdHdvIHBsYWNlczpcbiAgICAgIC8vIDEuIFVuY29udHJvbGxlZDogaXQncyBpbnRlcm5hbCAodGhpcy5zdGF0ZSlcbiAgICAgIC8vICAgIFdlIHdpbGwgY2FsbCB0aGlzLnNldFN0YXRlIHRvIHVwZGF0ZSB0aGF0IHN0YXRlXG4gICAgICAvLyAyLiBDb250cm9sbGVkOiBpdCdzIGV4dGVybmFsICh0aGlzLnByb3BzKVxuICAgICAgLy8gICAgV2Ugd2lsbCBjYWxsIHRoaXMucHJvcHMub25TdGF0ZUNoYW5nZSB0byB1cGRhdGUgdGhhdCBzdGF0ZVxuICAgICAgLy9cbiAgICAgIC8vIEluIGFkZGl0aW9uLCB3ZSdsbCBjYWxsIHRoaXMucHJvcHMub25DaGFuZ2UgaWYgdGhlXG4gICAgICAvLyBzZWxlY3RlZEl0ZW0gaXMgY2hhbmdlZC5cbiAgICAgIF90aGlzLmludGVybmFsU2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGVUb1NldCwgY2IpIHtcbiAgICAgICAgdmFyIGlzSXRlbVNlbGVjdGVkLCBvbkNoYW5nZUFyZztcbiAgICAgICAgdmFyIG9uU3RhdGVDaGFuZ2VBcmcgPSB7fTtcbiAgICAgICAgdmFyIGlzU3RhdGVUb1NldEZ1bmN0aW9uID0gdHlwZW9mIHN0YXRlVG9TZXQgPT09ICdmdW5jdGlvbic7XG5cbiAgICAgICAgLy8gd2Ugd2FudCB0byBjYWxsIGBvbklucHV0VmFsdWVDaGFuZ2VgIGJlZm9yZSB0aGUgYHNldFN0YXRlYCBjYWxsXG4gICAgICAgIC8vIHNvIHNvbWVvbmUgY29udHJvbGxpbmcgdGhlIGBpbnB1dFZhbHVlYCBzdGF0ZSBnZXRzIG5vdGlmaWVkIG9mXG4gICAgICAgIC8vIHRoZSBpbnB1dCBjaGFuZ2UgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGhcbiAgICAgICAgLy8gcHJlc2VydmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Rvd25zaGlmdC1qcy9kb3duc2hpZnQvaXNzdWVzLzIxNyBmb3IgbW9yZSBpbmZvLlxuICAgICAgICBpZiAoIWlzU3RhdGVUb1NldEZ1bmN0aW9uICYmIHN0YXRlVG9TZXQuaGFzT3duUHJvcGVydHkoJ2lucHV0VmFsdWUnKSkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uSW5wdXRWYWx1ZUNoYW5nZShzdGF0ZVRvU2V0LmlucHV0VmFsdWUsIF9leHRlbmRzKHt9LCBfdGhpcy5nZXRTdGF0ZUFuZEhlbHBlcnMoKSwgc3RhdGVUb1NldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICBzdGF0ZSA9IF90aGlzLmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgICB2YXIgbmV3U3RhdGVUb1NldCA9IGlzU3RhdGVUb1NldEZ1bmN0aW9uID8gc3RhdGVUb1NldChzdGF0ZSkgOiBzdGF0ZVRvU2V0O1xuXG4gICAgICAgICAgLy8gWW91ciBvd24gZnVuY3Rpb24gdGhhdCBjb3VsZCBtb2RpZnkgdGhlIHN0YXRlIHRoYXQgd2lsbCBiZSBzZXQuXG4gICAgICAgICAgbmV3U3RhdGVUb1NldCA9IF90aGlzLnByb3BzLnN0YXRlUmVkdWNlcihzdGF0ZSwgbmV3U3RhdGVUb1NldCk7XG5cbiAgICAgICAgICAvLyBjaGVja3MgaWYgYW4gaXRlbSBpcyBzZWxlY3RlZCwgcmVnYXJkbGVzcyBvZiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tXG4gICAgICAgICAgLy8gd2hhdCB3YXMgc2VsZWN0ZWQgYmVmb3JlXG4gICAgICAgICAgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgb25TZWxlY3QgYW5kIG9uQ2hhbmdlIGNhbGxiYWNrcyBzaG91bGQgYmUgY2FsbGVkXG4gICAgICAgICAgaXNJdGVtU2VsZWN0ZWQgPSBuZXdTdGF0ZVRvU2V0Lmhhc093blByb3BlcnR5KCdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAvLyB0aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvYmplY3Qgd2Ugd2FudCB0byBjYWxsIHdpdGggc2V0U3RhdGVcbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0ge307XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBjYWxsIG9uIGNoYW5nZSBpZiB0aGUgb3V0c2lkZSB3b3JsZCBpcyBjb250cm9sbGluZyBhbnkgb2Ygb3VyIHN0YXRlXG4gICAgICAgICAgLy8gYW5kIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgdGhhdCBzdGF0ZS4gT1IgaWYgdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCBhbmQgd2UncmVcbiAgICAgICAgICAvLyB0cnlpbmcgdG8gdXBkYXRlIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICBpZiAoaXNJdGVtU2VsZWN0ZWQgJiYgbmV3U3RhdGVUb1NldC5zZWxlY3RlZEl0ZW0gIT09IHN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgb25DaGFuZ2VBcmcgPSBuZXdTdGF0ZVRvU2V0LnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3U3RhdGVUb1NldC50eXBlID0gbmV3U3RhdGVUb1NldC50eXBlIHx8IHVua25vd247XG4gICAgICAgICAgT2JqZWN0LmtleXMobmV3U3RhdGVUb1NldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAvLyBvblN0YXRlQ2hhbmdlQXJnIHNob3VsZCBvbmx5IGhhdmUgdGhlIHN0YXRlIHRoYXQgaXNcbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGNoYW5naW5nXG4gICAgICAgICAgICBpZiAoc3RhdGVba2V5XSAhPT0gbmV3U3RhdGVUb1NldFtrZXldKSB7XG4gICAgICAgICAgICAgIG9uU3RhdGVDaGFuZ2VBcmdba2V5XSA9IG5ld1N0YXRlVG9TZXRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoZSB0eXBlIGlzIHVzZWZ1bCBmb3IgdGhlIG9uU3RhdGVDaGFuZ2VBcmdcbiAgICAgICAgICAgIC8vIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHNldCBpdCBpbiBpbnRlcm5hbCBzdGF0ZS5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUgZm9yIG5vdy4uLiBOb3QgYWxsIGludGVybmFsU2V0U3RhdGVcbiAgICAgICAgICAgIC8vIGNhbGxzIHN1cHBvcnQgaXQgYW5kIEknbSBub3QgY2VydGFpbiB3ZSB3YW50IHRoZW0gdG8geWV0LlxuICAgICAgICAgICAgLy8gQnV0IGl0IGVuYWJsZXMgdXNlcnMgY29udHJvbGxpbmcgdGhlIGlzT3BlbiBzdGF0ZSB0byBrbm93IHdoZW5cbiAgICAgICAgICAgIC8vIHRoZSBpc09wZW4gc3RhdGUgY2hhbmdlcyBkdWUgdG8gbW91c2V1cCBldmVudHMgd2hpY2ggaXMgcXVpdGUgaGFuZHkuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAndHlwZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3U3RhdGVUb1NldFtrZXldO1xuICAgICAgICAgICAgLy8gaWYgaXQncyBjb21pbmcgZnJvbSBwcm9wcywgdGhlbiB3ZSBkb24ndCBjYXJlIHRvIHNldCBpdCBpbnRlcm5hbGx5XG4gICAgICAgICAgICBpZiAoIWlzQ29udHJvbGxlZFByb3AoX3RoaXMucHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgbmV4dFN0YXRlW2tleV0gPSBuZXdTdGF0ZVRvU2V0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBpZiBzdGF0ZVRvU2V0IGlzIGEgZnVuY3Rpb24sIHRoZW4gd2Ugd2VyZW4ndCBhYmxlIHRvIGNhbGwgb25JbnB1dFZhbHVlQ2hhbmdlXG4gICAgICAgICAgLy8gZWFybGllciwgc28gd2UnbGwgY2FsbCBpdCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGlucHV0VmFsdWUgc3RhdGUgd2lsbCBiZS5cbiAgICAgICAgICBpZiAoaXNTdGF0ZVRvU2V0RnVuY3Rpb24gJiYgbmV3U3RhdGVUb1NldC5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRWYWx1ZScpKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbklucHV0VmFsdWVDaGFuZ2UobmV3U3RhdGVUb1NldC5pbnB1dFZhbHVlLCBfZXh0ZW5kcyh7fSwgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCksIG5ld1N0YXRlVG9TZXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGNhbGwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGlmIGl0J3MgYSBmdW5jdGlvblxuICAgICAgICAgIGNiVG9DYihjYikoKTtcblxuICAgICAgICAgIC8vIG9ubHkgY2FsbCB0aGUgb25TdGF0ZUNoYW5nZSBhbmQgb25DaGFuZ2UgY2FsbGJhY2tzIGlmXG4gICAgICAgICAgLy8gd2UgaGF2ZSByZWxldmFudCBpbmZvcm1hdGlvbiB0byBwYXNzIHRoZW0uXG4gICAgICAgICAgdmFyIGhhc01vcmVTdGF0ZVRoYW5UeXBlID0gT2JqZWN0LmtleXMob25TdGF0ZUNoYW5nZUFyZykubGVuZ3RoID4gMTtcbiAgICAgICAgICBpZiAoaGFzTW9yZVN0YXRlVGhhblR5cGUpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uU3RhdGVDaGFuZ2Uob25TdGF0ZUNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uU2VsZWN0KHN0YXRlVG9TZXQuc2VsZWN0ZWRJdGVtLCBfdGhpcy5nZXRTdGF0ZUFuZEhlbHBlcnMoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNoYW5nZUFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNoYW5nZShvbkNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYW5kIHRoZXJlZm9yZSBzdWJqZWN0IHRvIGNoYW5nZVxuICAgICAgICAgIC8vIFdlJ2xsIHRyeSB0byBub3QgYnJlYWsgaXQsIGJ1dCBqdXN0IGJlIHdhcm5lZC5cbiAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZXJBY3Rpb24ob25TdGF0ZUNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFJPT1RcbiAgICAgIF90aGlzLnJvb3RSZWYgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuX3Jvb3ROb2RlID0gbm9kZTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5nZXRSb290UHJvcHMgPSBmdW5jdGlvbiAoX3RlbXAsIF90ZW1wMikge1xuICAgICAgICB2YXIgX2V4dGVuZHMyO1xuICAgICAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgICAgIF9yZWYkcmVmS2V5ID0gX3JlZi5yZWZLZXksXG4gICAgICAgICAgcmVmS2V5ID0gX3JlZiRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZiRyZWZLZXksXG4gICAgICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCQ0KTtcbiAgICAgICAgdmFyIF9yZWYyID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMixcbiAgICAgICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgICAgIHN1cHByZXNzUmVmRXJyb3IgPSBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkc3VwcHJlc3NSZWZFcnJvO1xuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgaW4gdGhlIHJlbmRlciB0byBrbm93IHdoZXRoZXIgdGhlIHVzZXIgaGFzIGNhbGxlZCBnZXRSb290UHJvcHMuXG4gICAgICAgIC8vIEl0IHVzZXMgdGhhdCB0byBrbm93IHdoZXRoZXIgdG8gYXBwbHkgdGhlIHByb3BzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgX3RoaXMuZ2V0Um9vdFByb3BzLmNhbGxlZCA9IHRydWU7XG4gICAgICAgIF90aGlzLmdldFJvb3RQcm9wcy5yZWZLZXkgPSByZWZLZXk7XG4gICAgICAgIF90aGlzLmdldFJvb3RQcm9wcy5zdXBwcmVzc1JlZkVycm9yID0gc3VwcHJlc3NSZWZFcnJvcjtcbiAgICAgICAgdmFyIF90aGlzJGdldFN0YXRlID0gX3RoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZS5pc09wZW47XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIF90aGlzLnJvb3RSZWYpLCBfZXh0ZW5kczIucm9sZSA9ICdjb21ib2JveCcsIF9leHRlbmRzMlsnYXJpYS1leHBhbmRlZCddID0gaXNPcGVuLCBfZXh0ZW5kczJbJ2FyaWEtaGFzcG9wdXAnXSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLW93bnMnXSA9IGlzT3BlbiA/IF90aGlzLm1lbnVJZCA6IHVuZGVmaW5lZCwgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IF90aGlzLmxhYmVsSWQsIF9leHRlbmRzMiksIHJlc3QpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBST09UXG4gICAgICBfdGhpcy5rZXlEb3duSGFuZGxlcnMgPSB7XG4gICAgICAgIEFycm93RG93bjogZnVuY3Rpb24gQXJyb3dEb3duKGV2ZW50KSB7XG4gICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAodGhpcy5nZXRTdGF0ZSgpLmlzT3Blbikge1xuICAgICAgICAgICAgdmFyIGFtb3VudCA9IGV2ZW50LnNoaWZ0S2V5ID8gNSA6IDE7XG4gICAgICAgICAgICB0aGlzLm1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwge1xuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtQ291bnQgPSBfdGhpczIuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90aGlzMiRnZXRTdGF0ZSA9IF90aGlzMi5nZXRTdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzMiRnZXRTdGF0ZS5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgICAgICAgIHZhciBuZXh0SGlnaGxpZ2h0ZWRJbmRleCA9IGdldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgMSwge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgICAgICAgICB9LCBfdGhpczIuaXNJdGVtRGlzYWJsZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIF90aGlzMi5zZXRIaWdobGlnaHRlZEluZGV4KG5leHRIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQXJyb3dVcDogZnVuY3Rpb24gQXJyb3dVcChldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0U3RhdGUoKS5pc09wZW4pIHtcbiAgICAgICAgICAgIHZhciBhbW91bnQgPSBldmVudC5zaGlmdEtleSA/IC01IDogLTE7XG4gICAgICAgICAgICB0aGlzLm1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwge1xuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dVcFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgdHlwZToga2V5RG93bkFycm93VXBcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IF90aGlzMy5nZXRJdGVtQ291bnQoKTtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMzJGdldFN0YXRlID0gX3RoaXMzLmdldFN0YXRlKCksXG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMzJGdldFN0YXRlLmhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRIaWdobGlnaHRlZEluZGV4ID0gZ2V0SGlnaGxpZ2h0ZWRJbmRleChoaWdobGlnaHRlZEluZGV4LCAtMSwge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgICAgICAgICB9LCBfdGhpczMuaXNJdGVtRGlzYWJsZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIF90aGlzMy5zZXRIaWdobGlnaHRlZEluZGV4KG5leHRIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dVcFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEVudGVyOiBmdW5jdGlvbiBFbnRlcihldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gMjI5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTIgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTIuaXNPcGVuLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzJGdldFN0YXRlMi5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgIGlmIChpc09wZW4gJiYgaGlnaGxpZ2h0ZWRJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2hpZ2hsaWdodGVkSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGl0ZW1Ob2RlID0gdGhpcy5nZXRJdGVtTm9kZUZyb21JbmRleChoaWdobGlnaHRlZEluZGV4KTtcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbU5vZGUgJiYgaXRlbU5vZGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKHtcbiAgICAgICAgICAgICAgdHlwZToga2V5RG93bkVudGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEVzY2FwZTogZnVuY3Rpb24gRXNjYXBlKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0KF9leHRlbmRzKHtcbiAgICAgICAgICAgIHR5cGU6IGtleURvd25Fc2NhcGVcbiAgICAgICAgICB9LCAhdGhpcy5zdGF0ZS5pc09wZW4gJiYge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEJVVFRPTlxuICAgICAgX3RoaXMuYnV0dG9uS2V5RG93bkhhbmRsZXJzID0gX2V4dGVuZHMoe30sIF90aGlzLmtleURvd25IYW5kbGVycywge1xuICAgICAgICAnICc6IGZ1bmN0aW9uIF8oZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlTWVudSh7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duU3BhY2VCdXR0b25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5pbnB1dEtleURvd25IYW5kbGVycyA9IF9leHRlbmRzKHt9LCBfdGhpcy5rZXlEb3duSGFuZGxlcnMsIHtcbiAgICAgICAgSG9tZTogZnVuY3Rpb24gSG9tZShldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTMgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTMuaXNPcGVuO1xuICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgaWYgKGl0ZW1Db3VudCA8PSAwIHx8ICFpc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBnZXQgbmV4dCBub24tZGlzYWJsZWQgc3RhcnRpbmcgZG93bndhcmRzIGZyb20gMCBpZiB0aGF0J3MgZGlzYWJsZWQuXG4gICAgICAgICAgdmFyIG5ld0hpZ2hsaWdodGVkSW5kZXggPSBnZXROb25EaXNhYmxlZEluZGV4KDAsIGZhbHNlLCB7XG4gICAgICAgICAgICBsZW5ndGg6IGl0ZW1Db3VudFxuICAgICAgICAgIH0sIHRoaXMuaXNJdGVtRGlzYWJsZWQpO1xuICAgICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXdIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duSG9tZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBFbmQ6IGZ1bmN0aW9uIEVuZChldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTQgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTQuaXNPcGVuO1xuICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgaWYgKGl0ZW1Db3VudCA8PSAwIHx8ICFpc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBnZXQgbmV4dCBub24tZGlzYWJsZWQgc3RhcnRpbmcgdXB3YXJkcyBmcm9tIGxhc3QgaW5kZXggaWYgdGhhdCdzIGRpc2FibGVkLlxuICAgICAgICAgIHZhciBuZXdIaWdobGlnaHRlZEluZGV4ID0gZ2V0Tm9uRGlzYWJsZWRJbmRleChpdGVtQ291bnQgLSAxLCB0cnVlLCB7XG4gICAgICAgICAgICBsZW5ndGg6IGl0ZW1Db3VudFxuICAgICAgICAgIH0sIHRoaXMuaXNJdGVtRGlzYWJsZWQpO1xuICAgICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXdIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duRW5kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgX3RoaXMuZ2V0VG9nZ2xlQnV0dG9uUHJvcHMgPSBmdW5jdGlvbiAoX3RlbXAzKSB7XG4gICAgICAgIHZhciBfcmVmMyA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2s7XG4gICAgICAgICAgX3JlZjMub25QcmVzcztcbiAgICAgICAgICB2YXIgb25LZXlEb3duID0gX3JlZjMub25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXAgPSBfcmVmMy5vbktleVVwLFxuICAgICAgICAgIG9uQmx1ciA9IF9yZWYzLm9uQmx1cixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZDIkMyk7XG4gICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTUgPSBfdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIGlzT3BlbiA9IF90aGlzJGdldFN0YXRlNS5pc09wZW47XG4gICAgICAgIHZhciBlbmFibGVkRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICBvbkNsaWNrOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBfdGhpcy5idXR0b25IYW5kbGVDbGljayksXG4gICAgICAgICAgb25LZXlEb3duOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbktleURvd24sIF90aGlzLmJ1dHRvbkhhbmRsZUtleURvd24pLFxuICAgICAgICAgIG9uS2V5VXA6IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uS2V5VXAsIF90aGlzLmJ1dHRvbkhhbmRsZUtleVVwKSxcbiAgICAgICAgICBvbkJsdXI6IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uQmx1ciwgX3RoaXMuYnV0dG9uSGFuZGxlQmx1cilcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGV2ZW50SGFuZGxlcnMgPSByZXN0LmRpc2FibGVkID8ge30gOiBlbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICByb2xlOiAnYnV0dG9uJyxcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IGlzT3BlbiA/ICdjbG9zZSBtZW51JyA6ICdvcGVuIG1lbnUnLFxuICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogdHJ1ZSxcbiAgICAgICAgICAnZGF0YS10b2dnbGUnOiB0cnVlXG4gICAgICAgIH0sIGV2ZW50SGFuZGxlcnMsIHJlc3QpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmJ1dHRvbkhhbmRsZUtleVVwID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIC8vIFByZXZlbnQgY2xpY2sgZXZlbnQgZnJvbSBlbWl0dGluZyBpbiBGaXJlZm94XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9O1xuICAgICAgX3RoaXMuYnV0dG9uSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIga2V5ID0gbm9ybWFsaXplQXJyb3dLZXkoZXZlbnQpO1xuICAgICAgICBpZiAoX3RoaXMuYnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0pIHtcbiAgICAgICAgICBfdGhpcy5idXR0b25LZXlEb3duSGFuZGxlcnNba2V5XS5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5idXR0b25IYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBoYW5kbGUgb2RkIGNhc2UgZm9yIFNhZmFyaSBhbmQgRmlyZWZveCB3aGljaFxuICAgICAgICAvLyBkb24ndCBnaXZlIHRoZSBidXR0b24gdGhlIGZvY3VzIHByb3Blcmx5LlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKGNhbid0IHJlYXNvbmFibHkgdGVzdCB0aGlzKSAqL1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvIHNpbXBsaWZ5IHRlc3RpbmcgY29tcG9uZW50cyB0aGF0IHVzZSBkb3duc2hpZnQsIHdlJ2xsIG5vdCB3cmFwIHRoaXMgaW4gYSBzZXRUaW1lb3V0XG4gICAgICAgIC8vIGlmIHRoZSBOT0RFX0VOViBpcyB0ZXN0LiBXaXRoIHRoZSBwcm9wZXIgYnVpbGQgc3lzdGVtLCB0aGlzIHNob3VsZCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZFxuICAgICAgICAvLyB3aGVuIGJ1aWxkaW5nIGZvciBwcm9kdWN0aW9uIGFuZCBzaG91bGQgdGhlcmVmb3JlIGhhdmUgbm8gaW1wYWN0IG9uIHByb2R1Y3Rpb24gY29kZS5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgICAgICBfdGhpcy50b2dnbGVNZW51KHtcbiAgICAgICAgICAgIHR5cGU6IGNsaWNrQnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdG9nZ2xlIG9mIG1lbnUgb2NjdXJzIGFmdGVyIHRoZSBwb3RlbnRpYWwgYmx1ciBldmVudCBpbiBpT1NcbiAgICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvZ2dsZU1lbnUoe1xuICAgICAgICAgICAgICB0eXBlOiBjbGlja0J1dHRvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5idXR0b25IYW5kbGVCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBibHVyVGFyZ2V0ID0gZXZlbnQudGFyZ2V0OyAvLyBTYXZlIGJsdXIgdGFyZ2V0IGZvciBjb21wYXJpc29uIHdpdGggYWN0aXZlRWxlbWVudCBsYXRlclxuICAgICAgICAvLyBOZWVkIHNldFRpbWVvdXQsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIFRhYiwgdGhlIGFjdGl2ZUVsZW1lbnQgaXMgdGhlIG5leHQgZm9jdXNlZCBlbGVtZW50LCBub3QgYm9keSBlbGVtZW50XG4gICAgICAgIF90aGlzLmludGVybmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5pc01vdXNlRG93biAmJiAoX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8IF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgIT09IF90aGlzLmlucHV0SWQpICYmIF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGJsdXJUYXJnZXQgLy8gRG8gbm90aGluZyBpZiB3ZSByZWZvY3VzIHRoZSBzYW1lIGVsZW1lbnQgYWdhaW4gKHRvIHNvbHZlIGlzc3VlIGluIFNhZmFyaSBvbiBpT1MpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBfdGhpcy5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IGJsdXJCdXR0b25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgLy9cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIEJVVFRPTlxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBMQUJFTFxuICAgICAgX3RoaXMuZ2V0TGFiZWxQcm9wcyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICAgIGh0bWxGb3I6IF90aGlzLmlucHV0SWQsXG4gICAgICAgICAgaWQ6IF90aGlzLmxhYmVsSWRcbiAgICAgICAgfSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBMQUJFTFxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBJTlBVVFxuICAgICAgX3RoaXMuZ2V0SW5wdXRQcm9wcyA9IGZ1bmN0aW9uIChfdGVtcDQpIHtcbiAgICAgICAgdmFyIF9yZWY0ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgICAgICBvbktleURvd24gPSBfcmVmNC5vbktleURvd24sXG4gICAgICAgICAgb25CbHVyID0gX3JlZjQub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3JlZjQub25DaGFuZ2UsXG4gICAgICAgICAgb25JbnB1dCA9IF9yZWY0Lm9uSW5wdXQ7XG4gICAgICAgICAgX3JlZjQub25DaGFuZ2VUZXh0O1xuICAgICAgICAgIHZhciByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZDMkMik7XG4gICAgICAgIHZhciBvbkNoYW5nZUtleTtcbiAgICAgICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB7fTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL1xuICAgICAgICB7XG4gICAgICAgICAgb25DaGFuZ2VLZXkgPSAnb25DaGFuZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTYgPSBfdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRnZXRTdGF0ZTYuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTYuaXNPcGVuLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRnZXRTdGF0ZTYuaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgICAgaWYgKCFyZXN0LmRpc2FibGVkKSB7XG4gICAgICAgICAgdmFyIF9ldmVudEhhbmRsZXJzO1xuICAgICAgICAgIGV2ZW50SGFuZGxlcnMgPSAoX2V2ZW50SGFuZGxlcnMgPSB7fSwgX2V2ZW50SGFuZGxlcnNbb25DaGFuZ2VLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DaGFuZ2UsIG9uSW5wdXQsIF90aGlzLmlucHV0SGFuZGxlQ2hhbmdlKSwgX2V2ZW50SGFuZGxlcnMub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBfdGhpcy5pbnB1dEhhbmRsZUtleURvd24pLCBfZXZlbnRIYW5kbGVycy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIF90aGlzLmlucHV0SGFuZGxlQmx1ciksIF9ldmVudEhhbmRsZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogaXNPcGVuICYmIHR5cGVvZiBoaWdobGlnaHRlZEluZGV4ID09PSAnbnVtYmVyJyAmJiBoaWdobGlnaHRlZEluZGV4ID49IDAgPyBfdGhpcy5nZXRJdGVtSWQoaGlnaGxpZ2h0ZWRJbmRleCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpc09wZW4gPyBfdGhpcy5tZW51SWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogX3RoaXMubGFiZWxJZCxcbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmluZ195b3VyX3NpdGUvVHVybmluZ19vZmZfZm9ybV9hdXRvY29tcGxldGlvblxuICAgICAgICAgIC8vIHJldmVydCBiYWNrIHNpbmNlIGF1dG9jb21wbGV0ZT1cIm5vcGVcIiBpcyBpZ25vcmVkIG9uIGxhdGVzdCBDaHJvbWUgYW5kIE9wZXJhXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpZDogX3RoaXMuaW5wdXRJZFxuICAgICAgICB9LCBldmVudEhhbmRsZXJzLCByZXN0KTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dEhhbmRsZUtleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgICAgaWYgKGtleSAmJiBfdGhpcy5pbnB1dEtleURvd25IYW5kbGVyc1trZXldKSB7XG4gICAgICAgICAgX3RoaXMuaW5wdXRLZXlEb3duSGFuZGxlcnNba2V5XS5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dEhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBjaGFuZ2VJbnB1dCxcbiAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgaW5wdXRWYWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IF90aGlzLnByb3BzLmRlZmF1bHRIaWdobGlnaHRlZEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmlucHV0SGFuZGxlQmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTmVlZCBzZXRUaW1lb3V0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBUYWIsIHRoZSBhY3RpdmVFbGVtZW50IGlzIHRoZSBuZXh0IGZvY3VzZWQgZWxlbWVudCwgbm90IHRoZSBib2R5IGVsZW1lbnRcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZG93bnNoaWZ0QnV0dG9uSXNBY3RpdmUgPSBfdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudCAmJiAhIV90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgISFfdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmRhdGFzZXQgJiYgX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5kYXRhc2V0LnRvZ2dsZSAmJiBfdGhpcy5fcm9vdE5vZGUgJiYgX3RoaXMuX3Jvb3ROb2RlLmNvbnRhaW5zKF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIGlmICghX3RoaXMuaXNNb3VzZURvd24gJiYgIWRvd25zaGlmdEJ1dHRvbklzQWN0aXZlKSB7XG4gICAgICAgICAgICBfdGhpcy5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IGJsdXJJbnB1dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICAvL1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwgSU5QVVRcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTUVOVVxuICAgICAgX3RoaXMubWVudVJlZiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIF90aGlzLl9tZW51Tm9kZSA9IG5vZGU7XG4gICAgICB9O1xuICAgICAgX3RoaXMuZ2V0TWVudVByb3BzID0gZnVuY3Rpb24gKF90ZW1wNSwgX3RlbXA2KSB7XG4gICAgICAgIHZhciBfZXh0ZW5kczM7XG4gICAgICAgIHZhciBfcmVmNSA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsXG4gICAgICAgICAgX3JlZjUkcmVmS2V5ID0gX3JlZjUucmVmS2V5LFxuICAgICAgICAgIHJlZktleSA9IF9yZWY1JHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmNSRyZWZLZXksXG4gICAgICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjUsIF9leGNsdWRlZDQkMSk7XG4gICAgICAgIHZhciBfcmVmNiA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsXG4gICAgICAgICAgX3JlZjYkc3VwcHJlc3NSZWZFcnJvID0gX3JlZjYuc3VwcHJlc3NSZWZFcnJvcixcbiAgICAgICAgICBzdXBwcmVzc1JlZkVycm9yID0gX3JlZjYkc3VwcHJlc3NSZWZFcnJvID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JHN1cHByZXNzUmVmRXJybztcbiAgICAgICAgX3RoaXMuZ2V0TWVudVByb3BzLmNhbGxlZCA9IHRydWU7XG4gICAgICAgIF90aGlzLmdldE1lbnVQcm9wcy5yZWZLZXkgPSByZWZLZXk7XG4gICAgICAgIF90aGlzLmdldE1lbnVQcm9wcy5zdXBwcmVzc1JlZkVycm9yID0gc3VwcHJlc3NSZWZFcnJvcjtcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKChfZXh0ZW5kczMgPSB7fSwgX2V4dGVuZHMzW3JlZktleV0gPSBoYW5kbGVSZWZzKHJlZiwgX3RoaXMubWVudVJlZiksIF9leHRlbmRzMy5yb2xlID0gJ2xpc3Rib3gnLCBfZXh0ZW5kczNbJ2FyaWEtbGFiZWxsZWRieSddID0gcHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSA/IHVuZGVmaW5lZCA6IF90aGlzLmxhYmVsSWQsIF9leHRlbmRzMy5pZCA9IF90aGlzLm1lbnVJZCwgX2V4dGVuZHMzKSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBNRU5VXG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIElURU1cbiAgICAgIF90aGlzLmdldEl0ZW1Qcm9wcyA9IGZ1bmN0aW9uIChfdGVtcDcpIHtcbiAgICAgICAgdmFyIF9lbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgdmFyIF9yZWY3ID0gX3RlbXA3ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNyxcbiAgICAgICAgICBvbk1vdXNlTW92ZSA9IF9yZWY3Lm9uTW91c2VNb3ZlLFxuICAgICAgICAgIG9uTW91c2VEb3duID0gX3JlZjcub25Nb3VzZURvd24sXG4gICAgICAgICAgb25DbGljayA9IF9yZWY3Lm9uQ2xpY2s7XG4gICAgICAgICAgX3JlZjcub25QcmVzcztcbiAgICAgICAgICB2YXIgaW5kZXggPSBfcmVmNy5pbmRleCxcbiAgICAgICAgICBfcmVmNyRpdGVtID0gX3JlZjcuaXRlbSxcbiAgICAgICAgICBpdGVtID0gX3JlZjckaXRlbSA9PT0gdm9pZCAwID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovdW5kZWZpbmVkIDogcmVxdWlyZWRQcm9wKCdnZXRJdGVtUHJvcHMnLCAnaXRlbScpIDogX3JlZjckaXRlbSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjcsIF9leGNsdWRlZDUpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIF90aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgaW5kZXggPSBfdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLml0ZW1zW2luZGV4XSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9uU2VsZWN0S2V5ID0gJ29uQ2xpY2snO1xuICAgICAgICB2YXIgY3VzdG9tQ2xpY2tIYW5kbGVyID0gb25DbGljaztcbiAgICAgICAgdmFyIGVuYWJsZWRFdmVudEhhbmRsZXJzID0gKF9lbmFibGVkRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICAvLyBvbk1vdXNlTW92ZSBpcyB1c2VkIG92ZXIgb25Nb3VzZUVudGVyIGhlcmUuIG9uTW91c2VNb3ZlXG4gICAgICAgICAgLy8gaXMgb25seSB0cmlnZ2VyZWQgb24gYWN0dWFsIG1vdXNlIG1vdmVtZW50IHdoaWxlIG9uTW91c2VFbnRlclxuICAgICAgICAgIC8vIGNhbiBmaXJlIG9uIERPTSBjaGFuZ2VzLCBpbnRlcnJ1cHRpbmcga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICAgIG9uTW91c2VNb3ZlOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBfdGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChpbmRleCwge1xuICAgICAgICAgICAgICB0eXBlOiBpdGVtTW91c2VFbnRlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFdlIG5ldmVyIHdhbnQgdG8gbWFudWFsbHkgc2Nyb2xsIHdoZW4gY2hhbmdpbmcgc3RhdGUgYmFzZWRcbiAgICAgICAgICAgIC8vIG9uIGBvbk1vdXNlTW92ZWAgYmVjYXVzZSB3ZSB3aWxsIGJlIG1vdmluZyB0aGUgZWxlbWVudCBvdXRcbiAgICAgICAgICAgIC8vIGZyb20gdW5kZXIgdGhlIHVzZXIgd2hpY2ggaXMgY3VycmVudGx5IHNjcm9sbGluZy9tb3ZpbmcgdGhlXG4gICAgICAgICAgICAvLyBjdXJzb3JcbiAgICAgICAgICAgIF90aGlzLmF2b2lkU2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIF90aGlzLmludGVybmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpcy5hdm9pZFNjcm9sbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvbk1vdXNlRG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25Nb3VzZURvd24sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgYWN0aXZlRWxlbWVudCBmcm9tIGJlaW5nIGNoYW5nZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBpdGVtIHNvIGl0IGNhbiByZW1haW4gd2l0aCB0aGUgY3VycmVudCBhY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhIG1vcmUgY29tbW9uIHVzZSBjYXNlLlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9LCBfZW5hYmxlZEV2ZW50SGFuZGxlcnNbb25TZWxlY3RLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMoY3VzdG9tQ2xpY2tIYW5kbGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuc2VsZWN0SXRlbUF0SW5kZXgoaW5kZXgsIHtcbiAgICAgICAgICAgIHR5cGU6IGNsaWNrSXRlbVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSwgX2VuYWJsZWRFdmVudEhhbmRsZXJzKTtcblxuICAgICAgICAvLyBQYXNzaW5nIGRvd24gdGhlIG9uTW91c2VEb3duIGhhbmRsZXIgdG8gcHJldmVudCByZWRpcmVjdFxuICAgICAgICAvLyBvZiB0aGUgYWN0aXZlRWxlbWVudCBpZiBjbGlja2luZyBvbiBkaXNhYmxlZCBpdGVtc1xuICAgICAgICB2YXIgZXZlbnRIYW5kbGVycyA9IHJlc3QuZGlzYWJsZWQgPyB7XG4gICAgICAgICAgb25Nb3VzZURvd246IGVuYWJsZWRFdmVudEhhbmRsZXJzLm9uTW91c2VEb3duXG4gICAgICAgIH0gOiBlbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogX3RoaXMuZ2V0SXRlbUlkKGluZGV4KSxcbiAgICAgICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IF90aGlzLmdldFN0YXRlKCkuaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaW5kZXhcbiAgICAgICAgfSwgZXZlbnRIYW5kbGVycywgcmVzdCk7XG4gICAgICB9O1xuICAgICAgLy9cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIElURU1cbiAgICAgIF90aGlzLmNsZWFySXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLml0ZW1zID0gW107XG4gICAgICB9O1xuICAgICAgX3RoaXMucmVzZXQgPSBmdW5jdGlvbiAob3RoZXJTdGF0ZVRvU2V0LCBjYikge1xuICAgICAgICBpZiAob3RoZXJTdGF0ZVRvU2V0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSBwaWNrU3RhdGUob3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtID0gX3JlZjguc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBpc09wZW46IF90aGlzLnByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfdGhpcy5wcm9wcy5kZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgICAgIGlucHV0VmFsdWU6IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhzZWxlY3RlZEl0ZW0pXG4gICAgICAgICAgfSwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgfSwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnRvZ2dsZU1lbnUgPSBmdW5jdGlvbiAob3RoZXJTdGF0ZVRvU2V0LCBjYikge1xuICAgICAgICBpZiAob3RoZXJTdGF0ZVRvU2V0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSBwaWNrU3RhdGUob3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgICAgICB2YXIgaXNPcGVuID0gX3JlZjkuaXNPcGVuO1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBpc09wZW46ICFpc09wZW5cbiAgICAgICAgICB9LCBpc09wZW4gJiYge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXhcbiAgICAgICAgICB9LCBvdGhlclN0YXRlVG9TZXQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGdldFN0YXRlNyA9IF90aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTcuaXNPcGVuLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzJGdldFN0YXRlNy5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5nZXRJdGVtQ291bnQoKSA+IDAgJiYgdHlwZW9mIGhpZ2hsaWdodGVkSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIF90aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2JUb0NiKGNiKSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5vcGVuTWVudSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgfSwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmNsb3NlTWVudSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW46IGZhbHNlXG4gICAgICAgIH0sIGNiKTtcbiAgICAgIH07XG4gICAgICBfdGhpcy51cGRhdGVTdGF0dXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IF90aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIHZhciBpdGVtID0gX3RoaXMuaXRlbXNbc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleF07XG4gICAgICAgIHZhciByZXN1bHRDb3VudCA9IF90aGlzLmdldEl0ZW1Db3VudCgpO1xuICAgICAgICB2YXIgc3RhdHVzID0gX3RoaXMucHJvcHMuZ2V0QTExeVN0YXR1c01lc3NhZ2UoX2V4dGVuZHMoe1xuICAgICAgICAgIGl0ZW1Ub1N0cmluZzogX3RoaXMucHJvcHMuaXRlbVRvU3RyaW5nLFxuICAgICAgICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IF90aGlzLnByZXZpb3VzUmVzdWx0Q291bnQsXG4gICAgICAgICAgcmVzdWx0Q291bnQ6IHJlc3VsdENvdW50LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbTogaXRlbVxuICAgICAgICB9LCBzdGF0ZSkpO1xuICAgICAgICBfdGhpcy5wcmV2aW91c1Jlc3VsdENvdW50ID0gcmVzdWx0Q291bnQ7XG4gICAgICAgIHNldFN0YXR1cyhzdGF0dXMsIF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRwcm9wcy5kZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgX3RoaXMkcHJvcHMkaW5pdGlhbEhpID0gX3RoaXMkcHJvcHMuaW5pdGlhbEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIF9oaWdobGlnaHRlZEluZGV4ID0gX3RoaXMkcHJvcHMkaW5pdGlhbEhpID09PSB2b2lkIDAgPyBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCA6IF90aGlzJHByb3BzJGluaXRpYWxIaSxcbiAgICAgICAgZGVmYXVsdElzT3BlbiA9IF90aGlzJHByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxJcyA9IF90aGlzJHByb3BzLmluaXRpYWxJc09wZW4sXG4gICAgICAgIF9pc09wZW4gPSBfdGhpcyRwcm9wcyRpbml0aWFsSXMgPT09IHZvaWQgMCA/IGRlZmF1bHRJc09wZW4gOiBfdGhpcyRwcm9wcyRpbml0aWFsSXMsXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxJbiA9IF90aGlzJHByb3BzLmluaXRpYWxJbnB1dFZhbHVlLFxuICAgICAgICBfaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzJGluaXRpYWxJbiA9PT0gdm9pZCAwID8gJycgOiBfdGhpcyRwcm9wcyRpbml0aWFsSW4sXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxTZSA9IF90aGlzJHByb3BzLmluaXRpYWxTZWxlY3RlZEl0ZW0sXG4gICAgICAgIF9zZWxlY3RlZEl0ZW0gPSBfdGhpcyRwcm9wcyRpbml0aWFsU2UgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wcyRpbml0aWFsU2U7XG4gICAgICB2YXIgX3N0YXRlID0gX3RoaXMuZ2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgaXNPcGVuOiBfaXNPcGVuLFxuICAgICAgICBpbnB1dFZhbHVlOiBfaW5wdXRWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBfc2VsZWN0ZWRJdGVtXG4gICAgICB9KTtcbiAgICAgIGlmIChfc3RhdGUuc2VsZWN0ZWRJdGVtICE9IG51bGwgJiYgX3RoaXMucHJvcHMuaW5pdGlhbElucHV0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBfc3RhdGUuaW5wdXRWYWx1ZSA9IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhfc3RhdGUuc2VsZWN0ZWRJdGVtKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnN0YXRlID0gX3N0YXRlO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICB2YXIgX3Byb3RvID0gRG93bnNoaWZ0LnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgcnVubmluZyB0aW1lb3V0c1xuICAgICAqL1xuICAgIF9wcm90by5pbnRlcm5hbENsZWFyVGltZW91dHMgPSBmdW5jdGlvbiBpbnRlcm5hbENsZWFyVGltZW91dHMoKSB7XG4gICAgICB0aGlzLnRpbWVvdXRJZHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aW1lb3V0SWRzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhdGUgYmFzZWQgb24gaW50ZXJuYWwgc3RhdGUgb3IgcHJvcHNcbiAgICAgKiBJZiBhIHN0YXRlIHZhbHVlIGlzIHBhc3NlZCB2aWEgcHJvcHMsIHRoZW4gdGhhdFxuICAgICAqIGlzIHRoZSB2YWx1ZSBnaXZlbiwgb3RoZXJ3aXNlIGl0J3MgcmV0cmlldmVkIGZyb21cbiAgICAgKiBzdGF0ZVRvTWVyZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVRvTWVyZ2UgZGVmYXVsdHMgdG8gdGhpcy5zdGF0ZVxuICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0YXRlXG4gICAgICovO1xuICAgIF9wcm90by5nZXRTdGF0ZSA9IGZ1bmN0aW9uIGdldFN0YXRlJDEoc3RhdGVUb01lcmdlKSB7XG4gICAgICBpZiAoc3RhdGVUb01lcmdlID09PSB2b2lkIDApIHtcbiAgICAgICAgc3RhdGVUb01lcmdlID0gdGhpcy5zdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRTdGF0ZShzdGF0ZVRvTWVyZ2UsIHRoaXMucHJvcHMpO1xuICAgIH07XG4gICAgX3Byb3RvLmdldEl0ZW1Db3VudCA9IGZ1bmN0aW9uIGdldEl0ZW1Db3VudCgpIHtcbiAgICAgIC8vIHRoaW5ncyByZWFkIGJldHRlciB0aGlzIHdheS4gVGhleSdyZSBpbiBwcmlvcml0eSBvcmRlcjpcbiAgICAgIC8vIDEuIGB0aGlzLml0ZW1Db3VudGBcbiAgICAgIC8vIDIuIGB0aGlzLnByb3BzLml0ZW1Db3VudGBcbiAgICAgIC8vIDMuIGB0aGlzLml0ZW1zLmxlbmd0aGBcbiAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIGlmICh0aGlzLml0ZW1Db3VudCAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW1Db3VudCA9IHRoaXMuaXRlbUNvdW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLml0ZW1Db3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1Db3VudDtcbiAgICB9O1xuICAgIF9wcm90by5nZXRJdGVtTm9kZUZyb21JbmRleCA9IGZ1bmN0aW9uIGdldEl0ZW1Ob2RlRnJvbUluZGV4KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldEl0ZW1JZChpbmRleCkpO1xuICAgIH07XG4gICAgX3Byb3RvLnNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3ID0gZnVuY3Rpb24gc2Nyb2xsSGlnaGxpZ2h0ZWRJdGVtSW50b1ZpZXcoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAge1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0SXRlbU5vZGVGcm9tSW5kZXgodGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgpO1xuICAgICAgICB0aGlzLnByb3BzLnNjcm9sbEludG9WaWV3KG5vZGUsIHRoaXMuX21lbnVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF9wcm90by5tb3ZlSGlnaGxpZ2h0ZWRJbmRleCA9IGZ1bmN0aW9uIG1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwgb3RoZXJTdGF0ZVRvU2V0KSB7XG4gICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5nZXRJdGVtQ291bnQoKTtcbiAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTggPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRnZXRTdGF0ZTguaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIHZhciBuZXh0SGlnaGxpZ2h0ZWRJbmRleCA9IGdldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgYW1vdW50LCB7XG4gICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgfSwgdGhpcy5pc0l0ZW1EaXNhYmxlZCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXh0SGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF9wcm90by5nZXRTdGF0ZUFuZEhlbHBlcnMgPSBmdW5jdGlvbiBnZXRTdGF0ZUFuZEhlbHBlcnMoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0U3RhdGU5ID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMkZ2V0U3RhdGU5LmhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRnZXRTdGF0ZTkuaW5wdXRWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtID0gX3RoaXMkZ2V0U3RhdGU5LnNlbGVjdGVkSXRlbSxcbiAgICAgICAgaXNPcGVuID0gX3RoaXMkZ2V0U3RhdGU5LmlzT3BlbjtcbiAgICAgIHZhciBpdGVtVG9TdHJpbmcgPSB0aGlzLnByb3BzLml0ZW1Ub1N0cmluZztcbiAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICB2YXIgZ2V0Um9vdFByb3BzID0gdGhpcy5nZXRSb290UHJvcHMsXG4gICAgICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdGhpcy5nZXRUb2dnbGVCdXR0b25Qcm9wcyxcbiAgICAgICAgZ2V0TGFiZWxQcm9wcyA9IHRoaXMuZ2V0TGFiZWxQcm9wcyxcbiAgICAgICAgZ2V0TWVudVByb3BzID0gdGhpcy5nZXRNZW51UHJvcHMsXG4gICAgICAgIGdldElucHV0UHJvcHMgPSB0aGlzLmdldElucHV0UHJvcHMsXG4gICAgICAgIGdldEl0ZW1Qcm9wcyA9IHRoaXMuZ2V0SXRlbVByb3BzLFxuICAgICAgICBvcGVuTWVudSA9IHRoaXMub3Blbk1lbnUsXG4gICAgICAgIGNsb3NlTWVudSA9IHRoaXMuY2xvc2VNZW51LFxuICAgICAgICB0b2dnbGVNZW51ID0gdGhpcy50b2dnbGVNZW51LFxuICAgICAgICBzZWxlY3RJdGVtID0gdGhpcy5zZWxlY3RJdGVtLFxuICAgICAgICBzZWxlY3RJdGVtQXRJbmRleCA9IHRoaXMuc2VsZWN0SXRlbUF0SW5kZXgsXG4gICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtLFxuICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4ID0gdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICBjbGVhclNlbGVjdGlvbiA9IHRoaXMuY2xlYXJTZWxlY3Rpb24sXG4gICAgICAgIGNsZWFySXRlbXMgPSB0aGlzLmNsZWFySXRlbXMsXG4gICAgICAgIHJlc2V0ID0gdGhpcy5yZXNldCxcbiAgICAgICAgc2V0SXRlbUNvdW50ID0gdGhpcy5zZXRJdGVtQ291bnQsXG4gICAgICAgIHVuc2V0SXRlbUNvdW50ID0gdGhpcy51bnNldEl0ZW1Db3VudCxcbiAgICAgICAgc2V0U3RhdGUgPSB0aGlzLmludGVybmFsU2V0U3RhdGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBwcm9wIGdldHRlcnNcbiAgICAgICAgZ2V0Um9vdFByb3BzOiBnZXRSb290UHJvcHMsXG4gICAgICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzOiBnZXRUb2dnbGVCdXR0b25Qcm9wcyxcbiAgICAgICAgZ2V0TGFiZWxQcm9wczogZ2V0TGFiZWxQcm9wcyxcbiAgICAgICAgZ2V0TWVudVByb3BzOiBnZXRNZW51UHJvcHMsXG4gICAgICAgIGdldElucHV0UHJvcHM6IGdldElucHV0UHJvcHMsXG4gICAgICAgIGdldEl0ZW1Qcm9wczogZ2V0SXRlbVByb3BzLFxuICAgICAgICAvLyBhY3Rpb25zXG4gICAgICAgIHJlc2V0OiByZXNldCxcbiAgICAgICAgb3Blbk1lbnU6IG9wZW5NZW51LFxuICAgICAgICBjbG9zZU1lbnU6IGNsb3NlTWVudSxcbiAgICAgICAgdG9nZ2xlTWVudTogdG9nZ2xlTWVudSxcbiAgICAgICAgc2VsZWN0SXRlbTogc2VsZWN0SXRlbSxcbiAgICAgICAgc2VsZWN0SXRlbUF0SW5kZXg6IHNlbGVjdEl0ZW1BdEluZGV4LFxuICAgICAgICBzZWxlY3RIaWdobGlnaHRlZEl0ZW06IHNlbGVjdEhpZ2hsaWdodGVkSXRlbSxcbiAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleDogc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgY2xlYXJTZWxlY3Rpb246IGNsZWFyU2VsZWN0aW9uLFxuICAgICAgICBjbGVhckl0ZW1zOiBjbGVhckl0ZW1zLFxuICAgICAgICBzZXRJdGVtQ291bnQ6IHNldEl0ZW1Db3VudCxcbiAgICAgICAgdW5zZXRJdGVtQ291bnQ6IHVuc2V0SXRlbUNvdW50LFxuICAgICAgICBzZXRTdGF0ZTogc2V0U3RhdGUsXG4gICAgICAgIC8vIHByb3BzXG4gICAgICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nLFxuICAgICAgICAvLyBkZXJpdmVkXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gc3RhdGVcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNPcGVuOiBpc09wZW4sXG4gICAgICAgIHNlbGVjdGVkSXRlbTogc2VsZWN0ZWRJdGVtXG4gICAgICB9O1xuICAgIH07XG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWZhbHNlICYmIHRoaXMuZ2V0TWVudVByb3BzLmNhbGxlZCAmJiAhdGhpcy5nZXRNZW51UHJvcHMuc3VwcHJlc3NSZWZFcnJvcikge1xuICAgICAgICB2YWxpZGF0ZUdldE1lbnVQcm9wc0NhbGxlZENvcnJlY3RseSh0aGlzLl9tZW51Tm9kZSwgdGhpcy5nZXRNZW51UHJvcHMpO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKHJlYWN0LW5hdGl2ZSkgKi9cbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcy5pc01vdXNlRG93biBoZWxwcyB1cyB0cmFjayB3aGV0aGVyIHRoZSBtb3VzZSBpcyBjdXJyZW50bHkgaGVsZCBkb3duLlxuICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhbiBpdGVtIGluIHRoZSBsaXN0LCBidXQgaG9sZHMgdGhlIG1vdXNlXG4gICAgICAgIC8vIGRvd24gbG9uZyBlbm91Z2ggZm9yIHRoZSBsaXN0IHRvIGRpc2FwcGVhciAoYmVjYXVzZSB0aGUgYmx1ciBldmVudCBmaXJlcyBvbiB0aGUgaW5wdXQpXG4gICAgICAgIC8vIHRoaXMuaXNNb3VzZURvd24gaXMgdXNlZCBpbiB0aGUgYmx1ciBoYW5kbGVyIG9uIHRoZSBpbnB1dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYmx1ciBldmVudCBzaG91bGRcbiAgICAgICAgLy8gdHJpZ2dlciBoaWRpbmcgdGhlIG1lbnUuXG4gICAgICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIF90aGlzNC5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdXNlVXAgPSBmdW5jdGlvbiBvbk1vdXNlVXAoZXZlbnQpIHtcbiAgICAgICAgICBfdGhpczQuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgb3IgdGhlIGFjdGl2ZUVsZW1lbnQgaXMgd2l0aGluIGEgZG93bnNoaWZ0IG5vZGVcbiAgICAgICAgICAvLyB0aGVuIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgZG93bnNoaWZ0XG4gICAgICAgICAgdmFyIGNvbnRleHRXaXRoaW5Eb3duc2hpZnQgPSB0YXJnZXRXaXRoaW5Eb3duc2hpZnQoZXZlbnQudGFyZ2V0LCBbX3RoaXM0Ll9yb290Tm9kZSwgX3RoaXM0Ll9tZW51Tm9kZV0sIF90aGlzNC5wcm9wcy5lbnZpcm9ubWVudCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0V2l0aGluRG93bnNoaWZ0ICYmIF90aGlzNC5nZXRTdGF0ZSgpLmlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXM0LnJlc2V0KHtcbiAgICAgICAgICAgICAgdHlwZTogbW91c2VVcFxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnByb3BzLm9uT3V0ZXJDbGljayhfdGhpczQuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBUb3VjaGluZyBhbiBlbGVtZW50IGluIGlPUyBnaXZlcyBmb2N1cyBhbmQgaG92ZXIgc3RhdGVzLCBidXQgdG91Y2hpbmcgb3V0IG9mXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IHdpbGwgcmVtb3ZlIGhvdmVyLCBhbmQgcGVyc2lzdCB0aGUgZm9jdXMgc3RhdGUsIHJlc3VsdGluZyBpbiB0aGVcbiAgICAgICAgLy8gYmx1ciBldmVudCBub3QgYmVpbmcgdHJpZ2dlcmVkLlxuICAgICAgICAvLyB0aGlzLmlzVG91Y2hNb3ZlIGhlbHBzIHVzIHRyYWNrIHdoZXRoZXIgdGhlIHVzZXIgaXMgdGFwcGluZyBvciBzd2lwaW5nIG9uIGEgdG91Y2ggc2NyZWVuLlxuICAgICAgICAvLyBJZiB0aGUgdXNlciB0YXBzIG91dHNpZGUgb2YgRG93bnNoaWZ0LCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSByZXNldCxcbiAgICAgICAgLy8gYnV0IG5vdCBpZiB0aGUgdXNlciBpcyBzd2lwaW5nXG4gICAgICAgIHZhciBvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiBvblRvdWNoU3RhcnQoKSB7XG4gICAgICAgICAgX3RoaXM0LmlzVG91Y2hNb3ZlID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoTW92ZSA9IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCkge1xuICAgICAgICAgIF90aGlzNC5pc1RvdWNoTW92ZSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZChldmVudCkge1xuICAgICAgICAgIHZhciBjb250ZXh0V2l0aGluRG93bnNoaWZ0ID0gdGFyZ2V0V2l0aGluRG93bnNoaWZ0KGV2ZW50LnRhcmdldCwgW190aGlzNC5fcm9vdE5vZGUsIF90aGlzNC5fbWVudU5vZGVdLCBfdGhpczQucHJvcHMuZW52aXJvbm1lbnQsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoIV90aGlzNC5pc1RvdWNoTW92ZSAmJiAhY29udGV4dFdpdGhpbkRvd25zaGlmdCAmJiBfdGhpczQuZ2V0U3RhdGUoKS5pc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzNC5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IHRvdWNoRW5kXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczQucHJvcHMub25PdXRlckNsaWNrKF90aGlzNC5nZXRTdGF0ZUFuZEhlbHBlcnMoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBlbnZpcm9ubWVudCA9IHRoaXMucHJvcHMuZW52aXJvbm1lbnQ7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgZW52aXJvbm1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgIHRoaXMuY2xlYW51cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQuaW50ZXJuYWxDbGVhclRpbWVvdXRzKCk7XG4gICAgICAgICAgX3RoaXM0LnVwZGF0ZVN0YXR1cy5jYW5jZWwoKTtcbiAgICAgICAgICBlbnZpcm9ubWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUpO1xuICAgICAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBfcHJvdG8uc2hvdWxkU2Nyb2xsID0gZnVuY3Rpb24gc2hvdWxkU2Nyb2xsKHByZXZTdGF0ZSwgcHJldlByb3BzKSB7XG4gICAgICB2YXIgX3JlZjEwID0gdGhpcy5wcm9wcy5oaWdobGlnaHRlZEluZGV4ID09PSB1bmRlZmluZWQgPyB0aGlzLmdldFN0YXRlKCkgOiB0aGlzLnByb3BzLFxuICAgICAgICBjdXJyZW50SGlnaGxpZ2h0ZWRJbmRleCA9IF9yZWYxMC5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgdmFyIF9yZWYxMSA9IHByZXZQcm9wcy5oaWdobGlnaHRlZEluZGV4ID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBwcmV2UHJvcHMsXG4gICAgICAgIHByZXZIaWdobGlnaHRlZEluZGV4ID0gX3JlZjExLmhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICB2YXIgc2Nyb2xsV2hlbk9wZW4gPSBjdXJyZW50SGlnaGxpZ2h0ZWRJbmRleCAmJiB0aGlzLmdldFN0YXRlKCkuaXNPcGVuICYmICFwcmV2U3RhdGUuaXNPcGVuO1xuICAgICAgdmFyIHNjcm9sbFdoZW5OYXZpZ2F0aW5nID0gY3VycmVudEhpZ2hsaWdodGVkSW5kZXggIT09IHByZXZIaWdobGlnaHRlZEluZGV4O1xuICAgICAgcmV0dXJuIHNjcm9sbFdoZW5PcGVuIHx8IHNjcm9sbFdoZW5OYXZpZ2F0aW5nO1xuICAgIH07XG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkKHRoaXMuc3RhdGUsIHByZXZQcm9wcywgdGhpcy5wcm9wcyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAgICBpZiAodGhpcy5nZXRNZW51UHJvcHMuY2FsbGVkICYmICF0aGlzLmdldE1lbnVQcm9wcy5zdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgICAgdmFsaWRhdGVHZXRNZW51UHJvcHNDYWxsZWRDb3JyZWN0bHkodGhpcy5fbWVudU5vZGUsIHRoaXMuZ2V0TWVudVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29udHJvbGxlZFByb3AodGhpcy5wcm9wcywgJ3NlbGVjdGVkSXRlbScpICYmIHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtQ2hhbmdlZChwcmV2UHJvcHMuc2VsZWN0ZWRJdGVtLCB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbSkpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBjb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgaW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pdGVtVG9TdHJpbmcodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmF2b2lkU2Nyb2xsaW5nICYmIHRoaXMuc2hvdWxkU2Nyb2xsKHByZXZTdGF0ZSwgcHJldlByb3BzKSkge1xuICAgICAgICB0aGlzLnNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3KCk7XG4gICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIChyZWFjdC1uYXRpdmUpICovXG4gICAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpOyAvLyBhdm9pZHMgbWVtb3J5IGxlYWtcbiAgICB9O1xuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB1bndyYXBBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuLCBub29wKTtcbiAgICAgIC8vIGJlY2F1c2UgdGhlIGl0ZW1zIGFyZSByZXJlbmRlcmVkIGV2ZXJ5IHRpbWUgd2UgY2FsbCB0aGUgY2hpbGRyZW5cbiAgICAgIC8vIHdlIGNsZWFyIHRoaXMgb3V0IGVhY2ggcmVuZGVyIGFuZCBpdCB3aWxsIGJlIHBvcHVsYXRlZCBhZ2FpbiBhc1xuICAgICAgLy8gZ2V0SXRlbVByb3BzIGlzIGNhbGxlZC5cbiAgICAgIHRoaXMuY2xlYXJJdGVtcygpO1xuICAgICAgLy8gd2UgcmVzZXQgdGhpcyBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlIHVzZXIgY2FsbHMgZ2V0Um9vdFByb3BzIGR1cmluZ1xuICAgICAgLy8gdGhpcyByZW5kZXIuIElmIHRoZXkgZG8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLFxuICAgICAgLy8gaWYgdGhleSBkb24ndCB0aGVuIHdlIG5lZWQgdG8gY2xvbmUgdGhlIGVsZW1lbnQgdGhleSByZXR1cm4gYW5kXG4gICAgICAvLyBhcHBseSB0aGUgcHJvcHMgZm9yIHRoZW0uXG4gICAgICB0aGlzLmdldFJvb3RQcm9wcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0Um9vdFByb3BzLnJlZktleSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZ2V0Um9vdFByb3BzLnN1cHByZXNzUmVmRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAvLyB3ZSBkbyBzb21ldGhpbmcgc2ltaWxhciBmb3IgZ2V0TWVudVByb3BzXG4gICAgICB0aGlzLmdldE1lbnVQcm9wcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0TWVudVByb3BzLnJlZktleSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZ2V0TWVudVByb3BzLnN1cHByZXNzUmVmRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAvLyB3ZSBkbyBzb21ldGhpbmcgc2ltaWxhciBmb3IgZ2V0TGFiZWxQcm9wc1xuICAgICAgdGhpcy5nZXRMYWJlbFByb3BzLmNhbGxlZCA9IGZhbHNlO1xuICAgICAgLy8gYW5kIHNvbWV0aGluZyBzaW1pbGFyIGZvciBnZXRJbnB1dFByb3BzXG4gICAgICB0aGlzLmdldElucHV0UHJvcHMuY2FsbGVkID0gZmFsc2U7XG4gICAgICB2YXIgZWxlbWVudCA9IHVud3JhcEFycmF5KGNoaWxkcmVuKHRoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdldFJvb3RQcm9wcy5jYWxsZWQgfHwgdGhpcy5wcm9wcy5zdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLmdldFJvb3RQcm9wcy5zdXBwcmVzc1JlZkVycm9yICYmICF0aGlzLnByb3BzLnN1cHByZXNzUmVmRXJyb3IpIHtcbiAgICAgICAgICB2YWxpZGF0ZUdldFJvb3RQcm9wc0NhbGxlZENvcnJlY3RseShlbGVtZW50LCB0aGlzLmdldFJvb3RQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9IGVsc2UgaWYgKGlzRE9NRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAvLyB0aGV5IGRpZG4ndCBhcHBseSB0aGUgcm9vdCBwcm9wcywgYnV0IHdlIGNhbiBjbG9uZVxuICAgICAgICAvLyB0aGlzIGFuZCBhcHBseSB0aGUgcHJvcHMgb3Vyc2VsdmVzXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGVsZW1lbnQsIHRoaXMuZ2V0Um9vdFByb3BzKGdldEVsZW1lbnRQcm9wcyhlbGVtZW50KSkpO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gdGhleSBkaWRuJ3QgYXBwbHkgdGhlIHJvb3QgcHJvcHMsIGJ1dCB0aGV5IG5lZWQgdG9cbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNhbid0IHF1ZXJ5IGFyb3VuZCB0aGUgYXV0b2NvbXBsZXRlXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb3duc2hpZnQ6IElmIHlvdSByZXR1cm4gYSBub24tRE9NIGVsZW1lbnQsIHlvdSBtdXN0IGFwcGx5IHRoZSBnZXRSb290UHJvcHMgZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gRG93bnNoaWZ0O1xuICB9KENvbXBvbmVudCk7XG4gIERvd25zaGlmdC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IG51bGwsXG4gICAgZGVmYXVsdElzT3BlbjogZmFsc2UsXG4gICAgZ2V0QTExeVN0YXR1c01lc3NhZ2U6IGdldEExMXlTdGF0dXNNZXNzYWdlJDEsXG4gICAgaXRlbVRvU3RyaW5nOiBmdW5jdGlvbiBpdGVtVG9TdHJpbmcoaSkge1xuICAgICAgaWYgKGkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc1BsYWluT2JqZWN0KGkpICYmICFpLmhhc093blByb3BlcnR5KCd0b1N0cmluZycpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybignZG93bnNoaWZ0OiBBbiBvYmplY3Qgd2FzIHBhc3NlZCB0byB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgaXRlbVRvU3RyaW5nYC4gWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBpdGVtVG9TdHJpbmdgIGltcGxlbWVudGF0aW9uLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGBpdGVtVG9TdHJpbmdgIEFQSSBkb2N1bWVudGF0aW9uLicsICdUaGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZDonLCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcoaSk7XG4gICAgfSxcbiAgICBvblN0YXRlQ2hhbmdlOiBub29wLFxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogbm9vcCxcbiAgICBvblVzZXJBY3Rpb246IG5vb3AsXG4gICAgb25DaGFuZ2U6IG5vb3AsXG4gICAgb25TZWxlY3Q6IG5vb3AsXG4gICAgb25PdXRlckNsaWNrOiBub29wLFxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZWQ6IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUNoYW5nZWQocHJldkl0ZW0sIGl0ZW0pIHtcbiAgICAgIHJldHVybiBwcmV2SXRlbSAhPT0gaXRlbTtcbiAgICB9LFxuICAgIGVudmlyb25tZW50OiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAoc3NyKSAqL1xuICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8ge30gOiB3aW5kb3csXG4gICAgc3RhdGVSZWR1Y2VyOiBmdW5jdGlvbiBzdGF0ZVJlZHVjZXIoc3RhdGUsIHN0YXRlVG9TZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZVRvU2V0O1xuICAgIH0sXG4gICAgc3VwcHJlc3NSZWZFcnJvcjogZmFsc2UsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3XG4gIH07XG4gIERvd25zaGlmdC5zdGF0ZUNoYW5nZVR5cGVzID0gc3RhdGVDaGFuZ2VUeXBlcyQzO1xuICByZXR1cm4gRG93bnNoaWZ0O1xufSgpO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRG93bnNoaWZ0LnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgZGVmYXVsdElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGluaXRpYWxIaWdobGlnaHRlZEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpbml0aWFsU2VsZWN0ZWRJdGVtOiBQcm9wVHlwZXMuYW55LFxuICBpbml0aWFsSW5wdXRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGdldEExMXlTdGF0dXNNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXRlbVRvU3RyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbklucHV0VmFsdWVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblVzZXJBY3Rpb246IFByb3BUeXBlcy5mdW5jLFxuICBvbk91dGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RhdGVSZWR1Y2VyOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXRlbUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZW52aXJvbm1lbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGRvY3VtZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY3JlYXRlRWxlbWVudDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGdldEVsZW1lbnRCeUlkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgYWN0aXZlRWxlbWVudDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgYm9keTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBOb2RlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pLFxuICBzdXBwcmVzc1JlZkVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2Nyb2xsSW50b1ZpZXc6IFByb3BUeXBlcy5mdW5jLFxuICAvLyB0aGluZ3Mgd2Uga2VlcCBpbiBzdGF0ZSBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHNcbiAgLy8gYnV0IGNhbiBhY2NlcHQgYXMgcHJvcHMgZm9yIGNvbnRyb2xsZWQgY29tcG9uZW50c1xuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlcyAqL1xuICBzZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1lbnVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ2V0SXRlbUlkOiBQcm9wVHlwZXMuZnVuY1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG59IDogdm9pZCAwO1xudmFyIERvd25zaGlmdCQxID0gRG93bnNoaWZ0O1xuZnVuY3Rpb24gdmFsaWRhdGVHZXRNZW51UHJvcHNDYWxsZWRDb3JyZWN0bHkobm9kZSwgX3JlZjEyKSB7XG4gIHZhciByZWZLZXkgPSBfcmVmMTIucmVmS2V5O1xuICBpZiAoIW5vZGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoXCJkb3duc2hpZnQ6IFRoZSByZWYgcHJvcCBcXFwiXCIgKyByZWZLZXkgKyBcIlxcXCIgZnJvbSBnZXRNZW51UHJvcHMgd2FzIG5vdCBhcHBsaWVkIGNvcnJlY3RseSBvbiB5b3VyIG1lbnUgZWxlbWVudC5cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlR2V0Um9vdFByb3BzQ2FsbGVkQ29ycmVjdGx5KGVsZW1lbnQsIF9yZWYxMykge1xuICB2YXIgcmVmS2V5ID0gX3JlZjEzLnJlZktleTtcbiAgdmFyIHJlZktleVNwZWNpZmllZCA9IHJlZktleSAhPT0gJ3JlZic7XG4gIHZhciBpc0NvbXBvc2l0ZSA9ICFpc0RPTUVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpc0NvbXBvc2l0ZSAmJiAhcmVmS2V5U3BlY2lmaWVkICYmICFpc0ZvcndhcmRSZWYoZWxlbWVudCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ2Rvd25zaGlmdDogWW91IHJldHVybmVkIGEgbm9uLURPTSBlbGVtZW50LiBZb3UgbXVzdCBzcGVjaWZ5IGEgcmVmS2V5IGluIGdldFJvb3RQcm9wcycpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2l0ZSAmJiByZWZLZXlTcGVjaWZpZWQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoXCJkb3duc2hpZnQ6IFlvdSByZXR1cm5lZCBhIERPTSBlbGVtZW50LiBZb3Ugc2hvdWxkIG5vdCBzcGVjaWZ5IGEgcmVmS2V5IGluIGdldFJvb3RQcm9wcy4gWW91IHNwZWNpZmllZCBcXFwiXCIgKyByZWZLZXkgKyBcIlxcXCJcIik7XG4gIH1cbiAgaWYgKCFpc0ZvcndhcmRSZWYoZWxlbWVudCkgJiYgIWdldEVsZW1lbnRQcm9wcyhlbGVtZW50KVtyZWZLZXldKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBZb3UgbXVzdCBhcHBseSB0aGUgcmVmIHByb3AgXFxcIlwiICsgcmVmS2V5ICsgXCJcXFwiIGZyb20gZ2V0Um9vdFByb3BzIG9udG8geW91ciByb290IGVsZW1lbnQuXCIpO1xuICB9XG59XG5cbnZhciBfZXhjbHVkZWQkMyA9IFtcImlzSW5pdGlhbE1vdW50XCIsIFwiaGlnaGxpZ2h0ZWRJbmRleFwiLCBcIml0ZW1zXCIsIFwiZW52aXJvbm1lbnRcIl07XG52YXIgZHJvcGRvd25EZWZhdWx0U3RhdGVWYWx1ZXMgPSB7XG4gIGhpZ2hsaWdodGVkSW5kZXg6IC0xLFxuICBpc09wZW46IGZhbHNlLFxuICBzZWxlY3RlZEl0ZW06IG51bGwsXG4gIGlucHV0VmFsdWU6ICcnXG59O1xuZnVuY3Rpb24gY2FsbE9uQ2hhbmdlUHJvcHMoYWN0aW9uLCBzdGF0ZSwgbmV3U3RhdGUpIHtcbiAgdmFyIHByb3BzID0gYWN0aW9uLnByb3BzLFxuICAgIHR5cGUgPSBhY3Rpb24udHlwZTtcbiAgdmFyIGNoYW5nZXMgPSB7fTtcbiAgT2JqZWN0LmtleXMoc3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGludm9rZU9uQ2hhbmdlSGFuZGxlcihrZXksIGFjdGlvbiwgc3RhdGUsIG5ld1N0YXRlKTtcbiAgICBpZiAobmV3U3RhdGVba2V5XSAhPT0gc3RhdGVba2V5XSkge1xuICAgICAgY2hhbmdlc1trZXldID0gbmV3U3RhdGVba2V5XTtcbiAgICB9XG4gIH0pO1xuICBpZiAocHJvcHMub25TdGF0ZUNoYW5nZSAmJiBPYmplY3Qua2V5cyhjaGFuZ2VzKS5sZW5ndGgpIHtcbiAgICBwcm9wcy5vblN0YXRlQ2hhbmdlKF9leHRlbmRzKHtcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9LCBjaGFuZ2VzKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGludm9rZU9uQ2hhbmdlSGFuZGxlcihrZXksIGFjdGlvbiwgc3RhdGUsIG5ld1N0YXRlKSB7XG4gIHZhciBwcm9wcyA9IGFjdGlvbi5wcm9wcyxcbiAgICB0eXBlID0gYWN0aW9uLnR5cGU7XG4gIHZhciBoYW5kbGVyID0gXCJvblwiICsgY2FwaXRhbGl6ZVN0cmluZyhrZXkpICsgXCJDaGFuZ2VcIjtcbiAgaWYgKHByb3BzW2hhbmRsZXJdICYmIG5ld1N0YXRlW2tleV0gIT09IHVuZGVmaW5lZCAmJiBuZXdTdGF0ZVtrZXldICE9PSBzdGF0ZVtrZXldKSB7XG4gICAgcHJvcHNbaGFuZGxlcl0oX2V4dGVuZHMoe1xuICAgICAgdHlwZTogdHlwZVxuICAgIH0sIG5ld1N0YXRlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHN0YXRlIHJlZHVjZXIgdGhhdCByZXR1cm5zIHRoZSBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzIHN0YXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGEgYWN0aW9uIHdpdGggY2hhbmdlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIHN0YXRlUmVkdWNlcihzLCBhKSB7XG4gIHJldHVybiBhLmNoYW5nZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG1lc3NhZ2UgdG8gYmUgYWRkZWQgdG8gYXJpYS1saXZlIHJlZ2lvbiB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdGlvblBhcmFtZXRlcnMgUGFyYW1ldGVycyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhMTF5IG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldEExMXlTZWxlY3Rpb25NZXNzYWdlKHNlbGVjdGlvblBhcmFtZXRlcnMpIHtcbiAgdmFyIHNlbGVjdGVkSXRlbSA9IHNlbGVjdGlvblBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtLFxuICAgIGl0ZW1Ub1N0cmluZ0xvY2FsID0gc2VsZWN0aW9uUGFyYW1ldGVycy5pdGVtVG9TdHJpbmc7XG4gIHJldHVybiBzZWxlY3RlZEl0ZW0gPyBpdGVtVG9TdHJpbmdMb2NhbChzZWxlY3RlZEl0ZW0pICsgXCIgaGFzIGJlZW4gc2VsZWN0ZWQuXCIgOiAnJztcbn1cblxuLyoqXG4gKiBEZWJvdW5jZWQgY2FsbCBmb3IgdXBkYXRpbmcgdGhlIGExMXkgbWVzc2FnZS5cbiAqL1xudmFyIHVwZGF0ZUExMXlTdGF0dXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoZ2V0QTExeU1lc3NhZ2UsIGRvY3VtZW50KSB7XG4gIHNldFN0YXR1cyhnZXRBMTF5TWVzc2FnZSgpLCBkb2N1bWVudCk7XG59LCAyMDApO1xuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxudmFyIHVzZUVsZW1lbnRJZHMgPSAndXNlSWQnIGluIFJlYWN0IC8vIEF2b2lkIGNvbmRpdGlvbmFsIHVzZUlkIGNhbGxcbj8gZnVuY3Rpb24gdXNlRWxlbWVudElkcyhfcmVmKSB7XG4gIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgbGFiZWxJZCA9IF9yZWYubGFiZWxJZCxcbiAgICBtZW51SWQgPSBfcmVmLm1lbnVJZCxcbiAgICBnZXRJdGVtSWQgPSBfcmVmLmdldEl0ZW1JZCxcbiAgICB0b2dnbGVCdXR0b25JZCA9IF9yZWYudG9nZ2xlQnV0dG9uSWQsXG4gICAgaW5wdXRJZCA9IF9yZWYuaW5wdXRJZDtcbiAgLy8gQXZvaWQgY29uZGl0aW9uYWwgdXNlSWQgY2FsbFxuICB2YXIgcmVhY3RJZCA9IFwiZG93bnNoaWZ0LVwiICsgUmVhY3QudXNlSWQoKTtcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gcmVhY3RJZDtcbiAgfVxuICB2YXIgZWxlbWVudElkc1JlZiA9IHVzZVJlZih7XG4gICAgbGFiZWxJZDogbGFiZWxJZCB8fCBpZCArIFwiLWxhYmVsXCIsXG4gICAgbWVudUlkOiBtZW51SWQgfHwgaWQgKyBcIi1tZW51XCIsXG4gICAgZ2V0SXRlbUlkOiBnZXRJdGVtSWQgfHwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaWQgKyBcIi1pdGVtLVwiICsgaW5kZXg7XG4gICAgfSxcbiAgICB0b2dnbGVCdXR0b25JZDogdG9nZ2xlQnV0dG9uSWQgfHwgaWQgKyBcIi10b2dnbGUtYnV0dG9uXCIsXG4gICAgaW5wdXRJZDogaW5wdXRJZCB8fCBpZCArIFwiLWlucHV0XCJcbiAgfSk7XG4gIHJldHVybiBlbGVtZW50SWRzUmVmLmN1cnJlbnQ7XG59IDogZnVuY3Rpb24gdXNlRWxlbWVudElkcyhfcmVmMikge1xuICB2YXIgX3JlZjIkaWQgPSBfcmVmMi5pZCxcbiAgICBpZCA9IF9yZWYyJGlkID09PSB2b2lkIDAgPyBcImRvd25zaGlmdC1cIiArIGdlbmVyYXRlSWQoKSA6IF9yZWYyJGlkLFxuICAgIGxhYmVsSWQgPSBfcmVmMi5sYWJlbElkLFxuICAgIG1lbnVJZCA9IF9yZWYyLm1lbnVJZCxcbiAgICBnZXRJdGVtSWQgPSBfcmVmMi5nZXRJdGVtSWQsXG4gICAgdG9nZ2xlQnV0dG9uSWQgPSBfcmVmMi50b2dnbGVCdXR0b25JZCxcbiAgICBpbnB1dElkID0gX3JlZjIuaW5wdXRJZDtcbiAgdmFyIGVsZW1lbnRJZHNSZWYgPSB1c2VSZWYoe1xuICAgIGxhYmVsSWQ6IGxhYmVsSWQgfHwgaWQgKyBcIi1sYWJlbFwiLFxuICAgIG1lbnVJZDogbWVudUlkIHx8IGlkICsgXCItbWVudVwiLFxuICAgIGdldEl0ZW1JZDogZ2V0SXRlbUlkIHx8IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGlkICsgXCItaXRlbS1cIiArIGluZGV4O1xuICAgIH0sXG4gICAgdG9nZ2xlQnV0dG9uSWQ6IHRvZ2dsZUJ1dHRvbklkIHx8IGlkICsgXCItdG9nZ2xlLWJ1dHRvblwiLFxuICAgIGlucHV0SWQ6IGlucHV0SWQgfHwgaWQgKyBcIi1pbnB1dFwiXG4gIH0pO1xuICByZXR1cm4gZWxlbWVudElkc1JlZi5jdXJyZW50O1xufTtcbmZ1bmN0aW9uIGdldEl0ZW1BbmRJbmRleChpdGVtUHJvcCwgaW5kZXhQcm9wLCBpdGVtcywgZXJyb3JNZXNzYWdlKSB7XG4gIHZhciBpdGVtLCBpbmRleDtcbiAgaWYgKGl0ZW1Qcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5kZXhQcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBpdGVtID0gaXRlbXNbaW5kZXhQcm9wXTtcbiAgICBpbmRleCA9IGluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICBpbmRleCA9IGluZGV4UHJvcCA9PT0gdW5kZWZpbmVkID8gaXRlbXMuaW5kZXhPZihpdGVtUHJvcCkgOiBpbmRleFByb3A7XG4gICAgaXRlbSA9IGl0ZW1Qcm9wO1xuICB9XG4gIHJldHVybiBbaXRlbSwgaW5kZXhdO1xufVxuZnVuY3Rpb24gaXRlbVRvU3RyaW5nKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gPyBTdHJpbmcoaXRlbSkgOiAnJztcbn1cbmZ1bmN0aW9uIGlzQWNjZXB0ZWRDaGFyYWN0ZXJLZXkoa2V5KSB7XG4gIHJldHVybiAvXlxcU3sxfSQvLnRlc3Qoa2V5KTtcbn1cbmZ1bmN0aW9uIGNhcGl0YWxpemVTdHJpbmcoc3RyaW5nKSB7XG4gIHJldHVybiBcIlwiICsgc3RyaW5nLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5mdW5jdGlvbiB1c2VMYXRlc3RSZWYodmFsKSB7XG4gIHZhciByZWYgPSB1c2VSZWYodmFsKTtcbiAgLy8gdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgXCJjb25jdXJyZW50IG1vZGUgc2FmZVwiIGJlY2F1c2Ugd2UncmUgbWFuaXB1bGF0aW5nXG4gIC8vIHRoZSB2YWx1ZSBkdXJpbmcgcmVuZGVyIChzbyBpdCdzIG5vdCBpZGVtcG90ZW50KS4gSG93ZXZlciwgdGhlIHBsYWNlcyB0aGlzXG4gIC8vIGhvb2sgaXMgdXNlZCBpcyB0byBzdXBwb3J0IG1lbW9pemluZyBjYWxsYmFja3Mgd2hpY2ggd2lsbCBiZSBjYWxsZWRcbiAgLy8gKmR1cmluZyogcmVuZGVyLCBzbyB3ZSBuZWVkIHRoZSBsYXRlc3QgdmFsdWVzICpkdXJpbmcqIHJlbmRlci5cbiAgLy8gSWYgbm90IGZvciB0aGlzLCB0aGVuIHdlJ2QgcHJvYmFibHkgd2FudCB0byB1c2UgdXNlTGF5b3V0RWZmZWN0IGluc3RlYWQuXG4gIHJlZi5jdXJyZW50ID0gdmFsO1xuICByZXR1cm4gcmVmO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjb250cm9sbGVkIHN0YXRlIHVzaW5nIGEgdGhlIHByZXZpb3VzIHN0YXRlLCBwcm9wcyxcbiAqIHR3byByZWR1Y2Vycywgb25lIGZyb20gZG93bnNoaWZ0IGFuZCBhbiBvcHRpb25hbCBvbmUgZnJvbSB0aGUgdXNlci5cbiAqIEFsc28gY2FsbHMgdGhlIG9uQ2hhbmdlIGhhbmRsZXJzIGZvciBzdGF0ZSB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUVuaGFuY2VkUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGVSZWYgPSB1c2VSZWYoKTtcbiAgdmFyIGFjdGlvblJlZiA9IHVzZVJlZigpO1xuICB2YXIgZW5oYW5jZWRSZWR1Y2VyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBhY3Rpb25SZWYuY3VycmVudCA9IGFjdGlvbjtcbiAgICBzdGF0ZSA9IGdldFN0YXRlKHN0YXRlLCBhY3Rpb24ucHJvcHMpO1xuICAgIHZhciBjaGFuZ2VzID0gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICB2YXIgbmV3U3RhdGUgPSBhY3Rpb24ucHJvcHMuc3RhdGVSZWR1Y2VyKHN0YXRlLCBfZXh0ZW5kcyh7fSwgYWN0aW9uLCB7XG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzXG4gICAgfSkpO1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfSwgW3JlZHVjZXJdKTtcbiAgdmFyIF91c2VSZWR1Y2VyID0gdXNlUmVkdWNlcihlbmhhbmNlZFJlZHVjZXIsIGluaXRpYWxTdGF0ZSksXG4gICAgc3RhdGUgPSBfdXNlUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VSZWR1Y2VyWzFdO1xuICB2YXIgcHJvcHNSZWYgPSB1c2VMYXRlc3RSZWYocHJvcHMpO1xuICB2YXIgZGlzcGF0Y2hXaXRoUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKF9leHRlbmRzKHtcbiAgICAgIHByb3BzOiBwcm9wc1JlZi5jdXJyZW50XG4gICAgfSwgYWN0aW9uKSk7XG4gIH0sIFtwcm9wc1JlZl0pO1xuICB2YXIgYWN0aW9uID0gYWN0aW9uUmVmLmN1cnJlbnQ7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFjdGlvbiAmJiBwcmV2U3RhdGVSZWYuY3VycmVudCAmJiBwcmV2U3RhdGVSZWYuY3VycmVudCAhPT0gc3RhdGUpIHtcbiAgICAgIGNhbGxPbkNoYW5nZVByb3BzKGFjdGlvbiwgZ2V0U3RhdGUocHJldlN0YXRlUmVmLmN1cnJlbnQsIGFjdGlvbi5wcm9wcyksIHN0YXRlKTtcbiAgICB9XG4gICAgcHJldlN0YXRlUmVmLmN1cnJlbnQgPSBzdGF0ZTtcbiAgfSwgW3N0YXRlLCBwcm9wcywgYWN0aW9uXSk7XG4gIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoV2l0aFByb3BzXTtcbn1cblxuLyoqXG4gKiBXcmFwcyB0aGUgdXNlRW5oYW5jZWRSZWR1Y2VyIGFuZCBhcHBsaWVzIHRoZSBjb250cm9sbGVkIHByb3AgdmFsdWVzIGJlZm9yZVxuICogcmV0dXJuaW5nIHRoZSBuZXcgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRSZWR1Y2VyJDEocmVkdWNlciwgaW5pdGlhbFN0YXRlLCBwcm9wcykge1xuICB2YXIgX3VzZUVuaGFuY2VkUmVkdWNlciA9IHVzZUVuaGFuY2VkUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VFbmhhbmNlZFJlZHVjZXJbMF0sXG4gICAgZGlzcGF0Y2ggPSBfdXNlRW5oYW5jZWRSZWR1Y2VyWzFdO1xuICByZXR1cm4gW2dldFN0YXRlKHN0YXRlLCBwcm9wcyksIGRpc3BhdGNoXTtcbn1cbnZhciBkZWZhdWx0UHJvcHMkMyA9IHtcbiAgaXRlbVRvU3RyaW5nOiBpdGVtVG9TdHJpbmcsXG4gIHN0YXRlUmVkdWNlcjogc3RhdGVSZWR1Y2VyLFxuICBnZXRBMTF5U2VsZWN0aW9uTWVzc2FnZTogZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2UsXG4gIHNjcm9sbEludG9WaWV3OiBzY3JvbGxJbnRvVmlldyxcbiAgZW52aXJvbm1lbnQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IChzc3IpICovXG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8ge30gOiB3aW5kb3dcbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgcHJvcEtleSwgZGVmYXVsdFN0YXRlVmFsdWVzKSB7XG4gIGlmIChkZWZhdWx0U3RhdGVWYWx1ZXMgPT09IHZvaWQgMCkge1xuICAgIGRlZmF1bHRTdGF0ZVZhbHVlcyA9IGRyb3Bkb3duRGVmYXVsdFN0YXRlVmFsdWVzO1xuICB9XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wc1tcImRlZmF1bHRcIiArIGNhcGl0YWxpemVTdHJpbmcocHJvcEtleSldO1xuICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIHJldHVybiBkZWZhdWx0U3RhdGVWYWx1ZXNbcHJvcEtleV07XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsVmFsdWUkMShwcm9wcywgcHJvcEtleSwgZGVmYXVsdFN0YXRlVmFsdWVzKSB7XG4gIGlmIChkZWZhdWx0U3RhdGVWYWx1ZXMgPT09IHZvaWQgMCkge1xuICAgIGRlZmF1bHRTdGF0ZVZhbHVlcyA9IGRyb3Bkb3duRGVmYXVsdFN0YXRlVmFsdWVzO1xuICB9XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHNbXCJpbml0aWFsXCIgKyBjYXBpdGFsaXplU3RyaW5nKHByb3BLZXkpXTtcbiAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgfVxuICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsIHByb3BLZXksIGRlZmF1bHRTdGF0ZVZhbHVlcyk7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUkMihwcm9wcykge1xuICB2YXIgc2VsZWN0ZWRJdGVtID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgdmFyIGlzT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gIHZhciBoaWdobGlnaHRlZEluZGV4ID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdoaWdobGlnaHRlZEluZGV4Jyk7XG4gIHZhciBpbnB1dFZhbHVlID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdpbnB1dFZhbHVlJyk7XG4gIHJldHVybiB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCA8IDAgJiYgc2VsZWN0ZWRJdGVtICYmIGlzT3BlbiA/IHByb3BzLml0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRJdGVtKSA6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgaXNPcGVuOiBpc09wZW4sXG4gICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIG9mZnNldCkge1xuICB2YXIgaXRlbXMgPSBwcm9wcy5pdGVtcyxcbiAgICBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCA9IHByb3BzLmluaXRpYWxIaWdobGlnaHRlZEluZGV4LFxuICAgIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4ID0gcHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg7XG4gIHZhciBzZWxlY3RlZEl0ZW0gPSBzdGF0ZS5zZWxlY3RlZEl0ZW0sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCA9IHN0YXRlLmhpZ2hsaWdodGVkSW5kZXg7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCB3aWxsIGdpdmUgdmFsdWUgdG8gaGlnaGxpZ2h0ZWRJbmRleCBvbiBpbml0aWFsIHN0YXRlIG9ubHkuXG4gIGlmIChpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIGhpZ2hsaWdodGVkSW5kZXggPT09IGluaXRpYWxIaWdobGlnaHRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGluaXRpYWxIaWdobGlnaHRlZEluZGV4O1xuICB9XG4gIGlmIChkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4O1xuICB9XG4gIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbXMuaW5kZXhPZihzZWxlY3RlZEl0ZW0pO1xuICB9XG4gIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIG9mZnNldCA8IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMDtcbn1cblxuLyoqXG4gKiBSZXVzZSB0aGUgbW92ZW1lbnQgdHJhY2tpbmcgb2YgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzT3BlbiBXaGV0aGVyIHRoZSBkcm9wZG93biBpcyBvcGVuIG9yIG5vdC5cbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZG93bnNoaWZ0RWxlbWVudFJlZnMgRG93bnNoaWZ0IGVsZW1lbnQgcmVmcyB0byB0cmFjayBtb3ZlbWVudCAodG9nZ2xlQnV0dG9uLCBtZW51IGV0Yy4pXG4gKiBAcGFyYW0ge09iamVjdH0gZW52aXJvbm1lbnQgRW52aXJvbm1lbnQgd2hlcmUgY29tcG9uZW50L2hvb2sgZXhpc3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlQmx1ciBIYW5kbGVyIG9uIGJsdXIgZnJvbSBtb3VzZSBvciB0b3VjaC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlZiBjb250YWluaW5nIHdoZXRoZXIgbW91c2VEb3duIG9yIHRvdWNoTW92ZSBldmVudCBpcyBoYXBwZW5pbmdcbiAqL1xuZnVuY3Rpb24gdXNlTW91c2VBbmRUb3VjaFRyYWNrZXIoaXNPcGVuLCBkb3duc2hpZnRFbGVtZW50UmVmcywgZW52aXJvbm1lbnQsIGhhbmRsZUJsdXIpIHtcbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZVJlZih7XG4gICAgaXNNb3VzZURvd246IGZhbHNlLFxuICAgIGlzVG91Y2hNb3ZlOiBmYWxzZVxuICB9KTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoKGVudmlyb25tZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHNhbWUgc3RyYXRlZ3kgZm9yIGNoZWNraW5nIGlmIGEgY2xpY2sgb2NjdXJyZWQgaW5zaWRlIG9yIG91dHNpZGUgZG93bnNoaWZ0XG4gICAgLy8gYXMgaW4gZG93bnNoaWZ0LmpzLlxuICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIH07XG4gICAgdmFyIG9uTW91c2VVcCA9IGZ1bmN0aW9uIG9uTW91c2VVcChldmVudCkge1xuICAgICAgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGlmIChpc09wZW4gJiYgIXRhcmdldFdpdGhpbkRvd25zaGlmdChldmVudC50YXJnZXQsIGRvd25zaGlmdEVsZW1lbnRSZWZzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHJldHVybiByZWYuY3VycmVudDtcbiAgICAgIH0pLCBlbnZpcm9ubWVudCkpIHtcbiAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIG9uVG91Y2hTdGFydCgpIHtcbiAgICAgIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzVG91Y2hNb3ZlID0gZmFsc2U7XG4gICAgfTtcbiAgICB2YXIgb25Ub3VjaE1vdmUgPSBmdW5jdGlvbiBvblRvdWNoTW92ZSgpIHtcbiAgICAgIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzVG91Y2hNb3ZlID0gdHJ1ZTtcbiAgICB9O1xuICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZChldmVudCkge1xuICAgICAgaWYgKGlzT3BlbiAmJiAhbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNUb3VjaE1vdmUgJiYgIXRhcmdldFdpdGhpbkRvd25zaGlmdChldmVudC50YXJnZXQsIGRvd25zaGlmdEVsZW1lbnRSZWZzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHJldHVybiByZWYuY3VycmVudDtcbiAgICAgIH0pLCBlbnZpcm9ubWVudCwgZmFsc2UpKSB7XG4gICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgZW52aXJvbm1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBlbnZpcm9ubWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlKTtcbiAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtpc09wZW4sIGVudmlyb25tZW50XSk7XG4gIHJldHVybiBtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWY7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlciA9IGZ1bmN0aW9uIHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlcigpIHtcbiAgcmV0dXJuIG5vb3A7XG59O1xuLyoqXG4gKiBDdXN0b20gaG9vayB0aGF0IGNoZWNrcyBpZiBnZXR0ZXIgcHJvcHMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtICB7Li4uYW55fSBwcm9wS2V5cyBHZXR0ZXIgcHJvcCBuYW1lcyB0byBiZSBoYW5kbGVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBTZXR0ZXIgZnVuY3Rpb24gY2FsbGVkIGluc2lkZSBnZXR0ZXIgcHJvcHMgdG8gc2V0IGNhbGwgaW5mb3JtYXRpb24uXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIgPSBmdW5jdGlvbiB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIoKSB7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wS2V5cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHByb3BLZXlzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICB2YXIgZ2V0dGVyUHJvcHNDYWxsZWRSZWYgPSB1c2VSZWYocHJvcEtleXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3BLZXkpIHtcbiAgICAgIGFjY1twcm9wS2V5XSA9IHt9O1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSkpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBPYmplY3Qua2V5cyhnZXR0ZXJQcm9wc0NhbGxlZFJlZi5jdXJyZW50KS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wS2V5KSB7XG4gICAgICAgIHZhciBwcm9wQ2FsbEluZm8gPSBnZXR0ZXJQcm9wc0NhbGxlZFJlZi5jdXJyZW50W3Byb3BLZXldO1xuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGlmICghT2JqZWN0LmtleXMocHJvcENhbGxJbmZvKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBZb3UgZm9yZ290IHRvIGNhbGwgdGhlIFwiICsgcHJvcEtleSArIFwiIGdldHRlciBmdW5jdGlvbiBvbiB5b3VyIGNvbXBvbmVudCAvIGVsZW1lbnQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VwcHJlc3NSZWZFcnJvciA9IHByb3BDYWxsSW5mby5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgICAgIHJlZktleSA9IHByb3BDYWxsSW5mby5yZWZLZXksXG4gICAgICAgICAgZWxlbWVudFJlZiA9IHByb3BDYWxsSW5mby5lbGVtZW50UmVmO1xuICAgICAgICBpZiAoKCFlbGVtZW50UmVmIHx8ICFlbGVtZW50UmVmLmN1cnJlbnQpICYmICFzdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBUaGUgcmVmIHByb3AgXFxcIlwiICsgcmVmS2V5ICsgXCJcXFwiIGZyb20gXCIgKyBwcm9wS2V5ICsgXCIgd2FzIG5vdCBhcHBsaWVkIGNvcnJlY3RseSBvbiB5b3VyIGVsZW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB2YXIgc2V0R2V0dGVyUHJvcENhbGxJbmZvID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb3BLZXksIHN1cHByZXNzUmVmRXJyb3IsIHJlZktleSwgZWxlbWVudFJlZikge1xuICAgICAgZ2V0dGVyUHJvcHNDYWxsZWRSZWYuY3VycmVudFtwcm9wS2V5XSA9IHtcbiAgICAgICAgc3VwcHJlc3NSZWZFcnJvcjogc3VwcHJlc3NSZWZFcnJvcixcbiAgICAgICAgcmVmS2V5OiByZWZLZXksXG4gICAgICAgIGVsZW1lbnRSZWY6IGVsZW1lbnRSZWZcbiAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBzZXRHZXR0ZXJQcm9wQ2FsbEluZm87XG4gIH07XG59XG5mdW5jdGlvbiB1c2VBMTF5TWVzc2FnZVNldHRlcihnZXRBMTF5TWVzc2FnZSwgZGVwZW5kZW5jeUFycmF5LCBfcmVmMykge1xuICB2YXIgaXNJbml0aWFsTW91bnQgPSBfcmVmMy5pc0luaXRpYWxNb3VudCxcbiAgICBoaWdobGlnaHRlZEluZGV4ID0gX3JlZjMuaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpdGVtcyA9IF9yZWYzLml0ZW1zLFxuICAgIGVudmlyb25tZW50ID0gX3JlZjMuZW52aXJvbm1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYzLCBfZXhjbHVkZWQkMyk7XG4gIC8vIFNldHMgYTExeSBzdGF0dXMgbWVzc2FnZSBvbiBjaGFuZ2VzIGluIHN0YXRlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0luaXRpYWxNb3VudCB8fCBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGVBMTF5U3RhdHVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRBMTF5TWVzc2FnZShfZXh0ZW5kcyh7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIGhpZ2hsaWdodGVkSXRlbTogaXRlbXNbaGlnaGxpZ2h0ZWRJbmRleF0sXG4gICAgICAgIHJlc3VsdENvdW50OiBpdGVtcy5sZW5ndGhcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9LCBlbnZpcm9ubWVudC5kb2N1bWVudCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBkZXBlbmRlbmN5QXJyYXkpO1xufVxuZnVuY3Rpb24gdXNlU2Nyb2xsSW50b1ZpZXcoX3JlZjQpIHtcbiAgdmFyIGhpZ2hsaWdodGVkSW5kZXggPSBfcmVmNC5oaWdobGlnaHRlZEluZGV4LFxuICAgIGlzT3BlbiA9IF9yZWY0LmlzT3BlbixcbiAgICBpdGVtUmVmcyA9IF9yZWY0Lml0ZW1SZWZzLFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4ID0gX3JlZjQuZ2V0SXRlbU5vZGVGcm9tSW5kZXgsXG4gICAgbWVudUVsZW1lbnQgPSBfcmVmNC5tZW51RWxlbWVudCxcbiAgICBzY3JvbGxJbnRvVmlld1Byb3AgPSBfcmVmNC5zY3JvbGxJbnRvVmlldztcbiAgLy8gdXNlZCBub3QgdG8gc2Nyb2xsIG9uIGhpZ2hsaWdodCBieSBtb3VzZS5cbiAgdmFyIHNob3VsZFNjcm9sbFJlZiA9IHVzZVJlZih0cnVlKTtcbiAgLy8gU2Nyb2xsIG9uIGhpZ2hsaWdodGVkIGl0ZW0gaWYgY2hhbmdlIGNvbWVzIGZyb20ga2V5Ym9hcmQuXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChoaWdobGlnaHRlZEluZGV4IDwgMCB8fCAhaXNPcGVuIHx8ICFPYmplY3Qua2V5cyhpdGVtUmVmcy5jdXJyZW50KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNob3VsZFNjcm9sbFJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2hvdWxkU2Nyb2xsUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY3JvbGxJbnRvVmlld1Byb3AoZ2V0SXRlbU5vZGVGcm9tSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCksIG1lbnVFbGVtZW50KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbaGlnaGxpZ2h0ZWRJbmRleF0pO1xuICByZXR1cm4gc2hvdWxkU2Nyb2xsUmVmO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHVzZUNvbnRyb2xQcm9wc1ZhbGlkYXRvciA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yID0gZnVuY3Rpb24gdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yKF9yZWY1KSB7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50ID0gX3JlZjUuaXNJbml0aWFsTW91bnQsXG4gICAgICBwcm9wcyA9IF9yZWY1LnByb3BzLFxuICAgICAgc3RhdGUgPSBfcmVmNS5zdGF0ZTtcbiAgICAvLyB1c2VkIGZvciBjaGVja2luZyB3aGVuIHByb3BzIGFyZSBtb3ZpbmcgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZC5cbiAgICB2YXIgcHJldlByb3BzUmVmID0gdXNlUmVmKHByb3BzKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzSW5pdGlhbE1vdW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQ29udHJvbGxlZFVuY2hhbmdlZChzdGF0ZSwgcHJldlByb3BzUmVmLmN1cnJlbnQsIHByb3BzKTtcbiAgICAgIHByZXZQcm9wc1JlZi5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3N0YXRlLCBwcm9wcywgaXNJbml0aWFsTW91bnRdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHNlbGVjdGlvbiBvbiBFbnRlciAvIEFsdCArIEFycm93VXAuIENsb3NlcyB0aGUgbWVudSBhbmQgcmVzZXRzIHRoZSBoaWdobGlnaHRlZCBpbmRleCwgdW5sZXNzIHRoZXJlIGlzIGEgaGlnaGxpZ2h0ZWQuXG4gKiBJbiB0aGF0IGNhc2UsIHNlbGVjdHMgdGhlIGl0ZW0gYW5kIHJlc2V0cyB0byBkZWZhdWx0cyBmb3Igb3BlbiBzdGF0ZSBhbmQgaGlnaGxpZ2h0ZWQgaWRleC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgdXNlQ29tYm9ib3ggcHJvcHMuXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaGxpZ2h0ZWRJbmRleCBUaGUgaW5kZXggZnJvbSB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlucHV0VmFsdWUgQWxzbyByZXR1cm4gdGhlIGlucHV0IHZhbHVlIGZvciBzdGF0ZS5cbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGZvciB0aGUgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldENoYW5nZXNPblNlbGVjdGlvbihwcm9wcywgaGlnaGxpZ2h0ZWRJbmRleCwgaW5wdXRWYWx1ZSkge1xuICB2YXIgX3Byb3BzJGl0ZW1zO1xuICBpZiAoaW5wdXRWYWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5wdXRWYWx1ZSA9IHRydWU7XG4gIH1cbiAgdmFyIHNob3VsZFNlbGVjdCA9ICgoX3Byb3BzJGl0ZW1zID0gcHJvcHMuaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkaXRlbXMubGVuZ3RoKSAmJiBoaWdobGlnaHRlZEluZGV4ID49IDA7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBoaWdobGlnaHRlZEluZGV4OiAtMVxuICB9LCBzaG91bGRTZWxlY3QgJiYgX2V4dGVuZHMoe1xuICAgIHNlbGVjdGVkSXRlbTogcHJvcHMuaXRlbXNbaGlnaGxpZ2h0ZWRJbmRleF0sXG4gICAgaXNPcGVuOiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgJ2lzT3BlbicpLFxuICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpXG4gIH0sIGlucHV0VmFsdWUgJiYge1xuICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhwcm9wcy5pdGVtc1toaWdobGlnaHRlZEluZGV4XSlcbiAgfSkpO1xufVxuXG4vLyBTaGFyZWQgYmV0d2VlbiBhbGwgZXhwb3J0cy5cbnZhciBjb21tb25Qcm9wVHlwZXMgPSB7XG4gIGVudmlyb25tZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFkZEV2ZW50TGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBkb2N1bWVudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNyZWF0ZUVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBnZXRFbGVtZW50QnlJZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGFjdGl2ZUVsZW1lbnQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICAgIGJvZHk6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgTm9kZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KSxcbiAgaXRlbVRvU3RyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RhdGVSZWR1Y2VyOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuLy8gU2hhcmVkIGJldHdlZW4gdXNlU2VsZWN0LCB1c2VDb21ib2JveCwgRG93bnNoaWZ0LlxudmFyIGNvbW1vbkRyb3Bkb3duUHJvcFR5cGVzID0gX2V4dGVuZHMoe30sIGNvbW1vblByb3BUeXBlcywge1xuICBnZXRBMTF5U3RhdHVzTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGVmYXVsdElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGluaXRpYWxJc09wZW46IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGluaXRpYWxTZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGRlZmF1bHRTZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtZW51SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGdldEl0ZW1JZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRvZ2dsZUJ1dHRvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSGlnaGxpZ2h0ZWRJbmRleENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbklzT3BlbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjcm9sbEludG9WaWV3OiBQcm9wVHlwZXMuZnVuY1xufSk7XG5cbmZ1bmN0aW9uIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcykge1xuICB2YXIgdHlwZSA9IGFjdGlvbi50eXBlLFxuICAgIHByb3BzID0gYWN0aW9uLnByb3BzO1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLkl0ZW1Nb3VzZU1vdmU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBhY3Rpb24uZGlzYWJsZWQgPyAtMSA6IGFjdGlvbi5pbmRleFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5NZW51TW91c2VMZWF2ZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLlRvZ2dsZUJ1dHRvbkNsaWNrOlxuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5GdW5jdGlvblRvZ2dsZU1lbnU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46ICFzdGF0ZS5pc09wZW4sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHN0YXRlLmlzT3BlbiA/IC0xIDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIDApXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLkZ1bmN0aW9uT3Blbk1lbnU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAwKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5GdW5jdGlvbkNsb3NlTWVudTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogYWN0aW9uLmhpZ2hsaWdodGVkSW5kZXhcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25TZXRJbnB1dFZhbHVlOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25SZXNldDpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIHNlbGVjdGVkSXRlbTogZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsICdzZWxlY3RlZEl0ZW0nKSxcbiAgICAgICAgaW5wdXRWYWx1ZTogZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsICdpbnB1dFZhbHVlJylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIGNhbGxlZCB3aXRob3V0IHByb3BlciBhY3Rpb24gdHlwZS4nKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG5mdW5jdGlvbiBnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleShfYSkge1xuICAgIHZhciBrZXlzU29GYXIgPSBfYS5rZXlzU29GYXIsIGhpZ2hsaWdodGVkSW5kZXggPSBfYS5oaWdobGlnaHRlZEluZGV4LCBpdGVtcyA9IF9hLml0ZW1zLCBpdGVtVG9TdHJpbmcgPSBfYS5pdGVtVG9TdHJpbmcsIGlzSXRlbURpc2FibGVkID0gX2EuaXNJdGVtRGlzYWJsZWQ7XG4gICAgdmFyIGxvd2VyQ2FzZWRLZXlzU29GYXIgPSBrZXlzU29GYXIudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNlYXJjaCBxdWVyeSBpbiBwcm9ncmVzcywgd2UgYWxzbyBjb25zaWRlciB0aGUgY3VycmVudCBoaWdobGlnaHRlZCBpdGVtLlxuICAgICAgICB2YXIgb2Zmc2V0SW5kZXggPSAoaW5kZXggKyBoaWdobGlnaHRlZEluZGV4ICsgKGtleXNTb0Zhci5sZW5ndGggPCAyID8gMSA6IDApKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tvZmZzZXRJbmRleF07XG4gICAgICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGl0ZW1Ub1N0cmluZyhpdGVtKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobG93ZXJDYXNlZEtleXNTb0ZhcikgJiZcbiAgICAgICAgICAgICFpc0l0ZW1EaXNhYmxlZChpdGVtLCBvZmZzZXRJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXRJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGlnaGxpZ2h0ZWRJbmRleDtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbnZhciBwcm9wVHlwZXMkMiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25Ecm9wZG93blByb3BUeXBlcyksIHsgaXRlbXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLCBpc0l0ZW1EaXNhYmxlZDogUHJvcFR5cGVzLmZ1bmMsIGdldEExMXlTZWxlY3Rpb25NZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyB9KTtcbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igc3RhdHVzIG1lc3NhZ2UuIE9ubHkgYWRkZWQgd2hlbiBtZW51IGlzIG9wZW4uXG4gKiBXaWxsIHNwZWNpZnQgaWYgdGhlcmUgYXJlIHJlc3VsdHMgaW4gdGhlIGxpc3QsIGFuZCBpZiBzbywgaG93IG1hbnksXG4gKiBhbmQgd2hhdCBrZXlzIGFyZSByZWxldmFudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gdGhlIGRvd25zaGlmdCBzdGF0ZSBhbmQgb3RoZXIgcmVsZXZhbnQgcHJvcGVydGllc1xuICogQHJldHVybiB7U3RyaW5nfSB0aGUgYTExeSBzdGF0dXMgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRBMTF5U3RhdHVzTWVzc2FnZShfYSkge1xuICAgIHZhciBpc09wZW4gPSBfYS5pc09wZW4sIHJlc3VsdENvdW50ID0gX2EucmVzdWx0Q291bnQsIHByZXZpb3VzUmVzdWx0Q291bnQgPSBfYS5wcmV2aW91c1Jlc3VsdENvdW50O1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKCFyZXN1bHRDb3VudCkge1xuICAgICAgICByZXR1cm4gJ05vIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS4nO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Q291bnQgIT09IHByZXZpb3VzUmVzdWx0Q291bnQpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdENvdW50LCBcIiByZXN1bHRcIikuY29uY2F0KHJlc3VsdENvdW50ID09PSAxID8gJyBpcycgOiAncyBhcmUnLCBcIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiBQcmVzcyBFbnRlciBvciBTcGFjZSBCYXIga2V5cyB0byBzZWxlY3QuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG52YXIgZGVmYXVsdFByb3BzJDIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdFByb3BzJDMpLCB7IGdldEExMXlTdGF0dXNNZXNzYWdlOiBnZXRBMTF5U3RhdHVzTWVzc2FnZSwgaXNJdGVtRGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gfSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlUHJvcFR5cGVzJDIgPSBub29wO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMkMiA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsZXIpIHtcbiAgICAgICAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcyQyLCBvcHRpb25zLCAncHJvcCcsIGNhbGxlci5uYW1lKTtcbiAgICB9O1xufVxuXG52YXIgVG9nZ2xlQnV0dG9uQ2xpY2skMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9jbGlja19fJyA6IDA7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93RG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX2Fycm93X2Rvd25fXycgOiAxO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25BcnJvd1VwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25fYXJyb3dfdXBfXycgOiAyO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fa2V5ZG93bl9jaGFyYWN0ZXJfXycgOiAzO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fa2V5ZG93bl9lc2NhcGVfXycgOiA0O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25faG9tZV9fJyA6IDU7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkVuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX2VuZF9fJyA6IDY7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkVudGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25fZW50ZXJfXycgOiA3O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25TcGFjZUJ1dHRvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3NwYWNlX2J1dHRvbl9fJyA6IDg7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3BhZ2VfdXBfXycgOiA5O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3BhZ2VfZG93bl9fJyA6IDEwO1xudmFyIFRvZ2dsZUJ1dHRvbkJsdXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fYmx1cl9fJyA6IDExO1xudmFyIE1lbnVNb3VzZUxlYXZlJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19tZW51X21vdXNlX2xlYXZlX18nIDogMTI7XG52YXIgSXRlbU1vdXNlTW92ZSQxID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9tb3VzZV9tb3ZlX18nIDogMTM7XG52YXIgSXRlbUNsaWNrJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pdGVtX2NsaWNrX18nIDogMTQ7XG52YXIgRnVuY3Rpb25Ub2dnbGVNZW51JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl90b2dnbGVfbWVudV9fJyA6IDE1O1xudmFyIEZ1bmN0aW9uT3Blbk1lbnUkMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX29wZW5fbWVudV9fJyA6IDE2O1xudmFyIEZ1bmN0aW9uQ2xvc2VNZW51JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9jbG9zZV9tZW51X18nIDogMTc7XG52YXIgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaGlnaGxpZ2h0ZWRfaW5kZXhfXycgOiAxODtcbnZhciBGdW5jdGlvblNlbGVjdEl0ZW0kMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX3NlbGVjdF9pdGVtX18nIDogMTk7XG52YXIgRnVuY3Rpb25TZXRJbnB1dFZhbHVlJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaW5wdXRfdmFsdWVfXycgOiAyMDtcbnZhciBGdW5jdGlvblJlc2V0JDIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZXNldF9fJyA6IDIxO1xuXG52YXIgc3RhdGVDaGFuZ2VUeXBlcyQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIFRvZ2dsZUJ1dHRvbkNsaWNrOiBUb2dnbGVCdXR0b25DbGljayQxLFxuICBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duOiBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duLFxuICBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dVcDogVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXAsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXI6IFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGU6IFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lOiBUb2dnbGVCdXR0b25LZXlEb3duSG9tZSxcbiAgVG9nZ2xlQnV0dG9uS2V5RG93bkVuZDogVG9nZ2xlQnV0dG9uS2V5RG93bkVuZCxcbiAgVG9nZ2xlQnV0dG9uS2V5RG93bkVudGVyOiBUb2dnbGVCdXR0b25LZXlEb3duRW50ZXIsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25TcGFjZUJ1dHRvbjogVG9nZ2xlQnV0dG9uS2V5RG93blNwYWNlQnV0dG9uLFxuICBUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwOiBUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwLFxuICBUb2dnbGVCdXR0b25LZXlEb3duUGFnZURvd246IFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93bixcbiAgVG9nZ2xlQnV0dG9uQmx1cjogVG9nZ2xlQnV0dG9uQmx1cixcbiAgTWVudU1vdXNlTGVhdmU6IE1lbnVNb3VzZUxlYXZlJDEsXG4gIEl0ZW1Nb3VzZU1vdmU6IEl0ZW1Nb3VzZU1vdmUkMSxcbiAgSXRlbUNsaWNrOiBJdGVtQ2xpY2skMSxcbiAgRnVuY3Rpb25Ub2dnbGVNZW51OiBGdW5jdGlvblRvZ2dsZU1lbnUkMSxcbiAgRnVuY3Rpb25PcGVuTWVudTogRnVuY3Rpb25PcGVuTWVudSQxLFxuICBGdW5jdGlvbkNsb3NlTWVudTogRnVuY3Rpb25DbG9zZU1lbnUkMSxcbiAgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OiBGdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXgkMSxcbiAgRnVuY3Rpb25TZWxlY3RJdGVtOiBGdW5jdGlvblNlbGVjdEl0ZW0kMSxcbiAgRnVuY3Rpb25TZXRJbnB1dFZhbHVlOiBGdW5jdGlvblNldElucHV0VmFsdWUkMSxcbiAgRnVuY3Rpb25SZXNldDogRnVuY3Rpb25SZXNldCQyXG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZnVuY3Rpb24gZG93bnNoaWZ0U2VsZWN0UmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHZhciBfcHJvcHMkaXRlbXM7XG4gIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgcHJvcHMgPSBhY3Rpb24ucHJvcHMsXG4gICAgYWx0S2V5ID0gYWN0aW9uLmFsdEtleTtcbiAgdmFyIGNoYW5nZXM7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgSXRlbUNsaWNrJDE6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW2FjdGlvbi5pbmRleF1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXI6XG4gICAgICB7XG4gICAgICAgIHZhciBsb3dlcmNhc2VkS2V5ID0gYWN0aW9uLmtleTtcbiAgICAgICAgdmFyIGlucHV0VmFsdWUgPSBcIlwiICsgc3RhdGUuaW5wdXRWYWx1ZSArIGxvd2VyY2FzZWRLZXk7XG4gICAgICAgIHZhciBwcmV2SGlnaGxpZ2h0ZWRJbmRleCA9ICFzdGF0ZS5pc09wZW4gJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID8gcHJvcHMuaXRlbXMuaW5kZXhPZihzdGF0ZS5zZWxlY3RlZEl0ZW0pIDogc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkSW5kZXggPSBnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleSh7XG4gICAgICAgICAga2V5c1NvRmFyOiBpbnB1dFZhbHVlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHByZXZIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGl0ZW1zOiBwcm9wcy5pdGVtcyxcbiAgICAgICAgICBpdGVtVG9TdHJpbmc6IHByb3BzLml0ZW1Ub1N0cmluZyxcbiAgICAgICAgICBpc0l0ZW1EaXNhYmxlZDogcHJvcHMuaXNJdGVtRGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBoaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duOlxuICAgICAge1xuICAgICAgICB2YXIgX2hpZ2hsaWdodGVkSW5kZXggPSBzdGF0ZS5pc09wZW4gPyBnZXRIaWdobGlnaHRlZEluZGV4KHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsIDEsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZCkgOiBhbHRLZXkgJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID09IG51bGwgPyAtMSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAxKTtcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXA6XG4gICAgICBpZiAoc3RhdGUuaXNPcGVuICYmIGFsdEtleSkge1xuICAgICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX2hpZ2hsaWdodGVkSW5kZXgyID0gc3RhdGUuaXNPcGVuID8gZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAtMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAtMSk7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX2hpZ2hsaWdodGVkSW5kZXgyLFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gb25seSB0cmlnZ2VyZWQgd2hlbiBtZW51IGlzIG9wZW4uXG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duRW50ZXI6XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b246XG4gICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCBmYWxzZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0Tm9uRGlzYWJsZWRJbmRleCgwLCBmYWxzZSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKSxcbiAgICAgICAgaXNPcGVuOiB0cnVlXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duRW5kOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0Tm9uRGlzYWJsZWRJbmRleChwcm9wcy5pdGVtcy5sZW5ndGggLSAxLCB0cnVlLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQpLFxuICAgICAgICBpc09wZW46IHRydWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25QYWdlVXA6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXRIaWdobGlnaHRlZEluZGV4KHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsIC0xMCwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VEb3duOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAxMCwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93bkVzY2FwZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25CbHVyOlxuICAgICAgY2hhbmdlcyA9IF9leHRlbmRzKHtcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogLTFcbiAgICAgIH0sIHN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPj0gMCAmJiAoKF9wcm9wcyRpdGVtcyA9IHByb3BzLml0ZW1zKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJGl0ZW1zLmxlbmd0aCkgJiYge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW3N0YXRlLmhpZ2hsaWdodGVkSW5kZXhdXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRnVuY3Rpb25TZWxlY3RJdGVtJDE6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGFjdGlvbi5zZWxlY3RlZEl0ZW1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcyQyKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG52YXIgX2V4Y2x1ZGVkJDIgPSBbXCJvbk1vdXNlTGVhdmVcIiwgXCJyZWZLZXlcIiwgXCJvbktleURvd25cIiwgXCJvbkJsdXJcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMiA9IFtcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwib25LZXlEb3duXCIsIFwicmVmS2V5XCIsIFwicmVmXCJdLFxuICBfZXhjbHVkZWQzJDEgPSBbXCJpdGVtXCIsIFwiaW5kZXhcIiwgXCJvbk1vdXNlTW92ZVwiLCBcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwicmVmS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJyZWZcIl07XG51c2VTZWxlY3Quc3RhdGVDaGFuZ2VUeXBlcyA9IHN0YXRlQ2hhbmdlVHlwZXMkMjtcbmZ1bmN0aW9uIHVzZVNlbGVjdCh1c2VyUHJvcHMpIHtcbiAgaWYgKHVzZXJQcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgdXNlclByb3BzID0ge307XG4gIH1cbiAgdmFsaWRhdGVQcm9wVHlwZXMkMih1c2VyUHJvcHMsIHVzZVNlbGVjdCk7XG4gIC8vIFByb3BzIGRlZmF1bHRzIGFuZCBkZXN0cnVjdHVyaW5nLlxuICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFByb3BzJDIsIHVzZXJQcm9wcyk7XG4gIHZhciBpdGVtcyA9IHByb3BzLml0ZW1zLFxuICAgIHNjcm9sbEludG9WaWV3ID0gcHJvcHMuc2Nyb2xsSW50b1ZpZXcsXG4gICAgZW52aXJvbm1lbnQgPSBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmcgPSBwcm9wcy5pdGVtVG9TdHJpbmcsXG4gICAgZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5U2VsZWN0aW9uTWVzc2FnZSxcbiAgICBnZXRBMTF5U3RhdHVzTWVzc2FnZSA9IHByb3BzLmdldEExMXlTdGF0dXNNZXNzYWdlO1xuICAvLyBJbml0aWFsIHN0YXRlIGRlcGVuZGluZyBvbiBjb250cm9sbGVkIHByb3BzLlxuICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlJDIocHJvcHMpO1xuICB2YXIgX3VzZUNvbnRyb2xsZWRSZWR1Y2VyID0gdXNlQ29udHJvbGxlZFJlZHVjZXIkMShkb3duc2hpZnRTZWxlY3RSZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VDb250cm9sbGVkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VDb250cm9sbGVkUmVkdWNlclsxXTtcbiAgdmFyIGlzT3BlbiA9IHN0YXRlLmlzT3BlbixcbiAgICBoaWdobGlnaHRlZEluZGV4ID0gc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBzZWxlY3RlZEl0ZW0gPSBzdGF0ZS5zZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZSA9IHN0YXRlLmlucHV0VmFsdWU7XG5cbiAgLy8gRWxlbWVudCBlZnMuXG4gIHZhciB0b2dnbGVCdXR0b25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBtZW51UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgaXRlbVJlZnMgPSB1c2VSZWYoe30pO1xuICAvLyB1c2VkIHRvIGtlZXAgdGhlIGlucHV0VmFsdWUgY2xlYXJUaW1lb3V0IG9iamVjdCBiZXR3ZWVuIHJlbmRlcnMuXG4gIHZhciBjbGVhclRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gIC8vIHByZXZlbnQgaWQgcmUtZ2VuZXJhdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gIHZhciBlbGVtZW50SWRzID0gdXNlRWxlbWVudElkcyhwcm9wcyk7XG4gIC8vIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBpdGVtcyB3ZSBoYWQgb24gcHJldmlvdXMgY3ljbGUuXG4gIHZhciBwcmV2aW91c1Jlc3VsdENvdW50UmVmID0gdXNlUmVmKCk7XG4gIHZhciBpc0luaXRpYWxNb3VudFJlZiA9IHVzZVJlZih0cnVlKTtcbiAgLy8gdXRpbGl0eSBjYWxsYmFjayB0byBnZXQgaXRlbSBlbGVtZW50LlxuICB2YXIgbGF0ZXN0ID0gdXNlTGF0ZXN0UmVmKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgcHJvcHM6IHByb3BzXG4gIH0pO1xuXG4gIC8vIFNvbWUgdXRpbHMuXG4gIHZhciBnZXRJdGVtTm9kZUZyb21JbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV07XG4gIH0sIFtlbGVtZW50SWRzXSk7XG5cbiAgLy8gRWZmZWN0cy5cbiAgLy8gU2V0cyBhMTF5IHN0YXR1cyBtZXNzYWdlIG9uIGNoYW5nZXMgaW4gc3RhdGUuXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTdGF0dXNNZXNzYWdlLCBbaXNPcGVuLCBoaWdobGlnaHRlZEluZGV4LCBpbnB1dFZhbHVlLCBpdGVtc10sIF9leHRlbmRzKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcmV2aW91c1Jlc3VsdENvdW50OiBwcmV2aW91c1Jlc3VsdENvdW50UmVmLmN1cnJlbnQsXG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW1Ub1N0cmluZ1xuICB9LCBzdGF0ZSkpO1xuICAvLyBTZXRzIGExMXkgc3RhdHVzIG1lc3NhZ2Ugb24gY2hhbmdlcyBpbiBzZWxlY3RlZEl0ZW0uXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTZWxlY3Rpb25NZXNzYWdlLCBbc2VsZWN0ZWRJdGVtXSwgX2V4dGVuZHMoe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IHByZXZpb3VzUmVzdWx0Q291bnRSZWYuY3VycmVudCxcbiAgICBpdGVtczogaXRlbXMsXG4gICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nXG4gIH0sIHN0YXRlKSk7XG4gIC8vIFNjcm9sbCBvbiBoaWdobGlnaHRlZCBpdGVtIGlmIGNoYW5nZSBjb21lcyBmcm9tIGtleWJvYXJkLlxuICB2YXIgc2hvdWxkU2Nyb2xsUmVmID0gdXNlU2Nyb2xsSW50b1ZpZXcoe1xuICAgIG1lbnVFbGVtZW50OiBtZW51UmVmLmN1cnJlbnQsXG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpc09wZW46IGlzT3BlbixcbiAgICBpdGVtUmVmczogaXRlbVJlZnMsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4OiBnZXRJdGVtTm9kZUZyb21JbmRleFxuICB9KTtcblxuICAvLyBTZXRzIGNsZWFudXAgZm9yIHRoZSBrZXlzU29GYXIgY2FsbGJhY2ssIGRlYm91bmRlZCBhZnRlciA1MDBtcy5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpbml0IHRoZSBjbGVhbiBmdW5jdGlvbiBoZXJlIGFzIHdlIG5lZWQgYWNjZXNzIHRvIGRpc3BhdGNoLlxuICAgIGNsZWFyVGltZW91dFJlZi5jdXJyZW50ID0gZGVib3VuY2UoZnVuY3Rpb24gKG91dGVyRGlzcGF0Y2gpIHtcbiAgICAgIG91dGVyRGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGdW5jdGlvblNldElucHV0VmFsdWUkMSxcbiAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG5cbiAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgZGVib3VuY2VkIGNhbGxzIG9uIG1vdW50XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dFJlZi5jdXJyZW50LmNhbmNlbCgpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBJbnZva2VzIHRoZSBrZXlzU29GYXIgY2FsbGJhY2sgc2V0IHVwIGFib3ZlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXRSZWYuY3VycmVudChkaXNwYXRjaCk7XG4gIH0sIFtkaXNwYXRjaCwgaW5wdXRWYWx1ZV0pO1xuICB1c2VDb250cm9sUHJvcHNWYWxpZGF0b3Ioe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBzdGF0ZTogc3RhdGVcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJldmlvdXNSZXN1bHRDb3VudFJlZi5jdXJyZW50ID0gaXRlbXMubGVuZ3RoO1xuICB9KTtcbiAgLy8gRm9jdXMgdGhlIHRvZ2dsZSBidXR0b24gb24gZmlyc3QgcmVuZGVyIGlmIHJlcXVpcmVkLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmb2N1c09uT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gICAgaWYgKGZvY3VzT25PcGVuICYmIHRvZ2dsZUJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICB0b2dnbGVCdXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgLy8gQWRkIG1vdXNlL3RvdWNoIGV2ZW50cyB0byBkb2N1bWVudC5cbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZU1vdXNlQW5kVG91Y2hUcmFja2VyKGlzT3BlbiwgW21lbnVSZWYsIHRvZ2dsZUJ1dHRvblJlZl0sIGVudmlyb25tZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQmx1clxuICAgIH0pO1xuICB9KTtcbiAgdmFyIHNldEdldHRlclByb3BDYWxsSW5mbyA9IHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlcignZ2V0TWVudVByb3BzJywgJ2dldFRvZ2dsZUJ1dHRvblByb3BzJyk7XG4gIC8vIE1ha2UgaW5pdGlhbCByZWYgZmFsc2UuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIC8vIFJlc2V0IGl0ZW1SZWZzIG9uIGNsb3NlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBpdGVtUmVmcy5jdXJyZW50ID0ge307XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gRXZlbnQgaGFuZGxlciBmdW5jdGlvbnMuXG4gIHZhciB0b2dnbGVCdXR0b25LZXlEb3duSGFuZGxlcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dEb3duOiBmdW5jdGlvbiBBcnJvd0Rvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25BcnJvd0Rvd24sXG4gICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXlcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgQXJyb3dVcDogZnVuY3Rpb24gQXJyb3dVcChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXAsXG4gICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXlcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgSG9tZTogZnVuY3Rpb24gSG9tZShldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93bkhvbWVcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRW5kOiBmdW5jdGlvbiBFbmQoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25FbmRcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRXNjYXBlOiBmdW5jdGlvbiBFc2NhcGUoKSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duRXNjYXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBFbnRlcjogZnVuY3Rpb24gRW50ZXIoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IGxhdGVzdC5jdXJyZW50LnN0YXRlLmlzT3BlbiA/IFRvZ2dsZUJ1dHRvbktleURvd25FbnRlciA6IFRvZ2dsZUJ1dHRvbkNsaWNrJDFcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgUGFnZVVwOiBmdW5jdGlvbiBQYWdlVXAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGxhdGVzdC5jdXJyZW50LnN0YXRlLmlzT3Blbikge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VVcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUGFnZURvd246IGZ1bmN0aW9uIFBhZ2VEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93blxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJyAnOiBmdW5jdGlvbiBfKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuaXNPcGVuKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2skMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFN0YXRlLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duQ2hhcmFjdGVyLFxuICAgICAgICAgICAga2V5OiAnICdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0XSk7XG5cbiAgLy8gQWN0aW9uIGZ1bmN0aW9ucy5cbiAgdmFyIHRvZ2dsZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25Ub2dnbGVNZW51JDFcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBjbG9zZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25DbG9zZU1lbnUkMVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIG9wZW5NZW51ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uT3Blbk1lbnUkMVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldEhpZ2hsaWdodGVkSW5kZXggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3SGlnaGxpZ2h0ZWRJbmRleCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCQxLFxuICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbmV3SGlnaGxpZ2h0ZWRJbmRleFxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZWxlY3RJdGVtJDEsXG4gICAgICBzZWxlY3RlZEl0ZW06IG5ld1NlbGVjdGVkSXRlbVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHJlc2V0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uUmVzZXQkMlxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldElucHV0VmFsdWUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3SW5wdXRWYWx1ZSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSQxLFxuICAgICAgaW5wdXRWYWx1ZTogbmV3SW5wdXRWYWx1ZVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgLy8gR2V0dGVyIGZ1bmN0aW9ucy5cbiAgdmFyIGdldExhYmVsUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobGFiZWxQcm9wcykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBpZDogZWxlbWVudElkcy5sYWJlbElkLFxuICAgICAgaHRtbEZvcjogZWxlbWVudElkcy50b2dnbGVCdXR0b25JZFxuICAgIH0sIGxhYmVsUHJvcHMpO1xuICB9LCBbZWxlbWVudElkc10pO1xuICB2YXIgZ2V0TWVudVByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wLCBfdGVtcDIpIHtcbiAgICB2YXIgX2V4dGVuZHMyO1xuICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsXG4gICAgICBvbk1vdXNlTGVhdmUgPSBfcmVmLm9uTW91c2VMZWF2ZSxcbiAgICAgIF9yZWYkcmVmS2V5ID0gX3JlZi5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmJHJlZktleTtcbiAgICAgIF9yZWYub25LZXlEb3duO1xuICAgICAgX3JlZi5vbkJsdXI7XG4gICAgICB2YXIgcmVmID0gX3JlZi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkJDIpO1xuICAgIHZhciBfcmVmMiA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWYyJHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdXBwcmVzc1JlZkVycm87XG4gICAgdmFyIG1lbnVIYW5kbGVNb3VzZUxlYXZlID0gZnVuY3Rpb24gbWVudUhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IE1lbnVNb3VzZUxlYXZlJDFcbiAgICAgIH0pO1xuICAgIH07XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRNZW51UHJvcHMnLCBzdXBwcmVzc1JlZkVycm9yLCByZWZLZXksIG1lbnVSZWYpO1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChtZW51Tm9kZSkge1xuICAgICAgbWVudVJlZi5jdXJyZW50ID0gbWVudU5vZGU7XG4gICAgfSksIF9leHRlbmRzMi5pZCA9IGVsZW1lbnRJZHMubWVudUlkLCBfZXh0ZW5kczIucm9sZSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogXCJcIiArIGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHMyLm9uTW91c2VMZWF2ZSA9IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uTW91c2VMZWF2ZSwgbWVudUhhbmRsZU1vdXNlTGVhdmUpLCBfZXh0ZW5kczIpLCByZXN0KTtcbiAgfSwgW2Rpc3BhdGNoLCBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8sIGVsZW1lbnRJZHNdKTtcbiAgdmFyIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wMywgX3RlbXA0KSB7XG4gICAgdmFyIF9leHRlbmRzMztcbiAgICB2YXIgX3JlZjMgPSBfdGVtcDMgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAzLFxuICAgICAgb25CbHVyID0gX3JlZjMub25CbHVyLFxuICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2s7XG4gICAgICBfcmVmMy5vblByZXNzO1xuICAgICAgdmFyIG9uS2V5RG93biA9IF9yZWYzLm9uS2V5RG93bixcbiAgICAgIF9yZWYzJHJlZktleSA9IF9yZWYzLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYzJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmMyRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmMy5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZDIkMik7XG4gICAgdmFyIF9yZWY0ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgIF9yZWY0JHN1cHByZXNzUmVmRXJybyA9IF9yZWY0LnN1cHByZXNzUmVmRXJyb3IsXG4gICAgICBzdXBwcmVzc1JlZkVycm9yID0gX3JlZjQkc3VwcHJlc3NSZWZFcnJvID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JHN1cHByZXNzUmVmRXJybztcbiAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiB0b2dnbGVCdXR0b25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2skMVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQmx1ciA9IGZ1bmN0aW9uIHRvZ2dsZUJ1dHRvbkhhbmRsZUJsdXIoKSB7XG4gICAgICBpZiAobGF0ZXN0U3RhdGUuaXNPcGVuICYmICFtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWYuY3VycmVudC5pc01vdXNlRG93bikge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQmx1clxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciB0b2dnbGVCdXR0b25IYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gdG9nZ2xlQnV0dG9uSGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgdG9nZ2xlQnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0pIHtcbiAgICAgICAgdG9nZ2xlQnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0oZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0FjY2VwdGVkQ2hhcmFjdGVyS2V5KGtleSkpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIsXG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgdG9nZ2xlUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1tyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uICh0b2dnbGVCdXR0b25Ob2RlKSB7XG4gICAgICB0b2dnbGVCdXR0b25SZWYuY3VycmVudCA9IHRvZ2dsZUJ1dHRvbk5vZGU7XG4gICAgfSksIF9leHRlbmRzM1snYXJpYS1hY3RpdmVkZXNjZW5kYW50J10gPSBsYXRlc3RTdGF0ZS5pc09wZW4gJiYgbGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCA+IC0xID8gZWxlbWVudElkcy5nZXRJdGVtSWQobGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCkgOiAnJywgX2V4dGVuZHMzWydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHMzWydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4sIF9leHRlbmRzM1snYXJpYS1oYXNwb3B1cCddID0gJ2xpc3Rib3gnLCBfZXh0ZW5kczNbJ2FyaWEtbGFiZWxsZWRieSddID0gcmVzdCAmJiByZXN0WydhcmlhLWxhYmVsJ10gPyB1bmRlZmluZWQgOiBcIlwiICsgZWxlbWVudElkcy5sYWJlbElkLCBfZXh0ZW5kczMuaWQgPSBlbGVtZW50SWRzLnRvZ2dsZUJ1dHRvbklkLCBfZXh0ZW5kczMucm9sZSA9ICdjb21ib2JveCcsIF9leHRlbmRzMy50YWJJbmRleCA9IDAsIF9leHRlbmRzMy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIHRvZ2dsZUJ1dHRvbkhhbmRsZUJsdXIpLCBfZXh0ZW5kczMpLCByZXN0KTtcbiAgICBpZiAoIXJlc3QuZGlzYWJsZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAge1xuICAgICAgICB0b2dnbGVQcm9wcy5vbkNsaWNrID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2spO1xuICAgICAgICB0b2dnbGVQcm9wcy5vbktleURvd24gPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbktleURvd24sIHRvZ2dsZUJ1dHRvbkhhbmRsZUtleURvd24pO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8oJ2dldFRvZ2dsZUJ1dHRvblByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCB0b2dnbGVCdXR0b25SZWYpO1xuICAgIHJldHVybiB0b2dnbGVQcm9wcztcbiAgfSwgW2xhdGVzdCwgZWxlbWVudElkcywgc2V0R2V0dGVyUHJvcENhbGxJbmZvLCBkaXNwYXRjaCwgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLCB0b2dnbGVCdXR0b25LZXlEb3duSGFuZGxlcnNdKTtcbiAgdmFyIGdldEl0ZW1Qcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcDUpIHtcbiAgICB2YXIgX2V4dGVuZHM0O1xuICAgIHZhciBfcmVmNSA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsXG4gICAgICBpdGVtUHJvcCA9IF9yZWY1Lml0ZW0sXG4gICAgICBpbmRleFByb3AgPSBfcmVmNS5pbmRleCxcbiAgICAgIG9uTW91c2VNb3ZlID0gX3JlZjUub25Nb3VzZU1vdmUsXG4gICAgICBvbkNsaWNrID0gX3JlZjUub25DbGljaztcbiAgICAgIF9yZWY1Lm9uUHJlc3M7XG4gICAgICB2YXIgX3JlZjUkcmVmS2V5ID0gX3JlZjUucmVmS2V5LFxuICAgICAgcmVmS2V5ID0gX3JlZjUkcmVmS2V5ID09PSB2b2lkIDAgPyAncmVmJyA6IF9yZWY1JHJlZktleSxcbiAgICAgIGRpc2FibGVkUHJvcCA9IF9yZWY1LmRpc2FibGVkLFxuICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY1LCBfZXhjbHVkZWQzJDEpO1xuICAgIGlmIChkaXNhYmxlZFByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdQYXNzaW5nIFwiZGlzYWJsZWRcIiBhcyBhbiBhcmd1bWVudCB0byBnZXRJdGVtUHJvcHMgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLiBQbGVhc2UgdXNlIHRoZSBpc0l0ZW1EaXNhYmxlZCBwcm9wIGZyb20gdXNlU2VsZWN0LicpO1xuICAgIH1cbiAgICB2YXIgX2xhdGVzdCRjdXJyZW50ID0gbGF0ZXN0LmN1cnJlbnQsXG4gICAgICBsYXRlc3RTdGF0ZSA9IF9sYXRlc3QkY3VycmVudC5zdGF0ZSxcbiAgICAgIGxhdGVzdFByb3BzID0gX2xhdGVzdCRjdXJyZW50LnByb3BzO1xuICAgIHZhciBfZ2V0SXRlbUFuZEluZGV4ID0gZ2V0SXRlbUFuZEluZGV4KGl0ZW1Qcm9wLCBpbmRleFByb3AsIGxhdGVzdFByb3BzLml0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRJdGVtUHJvcHMhJyksXG4gICAgICBpdGVtID0gX2dldEl0ZW1BbmRJbmRleFswXSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgZGlzYWJsZWQgPSBsYXRlc3RQcm9wcy5pc0l0ZW1EaXNhYmxlZChpdGVtLCBpbmRleCk7XG4gICAgdmFyIGl0ZW1IYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBpdGVtSGFuZGxlTW91c2VNb3ZlKCkge1xuICAgICAgaWYgKGluZGV4ID09PSBsYXRlc3RTdGF0ZS5oaWdobGlnaHRlZEluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNob3VsZFNjcm9sbFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEl0ZW1Nb3VzZU1vdmUkMSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGl0ZW1IYW5kbGVDbGljayA9IGZ1bmN0aW9uIGl0ZW1IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogSXRlbUNsaWNrJDEsXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbVByb3BzID0gX2V4dGVuZHMoKF9leHRlbmRzNCA9IHt9LCBfZXh0ZW5kczRbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoaXRlbU5vZGUpIHtcbiAgICAgIGlmIChpdGVtTm9kZSkge1xuICAgICAgICBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV0gPSBpdGVtTm9kZTtcbiAgICAgIH1cbiAgICB9KSwgX2V4dGVuZHM0WydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZCwgX2V4dGVuZHM0WydhcmlhLXNlbGVjdGVkJ10gPSBcIlwiICsgKGl0ZW0gPT09IGxhdGVzdFN0YXRlLnNlbGVjdGVkSXRlbSksIF9leHRlbmRzNC5pZCA9IGVsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KSwgX2V4dGVuZHM0LnJvbGUgPSAnb3B0aW9uJywgX2V4dGVuZHM0KSwgcmVzdCk7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKHJlYWN0LW5hdGl2ZSkgKi9cbiAgICAgIHtcbiAgICAgICAgaXRlbVByb3BzLm9uQ2xpY2sgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBpdGVtSGFuZGxlQ2xpY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBpdGVtUHJvcHMub25Nb3VzZU1vdmUgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgaXRlbUhhbmRsZU1vdXNlTW92ZSk7XG4gICAgcmV0dXJuIGl0ZW1Qcm9wcztcbiAgfSwgW2xhdGVzdCwgZWxlbWVudElkcywgc2hvdWxkU2Nyb2xsUmVmLCBkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIC8vIHByb3AgZ2V0dGVycy5cbiAgICBnZXRUb2dnbGVCdXR0b25Qcm9wczogZ2V0VG9nZ2xlQnV0dG9uUHJvcHMsXG4gICAgZ2V0TGFiZWxQcm9wczogZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHM6IGdldE1lbnVQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHM6IGdldEl0ZW1Qcm9wcyxcbiAgICAvLyBhY3Rpb25zLlxuICAgIHRvZ2dsZU1lbnU6IHRvZ2dsZU1lbnUsXG4gICAgb3Blbk1lbnU6IG9wZW5NZW51LFxuICAgIGNsb3NlTWVudTogY2xvc2VNZW51LFxuICAgIHNldEhpZ2hsaWdodGVkSW5kZXg6IHNldEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgc2VsZWN0SXRlbTogc2VsZWN0SXRlbSxcbiAgICByZXNldDogcmVzZXQsXG4gICAgc2V0SW5wdXRWYWx1ZTogc2V0SW5wdXRWYWx1ZSxcbiAgICAvLyBzdGF0ZS5cbiAgICBoaWdobGlnaHRlZEluZGV4OiBoaWdobGlnaHRlZEluZGV4LFxuICAgIGlzT3BlbjogaXNPcGVuLFxuICAgIHNlbGVjdGVkSXRlbTogc2VsZWN0ZWRJdGVtLFxuICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWVcbiAgfTtcbn1cblxudmFyIElucHV0S2V5RG93bkFycm93RG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fYXJyb3dfZG93bl9fJyA6IDA7XG52YXIgSW5wdXRLZXlEb3duQXJyb3dVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fYXJyb3dfdXBfXycgOiAxO1xudmFyIElucHV0S2V5RG93bkVzY2FwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fZXNjYXBlX18nIDogMjtcbnZhciBJbnB1dEtleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfa2V5ZG93bl9ob21lX18nIDogMztcbnZhciBJbnB1dEtleURvd25FbmQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pbnB1dF9rZXlkb3duX2VuZF9fJyA6IDQ7XG52YXIgSW5wdXRLZXlEb3duUGFnZVVwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfa2V5ZG93bl9wYWdlX3VwX18nIDogNTtcbnZhciBJbnB1dEtleURvd25QYWdlRG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fcGFnZV9kb3duX18nIDogNjtcbnZhciBJbnB1dEtleURvd25FbnRlciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fZW50ZXJfXycgOiA3O1xudmFyIElucHV0Q2hhbmdlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfY2hhbmdlX18nIDogODtcbnZhciBJbnB1dEJsdXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pbnB1dF9ibHVyX18nIDogOTtcbnZhciBJbnB1dENsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfY2xpY2tfXycgOiAxMDtcbnZhciBNZW51TW91c2VMZWF2ZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX21lbnVfbW91c2VfbGVhdmVfXycgOiAxMTtcbnZhciBJdGVtTW91c2VNb3ZlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9tb3VzZV9tb3ZlX18nIDogMTI7XG52YXIgSXRlbUNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9jbGlja19fJyA6IDEzO1xudmFyIFRvZ2dsZUJ1dHRvbkNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2NsaWNrX18nIDogMTQ7XG52YXIgRnVuY3Rpb25Ub2dnbGVNZW51ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fdG9nZ2xlX21lbnVfXycgOiAxNTtcbnZhciBGdW5jdGlvbk9wZW5NZW51ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fb3Blbl9tZW51X18nIDogMTY7XG52YXIgRnVuY3Rpb25DbG9zZU1lbnUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9jbG9zZV9tZW51X18nIDogMTc7XG52YXIgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2V0X2hpZ2hsaWdodGVkX2luZGV4X18nIDogMTg7XG52YXIgRnVuY3Rpb25TZWxlY3RJdGVtID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2VsZWN0X2l0ZW1fXycgOiAxOTtcbnZhciBGdW5jdGlvblNldElucHV0VmFsdWUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaW5wdXRfdmFsdWVfXycgOiAyMDtcbnZhciBGdW5jdGlvblJlc2V0JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZXNldF9fJyA6IDIxO1xudmFyIENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2NvbnRyb2xsZWRfcHJvcF91cGRhdGVkX3NlbGVjdGVkX2l0ZW1fXycgOiAyMjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBJbnB1dEtleURvd25BcnJvd0Rvd246IElucHV0S2V5RG93bkFycm93RG93bixcbiAgSW5wdXRLZXlEb3duQXJyb3dVcDogSW5wdXRLZXlEb3duQXJyb3dVcCxcbiAgSW5wdXRLZXlEb3duRXNjYXBlOiBJbnB1dEtleURvd25Fc2NhcGUsXG4gIElucHV0S2V5RG93bkhvbWU6IElucHV0S2V5RG93bkhvbWUsXG4gIElucHV0S2V5RG93bkVuZDogSW5wdXRLZXlEb3duRW5kLFxuICBJbnB1dEtleURvd25QYWdlVXA6IElucHV0S2V5RG93blBhZ2VVcCxcbiAgSW5wdXRLZXlEb3duUGFnZURvd246IElucHV0S2V5RG93blBhZ2VEb3duLFxuICBJbnB1dEtleURvd25FbnRlcjogSW5wdXRLZXlEb3duRW50ZXIsXG4gIElucHV0Q2hhbmdlOiBJbnB1dENoYW5nZSxcbiAgSW5wdXRCbHVyOiBJbnB1dEJsdXIsXG4gIElucHV0Q2xpY2s6IElucHV0Q2xpY2ssXG4gIE1lbnVNb3VzZUxlYXZlOiBNZW51TW91c2VMZWF2ZSxcbiAgSXRlbU1vdXNlTW92ZTogSXRlbU1vdXNlTW92ZSxcbiAgSXRlbUNsaWNrOiBJdGVtQ2xpY2ssXG4gIFRvZ2dsZUJ1dHRvbkNsaWNrOiBUb2dnbGVCdXR0b25DbGljayxcbiAgRnVuY3Rpb25Ub2dnbGVNZW51OiBGdW5jdGlvblRvZ2dsZU1lbnUsXG4gIEZ1bmN0aW9uT3Blbk1lbnU6IEZ1bmN0aW9uT3Blbk1lbnUsXG4gIEZ1bmN0aW9uQ2xvc2VNZW51OiBGdW5jdGlvbkNsb3NlTWVudSxcbiAgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OiBGdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXgsXG4gIEZ1bmN0aW9uU2VsZWN0SXRlbTogRnVuY3Rpb25TZWxlY3RJdGVtLFxuICBGdW5jdGlvblNldElucHV0VmFsdWU6IEZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSxcbiAgRnVuY3Rpb25SZXNldDogRnVuY3Rpb25SZXNldCQxLFxuICBDb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW06IENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbVxufSk7XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSQxKHByb3BzKSB7XG4gIHZhciBpbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGUkMihwcm9wcyk7XG4gIHZhciBzZWxlY3RlZEl0ZW0gPSBpbml0aWFsU3RhdGUuc2VsZWN0ZWRJdGVtO1xuICB2YXIgaW5wdXRWYWx1ZSA9IGluaXRpYWxTdGF0ZS5pbnB1dFZhbHVlO1xuICBpZiAoaW5wdXRWYWx1ZSA9PT0gJycgJiYgc2VsZWN0ZWRJdGVtICYmIHByb3BzLmRlZmF1bHRJbnB1dFZhbHVlID09PSB1bmRlZmluZWQgJiYgcHJvcHMuaW5pdGlhbElucHV0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pbnB1dFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnB1dFZhbHVlID0gcHJvcHMuaXRlbVRvU3RyaW5nKHNlbGVjdGVkSXRlbSk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBpbml0aWFsU3RhdGUsIHtcbiAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gIH0pO1xufVxudmFyIHByb3BUeXBlcyQxID0gX2V4dGVuZHMoe30sIGNvbW1vbkRyb3Bkb3duUHJvcFR5cGVzLCB7XG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgaXNJdGVtRGlzYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBpbnB1dFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkZWZhdWx0SW5wdXRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbElucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uSW5wdXRWYWx1ZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn0pO1xuXG4vKipcbiAqIFRoZSB1c2VDb21ib2JveCB2ZXJzaW9uIG9mIHVzZUNvbnRyb2xsZWRSZWR1Y2VyLCB3aGljaCBhbHNvXG4gKiBjaGVja3MgaWYgdGhlIGNvbnRyb2xsZWQgcHJvcCBzZWxlY3RlZEl0ZW0gY2hhbmdlZCBiZXR3ZWVuXG4gKiByZW5kZXJzLiBJZiBzbywgaXQgd2lsbCBhbHNvIHVwZGF0ZSBpbnB1dFZhbHVlIHdpdGggaXRzXG4gKiBzdHJpbmcgZXF1aXZhbGVudC4gSXQgdXNlcyB0aGUgY29tbW9uIHVzZUVuaGFuY2VkUmVkdWNlciB0b1xuICogY29tcHV0ZSB0aGUgcmVzdCBvZiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgcHJvcHMpIHtcbiAgdmFyIHByZXZpb3VzU2VsZWN0ZWRJdGVtUmVmID0gdXNlUmVmKCk7XG4gIHZhciBfdXNlRW5oYW5jZWRSZWR1Y2VyID0gdXNlRW5oYW5jZWRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgcHJvcHMpLFxuICAgIHN0YXRlID0gX3VzZUVuaGFuY2VkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VFbmhhbmNlZFJlZHVjZXJbMV07XG5cbiAgLy8gVG9EbzogaWYgbmVlZGVkLCBtYWtlIHNhbWUgYXBwcm9hY2ggYXMgc2VsZWN0ZWRJdGVtQ2hhbmdlZCBmcm9tIERvd25zaGlmdC5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZFByb3AocHJvcHMsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWRJdGVtQ2hhbmdlZChwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50LCBwcm9wcy5zZWxlY3RlZEl0ZW0pKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSxcbiAgICAgICAgaW5wdXRWYWx1ZTogcHJvcHMuaXRlbVRvU3RyaW5nKHByb3BzLnNlbGVjdGVkSXRlbSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50ID0gc3RhdGUuc2VsZWN0ZWRJdGVtID09PSBwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50ID8gcHJvcHMuc2VsZWN0ZWRJdGVtIDogc3RhdGUuc2VsZWN0ZWRJdGVtO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3N0YXRlLnNlbGVjdGVkSXRlbSwgcHJvcHMuc2VsZWN0ZWRJdGVtXSk7XG4gIHJldHVybiBbZ2V0U3RhdGUoc3RhdGUsIHByb3BzKSwgZGlzcGF0Y2hdO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlUHJvcFR5cGVzJDEgPSBub29wO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlUHJvcFR5cGVzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhvcHRpb25zLCBjYWxsZXIpIHtcbiAgICBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzJDEsIG9wdGlvbnMsICdwcm9wJywgY2FsbGVyLm5hbWUpO1xuICB9O1xufVxudmFyIGRlZmF1bHRQcm9wcyQxID0gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQzLCB7XG4gIHNlbGVjdGVkSXRlbUNoYW5nZWQ6IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUNoYW5nZWQocHJldkl0ZW0sIGl0ZW0pIHtcbiAgICByZXR1cm4gcHJldkl0ZW0gIT09IGl0ZW07XG4gIH0sXG4gIGdldEExMXlTdGF0dXNNZXNzYWdlOiBnZXRBMTF5U3RhdHVzTWVzc2FnZSQxLFxuICBpc0l0ZW1EaXNhYmxlZDogZnVuY3Rpb24gaXNJdGVtRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZnVuY3Rpb24gZG93bnNoaWZ0VXNlQ29tYm9ib3hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgdmFyIF9wcm9wcyRpdGVtcztcbiAgdmFyIHR5cGUgPSBhY3Rpb24udHlwZSxcbiAgICBwcm9wcyA9IGFjdGlvbi5wcm9wcyxcbiAgICBhbHRLZXkgPSBhY3Rpb24uYWx0S2V5O1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBJdGVtQ2xpY2s6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW2FjdGlvbi5pbmRleF0sXG4gICAgICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhwcm9wcy5pdGVtc1thY3Rpb24uaW5kZXhdKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgSW5wdXRLZXlEb3duQXJyb3dEb3duOlxuICAgICAgaWYgKHN0YXRlLmlzT3Blbikge1xuICAgICAgICBjaGFuZ2VzID0ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkLCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBhbHRLZXkgJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID09IG51bGwgPyAtMSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAxKSxcbiAgICAgICAgICBpc09wZW46IHByb3BzLml0ZW1zLmxlbmd0aCA+PSAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkFycm93VXA6XG4gICAgICBpZiAoc3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIGlmIChhbHRLZXkpIHtcbiAgICAgICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VzID0ge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAtMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkLCB0cnVlKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIC0xKSxcbiAgICAgICAgICBpc09wZW46IHByb3BzLml0ZW1zLmxlbmd0aCA+PSAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkVudGVyOlxuICAgICAgY2hhbmdlcyA9IGdldENoYW5nZXNPblNlbGVjdGlvbihwcm9wcywgc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkVzY2FwZTpcbiAgICAgIGNoYW5nZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9LCAhc3RhdGUuaXNPcGVuICYmIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICBpbnB1dFZhbHVlOiAnJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93blBhZ2VVcDpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgLTEwLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQsIHRydWUpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBJbnB1dEtleURvd25QYWdlRG93bjpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgMTAsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZCwgdHJ1ZSlcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkhvbWU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXROb25EaXNhYmxlZEluZGV4KDAsIGZhbHNlLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBJbnB1dEtleURvd25FbmQ6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXROb25EaXNhYmxlZEluZGV4KHByb3BzLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZClcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Qmx1cjpcbiAgICAgIGNoYW5nZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9LCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4ID49IDAgJiYgKChfcHJvcHMkaXRlbXMgPSBwcm9wcy5pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyRpdGVtcy5sZW5ndGgpICYmIGFjdGlvbi5zZWxlY3RJdGVtICYmIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBwcm9wcy5pdGVtc1tzdGF0ZS5oaWdobGlnaHRlZEluZGV4XSxcbiAgICAgICAgaW5wdXRWYWx1ZTogcHJvcHMuaXRlbVRvU3RyaW5nKHByb3BzLml0ZW1zW3N0YXRlLmhpZ2hsaWdodGVkSW5kZXhdKVxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Q2hhbmdlOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgJ2hpZ2hsaWdodGVkSW5kZXgnKSxcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Q2xpY2s6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46ICFzdGF0ZS5pc09wZW4sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHN0YXRlLmlzT3BlbiA/IC0xIDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIDApXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGdW5jdGlvblNlbGVjdEl0ZW06XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGFjdGlvbi5zZWxlY3RlZEl0ZW0sXG4gICAgICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhhY3Rpb24uc2VsZWN0ZWRJdGVtKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcyQxKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG52YXIgX2V4Y2x1ZGVkJDEgPSBbXCJvbk1vdXNlTGVhdmVcIiwgXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMSA9IFtcIml0ZW1cIiwgXCJpbmRleFwiLCBcInJlZktleVwiLCBcInJlZlwiLCBcIm9uTW91c2VNb3ZlXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbkNsaWNrXCIsIFwib25QcmVzc1wiLCBcImRpc2FibGVkXCJdLFxuICBfZXhjbHVkZWQzID0gW1wib25DbGlja1wiLCBcIm9uUHJlc3NcIiwgXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDQgPSBbXCJvbktleURvd25cIiwgXCJvbkNoYW5nZVwiLCBcIm9uSW5wdXRcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVRleHRcIiwgXCJvbkNsaWNrXCIsIFwicmVmS2V5XCIsIFwicmVmXCJdO1xudXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcyA9IHN0YXRlQ2hhbmdlVHlwZXMkMTtcbmZ1bmN0aW9uIHVzZUNvbWJvYm94KHVzZXJQcm9wcykge1xuICBpZiAodXNlclByb3BzID09PSB2b2lkIDApIHtcbiAgICB1c2VyUHJvcHMgPSB7fTtcbiAgfVxuICB2YWxpZGF0ZVByb3BUeXBlcyQxKHVzZXJQcm9wcywgdXNlQ29tYm9ib3gpO1xuICAvLyBQcm9wcyBkZWZhdWx0cyBhbmQgZGVzdHJ1Y3R1cmluZy5cbiAgdmFyIHByb3BzID0gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQxLCB1c2VyUHJvcHMpO1xuICB2YXIgaXRlbXMgPSBwcm9wcy5pdGVtcyxcbiAgICBzY3JvbGxJbnRvVmlldyA9IHByb3BzLnNjcm9sbEludG9WaWV3LFxuICAgIGVudmlyb25tZW50ID0gcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgZ2V0QTExeVN0YXR1c01lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5U3RhdHVzTWVzc2FnZSxcbiAgICBnZXRBMTF5U2VsZWN0aW9uTWVzc2FnZSA9IHByb3BzLmdldEExMXlTZWxlY3Rpb25NZXNzYWdlLFxuICAgIGl0ZW1Ub1N0cmluZyA9IHByb3BzLml0ZW1Ub1N0cmluZztcbiAgLy8gSW5pdGlhbCBzdGF0ZSBkZXBlbmRpbmcgb24gY29udHJvbGxlZCBwcm9wcy5cbiAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSQxKHByb3BzKTtcbiAgdmFyIF91c2VDb250cm9sbGVkUmVkdWNlciA9IHVzZUNvbnRyb2xsZWRSZWR1Y2VyKGRvd25zaGlmdFVzZUNvbWJvYm94UmVkdWNlciwgaW5pdGlhbFN0YXRlLCBwcm9wcyksXG4gICAgc3RhdGUgPSBfdXNlQ29udHJvbGxlZFJlZHVjZXJbMF0sXG4gICAgZGlzcGF0Y2ggPSBfdXNlQ29udHJvbGxlZFJlZHVjZXJbMV07XG4gIHZhciBpc09wZW4gPSBzdGF0ZS5pc09wZW4sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCA9IHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtID0gc3RhdGUuc2VsZWN0ZWRJdGVtLFxuICAgIGlucHV0VmFsdWUgPSBzdGF0ZS5pbnB1dFZhbHVlO1xuXG4gIC8vIEVsZW1lbnQgcmVmcy5cbiAgdmFyIG1lbnVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBpdGVtUmVmcyA9IHVzZVJlZih7fSk7XG4gIHZhciBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHRvZ2dsZUJ1dHRvblJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICAvLyBwcmV2ZW50IGlkIHJlLWdlbmVyYXRpb24gYmV0d2VlbiByZW5kZXJzLlxuICB2YXIgZWxlbWVudElkcyA9IHVzZUVsZW1lbnRJZHMocHJvcHMpO1xuICAvLyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgaXRlbXMgd2UgaGFkIG9uIHByZXZpb3VzIGN5Y2xlLlxuICB2YXIgcHJldmlvdXNSZXN1bHRDb3VudFJlZiA9IHVzZVJlZigpO1xuICAvLyB1dGlsaXR5IGNhbGxiYWNrIHRvIGdldCBpdGVtIGVsZW1lbnQuXG4gIHZhciBsYXRlc3QgPSB1c2VMYXRlc3RSZWYoe1xuICAgIHN0YXRlOiBzdGF0ZSxcbiAgICBwcm9wczogcHJvcHNcbiAgfSk7XG4gIHZhciBnZXRJdGVtTm9kZUZyb21JbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV07XG4gIH0sIFtlbGVtZW50SWRzXSk7XG5cbiAgLy8gRWZmZWN0cy5cbiAgLy8gU2V0cyBhMTF5IHN0YXR1cyBtZXNzYWdlIG9uIGNoYW5nZXMgaW4gc3RhdGUuXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTdGF0dXNNZXNzYWdlLCBbaXNPcGVuLCBoaWdobGlnaHRlZEluZGV4LCBpbnB1dFZhbHVlLCBpdGVtc10sIF9leHRlbmRzKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcmV2aW91c1Jlc3VsdENvdW50OiBwcmV2aW91c1Jlc3VsdENvdW50UmVmLmN1cnJlbnQsXG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW1Ub1N0cmluZ1xuICB9LCBzdGF0ZSkpO1xuICAvLyBTZXRzIGExMXkgc3RhdHVzIG1lc3NhZ2Ugb24gY2hhbmdlcyBpbiBzZWxlY3RlZEl0ZW0uXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTZWxlY3Rpb25NZXNzYWdlLCBbc2VsZWN0ZWRJdGVtXSwgX2V4dGVuZHMoe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IHByZXZpb3VzUmVzdWx0Q291bnRSZWYuY3VycmVudCxcbiAgICBpdGVtczogaXRlbXMsXG4gICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nXG4gIH0sIHN0YXRlKSk7XG4gIC8vIFNjcm9sbCBvbiBoaWdobGlnaHRlZCBpdGVtIGlmIGNoYW5nZSBjb21lcyBmcm9tIGtleWJvYXJkLlxuICB2YXIgc2hvdWxkU2Nyb2xsUmVmID0gdXNlU2Nyb2xsSW50b1ZpZXcoe1xuICAgIG1lbnVFbGVtZW50OiBtZW51UmVmLmN1cnJlbnQsXG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpc09wZW46IGlzT3BlbixcbiAgICBpdGVtUmVmczogaXRlbVJlZnMsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4OiBnZXRJdGVtTm9kZUZyb21JbmRleFxuICB9KTtcbiAgdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcm9wczogcHJvcHMsXG4gICAgc3RhdGU6IHN0YXRlXG4gIH0pO1xuICAvLyBGb2N1cyB0aGUgaW5wdXQgb24gZmlyc3QgcmVuZGVyIGlmIHJlcXVpcmVkLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmb2N1c09uT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gICAgaWYgKGZvY3VzT25PcGVuICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJldmlvdXNSZXN1bHRDb3VudFJlZi5jdXJyZW50ID0gaXRlbXMubGVuZ3RoO1xuICB9KTtcbiAgLy8gQWRkIG1vdXNlL3RvdWNoIGV2ZW50cyB0byBkb2N1bWVudC5cbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZU1vdXNlQW5kVG91Y2hUcmFja2VyKGlzT3BlbiwgW2lucHV0UmVmLCBtZW51UmVmLCB0b2dnbGVCdXR0b25SZWZdLCBlbnZpcm9ubWVudCwgZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IElucHV0Qmx1cixcbiAgICAgIHNlbGVjdEl0ZW06IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xuICB2YXIgc2V0R2V0dGVyUHJvcENhbGxJbmZvID0gdXNlR2V0dGVyUHJvcHNDYWxsZWRDaGVja2VyKCdnZXRJbnB1dFByb3BzJywgJ2dldE1lbnVQcm9wcycpO1xuICAvLyBNYWtlIGluaXRpYWwgcmVmIGZhbHNlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuICAvLyBSZXNldCBpdGVtUmVmcyBvbiBjbG9zZS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2Vudmlyb25tZW50JGRvY3VtZW50O1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBpdGVtUmVmcy5jdXJyZW50ID0ge307XG4gICAgfSBlbHNlIGlmICgoKF9lbnZpcm9ubWVudCRkb2N1bWVudCA9IGVudmlyb25tZW50LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2Vudmlyb25tZW50JGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICE9PSBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgICBpbnB1dFJlZiA9PSBudWxsIHx8IChfaW5wdXRSZWYkY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2lzT3BlbiwgZW52aXJvbm1lbnRdKTtcblxuICAvKiBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucyAqL1xuICB2YXIgaW5wdXRLZXlEb3duSGFuZGxlcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dEb3duOiBmdW5jdGlvbiBBcnJvd0Rvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkFycm93RG93bixcbiAgICAgICAgICBhbHRLZXk6IGV2ZW50LmFsdEtleVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBBcnJvd1VwOiBmdW5jdGlvbiBBcnJvd1VwKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBJbnB1dEtleURvd25BcnJvd1VwLFxuICAgICAgICAgIGFsdEtleTogZXZlbnQuYWx0S2V5XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIEhvbWU6IGZ1bmN0aW9uIEhvbWUoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkhvbWVcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRW5kOiBmdW5jdGlvbiBFbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVuZFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBFc2NhcGU6IGZ1bmN0aW9uIEVzY2FwZShldmVudCkge1xuICAgICAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICAgICAgaWYgKGxhdGVzdFN0YXRlLmlzT3BlbiB8fCBsYXRlc3RTdGF0ZS5pbnB1dFZhbHVlIHx8IGxhdGVzdFN0YXRlLnNlbGVjdGVkSXRlbSB8fCBsYXRlc3RTdGF0ZS5oaWdobGlnaHRlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVzY2FwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgRW50ZXI6IGZ1bmN0aW9uIEVudGVyKGV2ZW50KSB7XG4gICAgICAgIHZhciBsYXRlc3RTdGF0ZSA9IGxhdGVzdC5jdXJyZW50LnN0YXRlO1xuICAgICAgICAvLyBpZiBjbG9zZWQgb3Igbm8gaGlnaGxpZ2h0ZWQgaW5kZXgsIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmICghbGF0ZXN0U3RhdGUuaXNPcGVuIHx8IGV2ZW50LndoaWNoID09PSAyMjkgLy8gaWYgSU1FIGNvbXBvc2luZywgd2FpdCBmb3IgbmV4dCBFbnRlciBrZXlkb3duIGV2ZW50LlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVudGVyXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIFBhZ2VVcDogZnVuY3Rpb24gUGFnZVVwKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93blBhZ2VVcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUGFnZURvd246IGZ1bmN0aW9uIFBhZ2VEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93blBhZ2VEb3duXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZGlzcGF0Y2gsIGxhdGVzdF0pO1xuXG4gIC8vIEdldHRlciBwcm9wcy5cbiAgdmFyIGdldExhYmVsUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobGFiZWxQcm9wcykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBpZDogZWxlbWVudElkcy5sYWJlbElkLFxuICAgICAgaHRtbEZvcjogZWxlbWVudElkcy5pbnB1dElkXG4gICAgfSwgbGFiZWxQcm9wcyk7XG4gIH0sIFtlbGVtZW50SWRzXSk7XG4gIHZhciBnZXRNZW51UHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3RlbXAsIF90ZW1wMikge1xuICAgIHZhciBfZXh0ZW5kczI7XG4gICAgdmFyIF9yZWYgPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcCxcbiAgICAgIG9uTW91c2VMZWF2ZSA9IF9yZWYub25Nb3VzZUxlYXZlLFxuICAgICAgX3JlZiRyZWZLZXkgPSBfcmVmLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYkcmVmS2V5ID09PSB2b2lkIDAgPyAncmVmJyA6IF9yZWYkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkJDEpO1xuICAgIHZhciBfcmVmMiA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWYyJHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRNZW51UHJvcHMnLCBzdXBwcmVzc1JlZkVycm9yLCByZWZLZXksIG1lbnVSZWYpO1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChtZW51Tm9kZSkge1xuICAgICAgbWVudVJlZi5jdXJyZW50ID0gbWVudU5vZGU7XG4gICAgfSksIF9leHRlbmRzMi5pZCA9IGVsZW1lbnRJZHMubWVudUlkLCBfZXh0ZW5kczIucm9sZSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogXCJcIiArIGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHMyLm9uTW91c2VMZWF2ZSA9IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uTW91c2VMZWF2ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBNZW51TW91c2VMZWF2ZVxuICAgICAgfSk7XG4gICAgfSksIF9leHRlbmRzMiksIHJlc3QpO1xuICB9LCBbZGlzcGF0Y2gsIHNldEdldHRlclByb3BDYWxsSW5mbywgZWxlbWVudElkc10pO1xuICB2YXIgZ2V0SXRlbVByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wMykge1xuICAgIHZhciBfZXh0ZW5kczMsIF9yZWY0O1xuICAgIHZhciBfcmVmMyA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICBpdGVtUHJvcCA9IF9yZWYzLml0ZW0sXG4gICAgICBpbmRleFByb3AgPSBfcmVmMy5pbmRleCxcbiAgICAgIF9yZWYzJHJlZktleSA9IF9yZWYzLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYzJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmMyRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmMy5yZWYsXG4gICAgICBvbk1vdXNlTW92ZSA9IF9yZWYzLm9uTW91c2VNb3ZlLFxuICAgICAgb25Nb3VzZURvd24gPSBfcmVmMy5vbk1vdXNlRG93bixcbiAgICAgIG9uQ2xpY2sgPSBfcmVmMy5vbkNsaWNrO1xuICAgICAgX3JlZjMub25QcmVzcztcbiAgICAgIHZhciBkaXNhYmxlZFByb3AgPSBfcmVmMy5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMywgX2V4Y2x1ZGVkMiQxKTtcbiAgICBpZiAoZGlzYWJsZWRQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignUGFzc2luZyBcImRpc2FibGVkXCIgYXMgYW4gYXJndW1lbnQgdG8gZ2V0SXRlbVByb3BzIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4gUGxlYXNlIHVzZSB0aGUgaXNJdGVtRGlzYWJsZWQgcHJvcCBmcm9tIHVzZUNvbWJvYm94LicpO1xuICAgIH1cbiAgICB2YXIgX2xhdGVzdCRjdXJyZW50ID0gbGF0ZXN0LmN1cnJlbnQsXG4gICAgICBsYXRlc3RQcm9wcyA9IF9sYXRlc3QkY3VycmVudC5wcm9wcyxcbiAgICAgIGxhdGVzdFN0YXRlID0gX2xhdGVzdCRjdXJyZW50LnN0YXRlO1xuICAgIHZhciBfZ2V0SXRlbUFuZEluZGV4ID0gZ2V0SXRlbUFuZEluZGV4KGl0ZW1Qcm9wLCBpbmRleFByb3AsIGxhdGVzdFByb3BzLml0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRJdGVtUHJvcHMhJyksXG4gICAgICBpdGVtID0gX2dldEl0ZW1BbmRJbmRleFswXSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgZGlzYWJsZWQgPSBsYXRlc3RQcm9wcy5pc0l0ZW1EaXNhYmxlZChpdGVtLCBpbmRleCk7XG4gICAgdmFyIG9uU2VsZWN0S2V5ID0gJ29uQ2xpY2snO1xuICAgIHZhciBjdXN0b21DbGlja0hhbmRsZXIgPSBvbkNsaWNrO1xuICAgIHZhciBpdGVtSGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24gaXRlbUhhbmRsZU1vdXNlTW92ZSgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gbGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaG91bGRTY3JvbGxSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBJdGVtTW91c2VNb3ZlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbUhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaXRlbUhhbmRsZUNsaWNrKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBJdGVtQ2xpY2ssXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbUhhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uIGl0ZW1IYW5kbGVNb3VzZURvd24oZSkge1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1tyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChpdGVtTm9kZSkge1xuICAgICAgaWYgKGl0ZW1Ob2RlKSB7XG4gICAgICAgIGl0ZW1SZWZzLmN1cnJlbnRbZWxlbWVudElkcy5nZXRJdGVtSWQoaW5kZXgpXSA9IGl0ZW1Ob2RlO1xuICAgICAgfVxuICAgIH0pLCBfZXh0ZW5kczNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkLCBfZXh0ZW5kczNbJ2FyaWEtc2VsZWN0ZWQnXSA9IFwiXCIgKyAoaW5kZXggPT09IGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXgpLCBfZXh0ZW5kczMuaWQgPSBlbGVtZW50SWRzLmdldEl0ZW1JZChpbmRleCksIF9leHRlbmRzMy5yb2xlID0gJ29wdGlvbicsIF9leHRlbmRzMyksICFkaXNhYmxlZCAmJiAoX3JlZjQgPSB7fSwgX3JlZjRbb25TZWxlY3RLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMoY3VzdG9tQ2xpY2tIYW5kbGVyLCBpdGVtSGFuZGxlQ2xpY2spLCBfcmVmNCksIHtcbiAgICAgIG9uTW91c2VNb3ZlOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgaXRlbUhhbmRsZU1vdXNlTW92ZSksXG4gICAgICBvbk1vdXNlRG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25Nb3VzZURvd24sIGl0ZW1IYW5kbGVNb3VzZURvd24pXG4gICAgfSwgcmVzdCk7XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0LCBzaG91bGRTY3JvbGxSZWYsIGVsZW1lbnRJZHNdKTtcbiAgdmFyIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wNCkge1xuICAgIHZhciBfZXh0ZW5kczQ7XG4gICAgdmFyIF9yZWY1ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmNS5vbkNsaWNrO1xuICAgICAgX3JlZjUub25QcmVzcztcbiAgICAgIHZhciBfcmVmNSRyZWZLZXkgPSBfcmVmNS5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmNSRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjUkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY1LCBfZXhjbHVkZWQzKTtcbiAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiB0b2dnbGVCdXR0b25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2tcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIF9leHRlbmRzKChfZXh0ZW5kczQgPSB7fSwgX2V4dGVuZHM0W3JlZktleV0gPSBoYW5kbGVSZWZzKHJlZiwgZnVuY3Rpb24gKHRvZ2dsZUJ1dHRvbk5vZGUpIHtcbiAgICAgIHRvZ2dsZUJ1dHRvblJlZi5jdXJyZW50ID0gdG9nZ2xlQnV0dG9uTm9kZTtcbiAgICB9KSwgX2V4dGVuZHM0WydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHM0WydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3RTdGF0ZS5pc09wZW4sIF9leHRlbmRzNC5pZCA9IGVsZW1lbnRJZHMudG9nZ2xlQnV0dG9uSWQsIF9leHRlbmRzNC50YWJJbmRleCA9IC0xLCBfZXh0ZW5kczQpLCAhcmVzdC5kaXNhYmxlZCAmJiBfZXh0ZW5kcyh7fSwge1xuICAgICAgb25DbGljazogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2spXG4gICAgfSksIHJlc3QpO1xuICB9LCBbZGlzcGF0Y2gsIGxhdGVzdCwgZWxlbWVudElkc10pO1xuICB2YXIgZ2V0SW5wdXRQcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcDUsIF90ZW1wNikge1xuICAgIHZhciBfZXh0ZW5kczU7XG4gICAgdmFyIF9yZWY2ID0gX3RlbXA1ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNSxcbiAgICAgIG9uS2V5RG93biA9IF9yZWY2Lm9uS2V5RG93bixcbiAgICAgIG9uQ2hhbmdlID0gX3JlZjYub25DaGFuZ2UsXG4gICAgICBvbklucHV0ID0gX3JlZjYub25JbnB1dCxcbiAgICAgIG9uQmx1ciA9IF9yZWY2Lm9uQmx1cjtcbiAgICAgIF9yZWY2Lm9uQ2hhbmdlVGV4dDtcbiAgICAgIHZhciBvbkNsaWNrID0gX3JlZjYub25DbGljayxcbiAgICAgIF9yZWY2JHJlZktleSA9IF9yZWY2LnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWY2JHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmNiRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmNi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjYsIF9leGNsdWRlZDQpO1xuICAgIHZhciBfcmVmNyA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsXG4gICAgICBfcmVmNyRzdXBwcmVzc1JlZkVycm8gPSBfcmVmNy5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWY3JHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNyRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRJbnB1dFByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCBpbnB1dFJlZik7XG4gICAgdmFyIGxhdGVzdFN0YXRlID0gbGF0ZXN0LmN1cnJlbnQuc3RhdGU7XG4gICAgdmFyIGlucHV0SGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgaW5wdXRLZXlEb3duSGFuZGxlcnNba2V5XSkge1xuICAgICAgICBpbnB1dEtleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBpbnB1dEhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IElucHV0Q2hhbmdlLFxuICAgICAgICBpbnB1dFZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGlucHV0SGFuZGxlQmx1ciA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQmx1cihldmVudCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChsYXRlc3RTdGF0ZS5pc09wZW4gJiYgIW1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzTW91c2VEb3duKSB7XG4gICAgICAgIHZhciBpc0JsdXJCeVRhYkNoYW5nZSA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IG51bGwgJiYgZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZW52aXJvbm1lbnQuZG9jdW1lbnQuYm9keTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0Qmx1cixcbiAgICAgICAgICBzZWxlY3RJdGVtOiAhaXNCbHVyQnlUYWJDaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgaW5wdXRIYW5kbGVDbGljayA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQ2xpY2soKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IElucHV0Q2xpY2tcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL1xuICAgIHZhciBvbkNoYW5nZUtleSA9ICdvbkNoYW5nZSc7XG4gICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICBpZiAoIXJlc3QuZGlzYWJsZWQpIHtcbiAgICAgIHZhciBfZXZlbnRIYW5kbGVycztcbiAgICAgIGV2ZW50SGFuZGxlcnMgPSAoX2V2ZW50SGFuZGxlcnMgPSB7fSwgX2V2ZW50SGFuZGxlcnNbb25DaGFuZ2VLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DaGFuZ2UsIG9uSW5wdXQsIGlucHV0SGFuZGxlQ2hhbmdlKSwgX2V2ZW50SGFuZGxlcnMub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBpbnB1dEhhbmRsZUtleURvd24pLCBfZXZlbnRIYW5kbGVycy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIGlucHV0SGFuZGxlQmx1ciksIF9ldmVudEhhbmRsZXJzLm9uQ2xpY2sgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBpbnB1dEhhbmRsZUNsaWNrKSwgX2V2ZW50SGFuZGxlcnMpO1xuICAgIH1cbiAgICByZXR1cm4gX2V4dGVuZHMoKF9leHRlbmRzNSA9IHt9LCBfZXh0ZW5kczVbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoaW5wdXROb2RlKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50ID0gaW5wdXROb2RlO1xuICAgIH0pLCBfZXh0ZW5kczVbJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCddID0gbGF0ZXN0U3RhdGUuaXNPcGVuICYmIGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPiAtMSA/IGVsZW1lbnRJZHMuZ2V0SXRlbUlkKGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXgpIDogJycsIF9leHRlbmRzNVsnYXJpYS1hdXRvY29tcGxldGUnXSA9ICdsaXN0JywgX2V4dGVuZHM1WydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHM1WydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3RTdGF0ZS5pc09wZW4sIF9leHRlbmRzNVsnYXJpYS1sYWJlbGxlZGJ5J10gPSByZXN0ICYmIHJlc3RbJ2FyaWEtbGFiZWwnXSA/IHVuZGVmaW5lZCA6IGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHM1LmF1dG9Db21wbGV0ZSA9ICdvZmYnLCBfZXh0ZW5kczUuaWQgPSBlbGVtZW50SWRzLmlucHV0SWQsIF9leHRlbmRzNS5yb2xlID0gJ2NvbWJvYm94JywgX2V4dGVuZHM1LnZhbHVlID0gbGF0ZXN0U3RhdGUuaW5wdXRWYWx1ZSwgX2V4dGVuZHM1KSwgZXZlbnRIYW5kbGVycywgcmVzdCk7XG4gIH0sIFtzZXRHZXR0ZXJQcm9wQ2FsbEluZm8sIGxhdGVzdCwgZWxlbWVudElkcywgaW5wdXRLZXlEb3duSGFuZGxlcnMsIGRpc3BhdGNoLCBtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWYsIGVudmlyb25tZW50XSk7XG5cbiAgLy8gcmV0dXJuc1xuICB2YXIgdG9nZ2xlTWVudSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblRvZ2dsZU1lbnVcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBjbG9zZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25DbG9zZU1lbnVcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBvcGVuTWVudSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvbk9wZW5NZW51XG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICB2YXIgc2V0SGlnaGxpZ2h0ZWRJbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdIaWdobGlnaHRlZEluZGV4KSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbmV3SGlnaGxpZ2h0ZWRJbmRleFxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZWxlY3RJdGVtLFxuICAgICAgc2VsZWN0ZWRJdGVtOiBuZXdTZWxlY3RlZEl0ZW1cbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBzZXRJbnB1dFZhbHVlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld0lucHV0VmFsdWUpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblNldElucHV0VmFsdWUsXG4gICAgICBpbnB1dFZhbHVlOiBuZXdJbnB1dFZhbHVlXG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICB2YXIgcmVzZXQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25SZXNldCQxXG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIC8vIHByb3AgZ2V0dGVycy5cbiAgICBnZXRJdGVtUHJvcHM6IGdldEl0ZW1Qcm9wcyxcbiAgICBnZXRMYWJlbFByb3BzOiBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wczogZ2V0TWVudVByb3BzLFxuICAgIGdldElucHV0UHJvcHM6IGdldElucHV0UHJvcHMsXG4gICAgZ2V0VG9nZ2xlQnV0dG9uUHJvcHM6IGdldFRvZ2dsZUJ1dHRvblByb3BzLFxuICAgIC8vIGFjdGlvbnMuXG4gICAgdG9nZ2xlTWVudTogdG9nZ2xlTWVudSxcbiAgICBvcGVuTWVudTogb3Blbk1lbnUsXG4gICAgY2xvc2VNZW51OiBjbG9zZU1lbnUsXG4gICAgc2V0SGlnaGxpZ2h0ZWRJbmRleDogc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBzZXRJbnB1dFZhbHVlOiBzZXRJbnB1dFZhbHVlLFxuICAgIHNlbGVjdEl0ZW06IHNlbGVjdEl0ZW0sXG4gICAgcmVzZXQ6IHJlc2V0LFxuICAgIC8vIHN0YXRlLlxuICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgaXNPcGVuOiBpc09wZW4sXG4gICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICB9O1xufVxuXG52YXIgZGVmYXVsdFN0YXRlVmFsdWVzID0ge1xuICBhY3RpdmVJbmRleDogLTEsXG4gIHNlbGVjdGVkSXRlbXM6IFtdXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIGEgc3RhdGUga2V5IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKiAxLiBjb250cm9sbGVkIHByb3AsIDIuIGluaXRpYWwgcHJvcCwgMy4gZGVmYXVsdCBwcm9wLCA0LiBkZWZhdWx0XG4gKiB2YWx1ZSBmcm9tIERvd25zaGlmdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXkgUHJvcHMga2V5IHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSBmb3IuXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhhdCBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXRJbml0aWFsVmFsdWUocHJvcHMsIHByb3BLZXkpIHtcbiAgcmV0dXJuIGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCBwcm9wS2V5LCBkZWZhdWx0U3RhdGVWYWx1ZXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc3RhdGUga2V5IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKiAxLiBjb250cm9sbGVkIHByb3AsIDIuIGRlZmF1bHQgcHJvcCwgMy4gZGVmYXVsdCB2YWx1ZSBmcm9tIERvd25zaGlmdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXkgUHJvcHMga2V5IHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSBmb3IuXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhhdCBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUocHJvcHMsIHByb3BLZXkpIHtcbiAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCBwcm9wS2V5LCBkZWZhdWx0U3RhdGVWYWx1ZXMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluaXRpYWwgc3RhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHByb3BzLiBJdCB1c2VzIGluaXRpYWwsIGRlZmF1bHRcbiAqIGFuZCBjb250cm9sbGVkIHByb3BzIHJlbGF0ZWQgdG8gc3RhdGUgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGluaXRpYWwgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShwcm9wcykge1xuICB2YXIgYWN0aXZlSW5kZXggPSBnZXRJbml0aWFsVmFsdWUocHJvcHMsICdhY3RpdmVJbmRleCcpO1xuICB2YXIgc2VsZWN0ZWRJdGVtcyA9IGdldEluaXRpYWxWYWx1ZShwcm9wcywgJ3NlbGVjdGVkSXRlbXMnKTtcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBkcm9wZG93biBrZXlkb3duIG9wZXJhdGlvbiBpcyBwZXJtaXR0ZWQuIFNob3VsZCBub3QgYmVcbiAqIGFsbG93ZWQgb24ga2V5ZG93biB3aXRoIG1vZGlmaWVyIGtleXMgKGN0cmwsIGFsdCwgc2hpZnQsIG1ldGEpLCBvblxuICogaW5wdXQgZWxlbWVudCB3aXRoIHRleHQgY29udGVudCB0aGF0IGlzIGVpdGhlciBoaWdobGlnaHRlZCBvciBzZWxlY3Rpb25cbiAqIGN1cnNvciBpcyBub3QgYXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgVGhlIGV2ZW50IGZyb20ga2V5ZG93bi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkKGV2ZW50KSB7XG4gIGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiZcbiAgLy8gaWYgZWxlbWVudCBpcyBhIHRleHQgaW5wdXRcbiAgZWxlbWVudC52YWx1ZSAhPT0gJycgJiYgKFxuICAvLyBhbmQgd2UgaGF2ZSB0ZXh0IGluIGl0XG4gIC8vIGFuZCBjdXJzb3IgaXMgZWl0aGVyIG5vdCBhdCB0aGUgc3RhcnQgb3IgaXMgY3VycmVudGx5IGhpZ2hsaWdodGluZyB0ZXh0LlxuICBlbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9PSAwIHx8IGVsZW1lbnQuc2VsZWN0aW9uRW5kICE9PSAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbWVzc2FnZSB0byBiZSBhZGRlZCB0byBhcmlhLWxpdmUgcmVnaW9uIHdoZW4gaXRlbSBpcyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWxlY3Rpb25QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYTExeSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2Uoc2VsZWN0aW9uUGFyYW1ldGVycykge1xuICB2YXIgcmVtb3ZlZFNlbGVjdGVkSXRlbSA9IHNlbGVjdGlvblBhcmFtZXRlcnMucmVtb3ZlZFNlbGVjdGVkSXRlbSxcbiAgICBpdGVtVG9TdHJpbmdMb2NhbCA9IHNlbGVjdGlvblBhcmFtZXRlcnMuaXRlbVRvU3RyaW5nO1xuICByZXR1cm4gaXRlbVRvU3RyaW5nTG9jYWwocmVtb3ZlZFNlbGVjdGVkSXRlbSkgKyBcIiBoYXMgYmVlbiByZW1vdmVkLlwiO1xufVxudmFyIHByb3BUeXBlcyA9IF9leHRlbmRzKHt9LCBjb21tb25Qcm9wVHlwZXMsIHtcbiAgc2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBpbml0aWFsU2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBkZWZhdWx0U2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmVJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaW5pdGlhbEFjdGl2ZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBkZWZhdWx0QWN0aXZlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9uQWN0aXZlSW5kZXhDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBrZXlOYXZpZ2F0aW9uTmV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAga2V5TmF2aWdhdGlvblByZXZpb3VzOiBQcm9wVHlwZXMuc3RyaW5nXG59KTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGl0ZW1Ub1N0cmluZzogZGVmYXVsdFByb3BzJDMuaXRlbVRvU3RyaW5nLFxuICBzdGF0ZVJlZHVjZXI6IGRlZmF1bHRQcm9wcyQzLnN0YXRlUmVkdWNlcixcbiAgZW52aXJvbm1lbnQ6IGRlZmF1bHRQcm9wcyQzLmVudmlyb25tZW50LFxuICBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2U6IGdldEExMXlSZW1vdmFsTWVzc2FnZSxcbiAga2V5TmF2aWdhdGlvbk5leHQ6ICdBcnJvd1JpZ2h0JyxcbiAga2V5TmF2aWdhdGlvblByZXZpb3VzOiAnQXJyb3dMZWZ0J1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1tdXRhYmxlLWV4cG9ydHNcbnZhciB2YWxpZGF0ZVByb3BUeXBlcyA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVQcm9wVHlwZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhvcHRpb25zLCBjYWxsZXIpIHtcbiAgICBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBvcHRpb25zLCAncHJvcCcsIGNhbGxlci5uYW1lKTtcbiAgfTtcbn1cblxudmFyIFNlbGVjdGVkSXRlbUNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fc2VsZWN0ZWRfaXRlbV9jbGlja19fJyA6IDA7XG52YXIgU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3NlbGVjdGVkX2l0ZW1fa2V5ZG93bl9kZWxldGVfXycgOiAxO1xudmFyIFNlbGVjdGVkSXRlbUtleURvd25CYWNrc3BhY2UgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19zZWxlY3RlZF9pdGVtX2tleWRvd25fYmFja3NwYWNlX18nIDogMjtcbnZhciBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19zZWxlY3RlZF9pdGVtX2tleWRvd25fbmF2aWdhdGlvbl9uZXh0X18nIDogMztcbnZhciBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fc2VsZWN0ZWRfaXRlbV9rZXlkb3duX25hdmlnYXRpb25fcHJldmlvdXNfXycgOiA0O1xudmFyIERyb3Bkb3duS2V5RG93bk5hdmlnYXRpb25QcmV2aW91cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Ryb3Bkb3duX2tleWRvd25fbmF2aWdhdGlvbl9wcmV2aW91c19fJyA6IDU7XG52YXIgRHJvcGRvd25LZXlEb3duQmFja3NwYWNlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZHJvcGRvd25fa2V5ZG93bl9iYWNrc3BhY2VfXycgOiA2O1xudmFyIERyb3Bkb3duQ2xpY2sgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19kcm9wZG93bl9jbGlja19fJyA6IDc7XG52YXIgRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW0gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9hZGRfc2VsZWN0ZWRfaXRlbV9fJyA6IDg7XG52YXIgRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZW1vdmVfc2VsZWN0ZWRfaXRlbV9fJyA6IDk7XG52YXIgRnVuY3Rpb25TZXRTZWxlY3RlZEl0ZW1zID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2V0X3NlbGVjdGVkX2l0ZW1zX18nIDogMTA7XG52YXIgRnVuY3Rpb25TZXRBY3RpdmVJbmRleCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX3NldF9hY3RpdmVfaW5kZXhfXycgOiAxMTtcbnZhciBGdW5jdGlvblJlc2V0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fcmVzZXRfXycgOiAxMjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgU2VsZWN0ZWRJdGVtQ2xpY2s6IFNlbGVjdGVkSXRlbUNsaWNrLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duRGVsZXRlOiBTZWxlY3RlZEl0ZW1LZXlEb3duRGVsZXRlLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlOiBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQ6IFNlbGVjdGVkSXRlbUtleURvd25OYXZpZ2F0aW9uTmV4dCxcbiAgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czogU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91cyxcbiAgRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzOiBEcm9wZG93bktleURvd25OYXZpZ2F0aW9uUHJldmlvdXMsXG4gIERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZTogRHJvcGRvd25LZXlEb3duQmFja3NwYWNlLFxuICBEcm9wZG93bkNsaWNrOiBEcm9wZG93bkNsaWNrLFxuICBGdW5jdGlvbkFkZFNlbGVjdGVkSXRlbTogRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW0sXG4gIEZ1bmN0aW9uUmVtb3ZlU2VsZWN0ZWRJdGVtOiBGdW5jdGlvblJlbW92ZVNlbGVjdGVkSXRlbSxcbiAgRnVuY3Rpb25TZXRTZWxlY3RlZEl0ZW1zOiBGdW5jdGlvblNldFNlbGVjdGVkSXRlbXMsXG4gIEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXg6IEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXgsXG4gIEZ1bmN0aW9uUmVzZXQ6IEZ1bmN0aW9uUmVzZXRcbn0pO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5mdW5jdGlvbiBkb3duc2hpZnRNdWx0aXBsZVNlbGVjdGlvblJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICB2YXIgdHlwZSA9IGFjdGlvbi50eXBlLFxuICAgIGluZGV4ID0gYWN0aW9uLmluZGV4LFxuICAgIHByb3BzID0gYWN0aW9uLnByb3BzLFxuICAgIHNlbGVjdGVkSXRlbSA9IGFjdGlvbi5zZWxlY3RlZEl0ZW07XG4gIHZhciBhY3RpdmVJbmRleCA9IHN0YXRlLmFjdGl2ZUluZGV4LFxuICAgIHNlbGVjdGVkSXRlbXMgPSBzdGF0ZS5zZWxlY3RlZEl0ZW1zO1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBTZWxlY3RlZEl0ZW1DbGljazpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCAtIDEgPCAwID8gMCA6IGFjdGl2ZUluZGV4IC0gMVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25OZXh0OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4ICsgMSA+PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA/IC0xIDogYWN0aXZlSW5kZXggKyAxXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlOlxuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZTpcbiAgICAgIHtcbiAgICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBuZXdBY3RpdmVJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID09PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBuZXdBY3RpdmVJbmRleCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMjtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VzID0gX2V4dGVuZHMoe1xuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLmNvbmNhdChzZWxlY3RlZEl0ZW1zLnNsaWNlKDAsIGFjdGl2ZUluZGV4KSwgc2VsZWN0ZWRJdGVtcy5zbGljZShhY3RpdmVJbmRleCArIDEpKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgYWN0aXZlSW5kZXg6IG5ld0FjdGl2ZUluZGV4XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIERyb3Bkb3duS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IHNlbGVjdGVkSXRlbXMuc2xpY2UoMCwgc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW06XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXS5jb25jYXQoc2VsZWN0ZWRJdGVtcywgW3NlbGVjdGVkSXRlbV0pXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEcm9wZG93bkNsaWNrOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGdW5jdGlvblJlbW92ZVNlbGVjdGVkSXRlbTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9uZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtSW5kZXggPSBzZWxlY3RlZEl0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIF9uZXdBY3RpdmVJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSXRlbUluZGV4ID09PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBfbmV3QWN0aXZlSW5kZXggPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXS5jb25jYXQoc2VsZWN0ZWRJdGVtcy5zbGljZSgwLCBzZWxlY3RlZEl0ZW1JbmRleCksIHNlbGVjdGVkSXRlbXMuc2xpY2Uoc2VsZWN0ZWRJdGVtSW5kZXggKyAxKSksXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IF9uZXdBY3RpdmVJbmRleFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIEZ1bmN0aW9uU2V0U2VsZWN0ZWRJdGVtczpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1NlbGVjdGVkSXRlbXMgPSBhY3Rpb24uc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBuZXdTZWxlY3RlZEl0ZW1zXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgRnVuY3Rpb25TZXRBY3RpdmVJbmRleDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9uZXdBY3RpdmVJbmRleDIgPSBhY3Rpb24uYWN0aXZlSW5kZXg7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgYWN0aXZlSW5kZXg6IF9uZXdBY3RpdmVJbmRleDJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBGdW5jdGlvblJlc2V0OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IGdldERlZmF1bHRWYWx1ZShwcm9wcywgJ2FjdGl2ZUluZGV4JyksXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IGdldERlZmF1bHRWYWx1ZShwcm9wcywgJ3NlbGVjdGVkSXRlbXMnKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgY2FsbGVkIHdpdGhvdXQgcHJvcGVyIGFjdGlvbiB0eXBlLicpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGNoYW5nZXMpO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wicmVmS2V5XCIsIFwicmVmXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcInNlbGVjdGVkSXRlbVwiLCBcImluZGV4XCJdLFxuICBfZXhjbHVkZWQyID0gW1wicmVmS2V5XCIsIFwicmVmXCIsIFwib25LZXlEb3duXCIsIFwib25DbGlja1wiLCBcInByZXZlbnRLZXlBY3Rpb25cIl07XG51c2VNdWx0aXBsZVNlbGVjdGlvbi5zdGF0ZUNoYW5nZVR5cGVzID0gc3RhdGVDaGFuZ2VUeXBlcztcbmZ1bmN0aW9uIHVzZU11bHRpcGxlU2VsZWN0aW9uKHVzZXJQcm9wcykge1xuICBpZiAodXNlclByb3BzID09PSB2b2lkIDApIHtcbiAgICB1c2VyUHJvcHMgPSB7fTtcbiAgfVxuICB2YWxpZGF0ZVByb3BUeXBlcyh1c2VyUHJvcHMsIHVzZU11bHRpcGxlU2VsZWN0aW9uKTtcbiAgLy8gUHJvcHMgZGVmYXVsdHMgYW5kIGRlc3RydWN0dXJpbmcuXG4gIHZhciBwcm9wcyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHMsIHVzZXJQcm9wcyk7XG4gIHZhciBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5UmVtb3ZhbE1lc3NhZ2UsXG4gICAgaXRlbVRvU3RyaW5nID0gcHJvcHMuaXRlbVRvU3RyaW5nLFxuICAgIGVudmlyb25tZW50ID0gcHJvcHMuZW52aXJvbm1lbnQsXG4gICAga2V5TmF2aWdhdGlvbk5leHQgPSBwcm9wcy5rZXlOYXZpZ2F0aW9uTmV4dCxcbiAgICBrZXlOYXZpZ2F0aW9uUHJldmlvdXMgPSBwcm9wcy5rZXlOYXZpZ2F0aW9uUHJldmlvdXM7XG5cbiAgLy8gUmVkdWNlciBpbml0LlxuICB2YXIgX3VzZUNvbnRyb2xsZWRSZWR1Y2VyID0gdXNlQ29udHJvbGxlZFJlZHVjZXIkMShkb3duc2hpZnRNdWx0aXBsZVNlbGVjdGlvblJlZHVjZXIsIGdldEluaXRpYWxTdGF0ZShwcm9wcyksIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VDb250cm9sbGVkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VDb250cm9sbGVkUmVkdWNlclsxXTtcbiAgdmFyIGFjdGl2ZUluZGV4ID0gc3RhdGUuYWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtcyA9IHN0YXRlLnNlbGVjdGVkSXRlbXM7XG5cbiAgLy8gUmVmcy5cbiAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICB2YXIgZHJvcGRvd25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRJdGVtcyk7XG4gIHZhciBzZWxlY3RlZEl0ZW1SZWZzID0gdXNlUmVmKCk7XG4gIHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudCA9IFtdO1xuICB2YXIgbGF0ZXN0ID0gdXNlTGF0ZXN0UmVmKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgcHJvcHM6IHByb3BzXG4gIH0pO1xuXG4gIC8vIEVmZmVjdHMuXG4gIC8qIFNldHMgYTExeSBzdGF0dXMgbWVzc2FnZSBvbiBjaGFuZ2VzIGluIHNlbGVjdGVkSXRlbS4gKi9cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCB8fCBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPCBwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYuY3VycmVudC5sZW5ndGgpIHtcbiAgICAgIHZhciByZW1vdmVkU2VsZWN0ZWRJdGVtID0gcHJldmlvdXNTZWxlY3RlZEl0ZW1zUmVmLmN1cnJlbnQuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgIH0pO1xuICAgICAgc2V0U3RhdHVzKGdldEExMXlSZW1vdmFsTWVzc2FnZSh7XG4gICAgICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nLFxuICAgICAgICByZXN1bHRDb3VudDogc2VsZWN0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICAgIHJlbW92ZWRTZWxlY3RlZEl0ZW06IHJlbW92ZWRTZWxlY3RlZEl0ZW0sXG4gICAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCxcbiAgICAgICAgYWN0aXZlU2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW1zW2FjdGl2ZUluZGV4XVxuICAgICAgfSksIGVudmlyb25tZW50LmRvY3VtZW50KTtcbiAgICB9XG4gICAgcHJldmlvdXNTZWxlY3RlZEl0ZW1zUmVmLmN1cnJlbnQgPSBzZWxlY3RlZEl0ZW1zO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbc2VsZWN0ZWRJdGVtcy5sZW5ndGhdKTtcbiAgLy8gU2V0cyBmb2N1cyBvbiBhY3RpdmUgaXRlbS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IC0xICYmIGRyb3Bkb3duUmVmLmN1cnJlbnQpIHtcbiAgICAgIGRyb3Bkb3duUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudFthY3RpdmVJbmRleF0pIHtcbiAgICAgIHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudFthY3RpdmVJbmRleF0uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthY3RpdmVJbmRleF0pO1xuICB1c2VDb250cm9sUHJvcHNWYWxpZGF0b3Ioe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBzdGF0ZTogc3RhdGVcbiAgfSk7XG4gIHZhciBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8gPSB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIoJ2dldERyb3Bkb3duUHJvcHMnKTtcbiAgLy8gTWFrZSBpbml0aWFsIHJlZiBmYWxzZS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucy5cbiAgdmFyIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVycyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmO1xuICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZba2V5TmF2aWdhdGlvblByZXZpb3VzXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91c1xuICAgICAgfSk7XG4gICAgfSwgX3JlZltrZXlOYXZpZ2F0aW9uTmV4dF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNlbGVjdGVkSXRlbUtleURvd25OYXZpZ2F0aW9uTmV4dFxuICAgICAgfSk7XG4gICAgfSwgX3JlZi5EZWxldGUgPSBmdW5jdGlvbiBEZWxldGUoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNlbGVjdGVkSXRlbUtleURvd25EZWxldGVcbiAgICAgIH0pO1xuICAgIH0sIF9yZWYuQmFja3NwYWNlID0gZnVuY3Rpb24gQmFja3NwYWNlKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlXG4gICAgICB9KTtcbiAgICB9LCBfcmVmO1xuICB9LCBbZGlzcGF0Y2gsIGtleU5hdmlnYXRpb25OZXh0LCBrZXlOYXZpZ2F0aW9uUHJldmlvdXNdKTtcbiAgdmFyIGRyb3Bkb3duS2V5RG93bkhhbmRsZXJzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyO1xuICAgIHJldHVybiBfcmVmMiA9IHt9LCBfcmVmMltrZXlOYXZpZ2F0aW9uUHJldmlvdXNdID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkKGV2ZW50KSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIF9yZWYyLkJhY2tzcGFjZSA9IGZ1bmN0aW9uIEJhY2tzcGFjZShldmVudCkge1xuICAgICAgaWYgKGlzS2V5RG93bk9wZXJhdGlvblBlcm1pdHRlZChldmVudCkpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBfcmVmMjtcbiAgfSwgW2Rpc3BhdGNoLCBrZXlOYXZpZ2F0aW9uUHJldmlvdXNdKTtcblxuICAvLyBHZXR0ZXIgcHJvcHMuXG4gIHZhciBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcCkge1xuICAgIHZhciBfZXh0ZW5kczI7XG4gICAgdmFyIF9yZWYzID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsXG4gICAgICBfcmVmMyRyZWZLZXkgPSBfcmVmMy5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmMyRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjMkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjMucmVmLFxuICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2ssXG4gICAgICBvbktleURvd24gPSBfcmVmMy5vbktleURvd24sXG4gICAgICBzZWxlY3RlZEl0ZW1Qcm9wID0gX3JlZjMuc2VsZWN0ZWRJdGVtLFxuICAgICAgaW5kZXhQcm9wID0gX3JlZjMuaW5kZXgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZCk7XG4gICAgdmFyIGxhdGVzdFN0YXRlID0gbGF0ZXN0LmN1cnJlbnQuc3RhdGU7XG4gICAgdmFyIF9nZXRJdGVtQW5kSW5kZXggPSBnZXRJdGVtQW5kSW5kZXgoc2VsZWN0ZWRJdGVtUHJvcCwgaW5kZXhQcm9wLCBsYXRlc3RTdGF0ZS5zZWxlY3RlZEl0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyEnKSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgaXNGb2N1c2FibGUgPSBpbmRleCA+IC0xICYmIGluZGV4ID09PSBsYXRlc3RTdGF0ZS5hY3RpdmVJbmRleDtcbiAgICB2YXIgc2VsZWN0ZWRJdGVtSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBzZWxlY3RlZEl0ZW1IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU2VsZWN0ZWRJdGVtQ2xpY2ssXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgc2VsZWN0ZWRJdGVtSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXkgPSBub3JtYWxpemVBcnJvd0tleShldmVudCk7XG4gICAgICBpZiAoa2V5ICYmIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVyc1trZXldKSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW1Ob2RlKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtTm9kZSkge1xuICAgICAgICBzZWxlY3RlZEl0ZW1SZWZzLmN1cnJlbnQucHVzaChzZWxlY3RlZEl0ZW1Ob2RlKTtcbiAgICAgIH1cbiAgICB9KSwgX2V4dGVuZHMyLnRhYkluZGV4ID0gaXNGb2N1c2FibGUgPyAwIDogLTEsIF9leHRlbmRzMi5vbkNsaWNrID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgc2VsZWN0ZWRJdGVtSGFuZGxlQ2xpY2spLCBfZXh0ZW5kczIub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBzZWxlY3RlZEl0ZW1IYW5kbGVLZXlEb3duKSwgX2V4dGVuZHMyKSwgcmVzdCk7XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0LCBzZWxlY3RlZEl0ZW1LZXlEb3duSGFuZGxlcnNdKTtcbiAgdmFyIGdldERyb3Bkb3duUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3RlbXAyLCBfdGVtcDMpIHtcbiAgICB2YXIgX2V4dGVuZHMzO1xuICAgIHZhciBfcmVmNCA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmNCRyZWZLZXkgPSBfcmVmNC5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmNCRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjQkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjQucmVmLFxuICAgICAgb25LZXlEb3duID0gX3JlZjQub25LZXlEb3duLFxuICAgICAgb25DbGljayA9IF9yZWY0Lm9uQ2xpY2ssXG4gICAgICBfcmVmNCRwcmV2ZW50S2V5QWN0aW8gPSBfcmVmNC5wcmV2ZW50S2V5QWN0aW9uLFxuICAgICAgcHJldmVudEtleUFjdGlvbiA9IF9yZWY0JHByZXZlbnRLZXlBY3RpbyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNCRwcmV2ZW50S2V5QWN0aW8sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZDIpO1xuICAgIHZhciBfcmVmNSA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICBfcmVmNSRzdXBwcmVzc1JlZkVycm8gPSBfcmVmNS5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWY1JHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNSRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXREcm9wZG93blByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCBkcm9wZG93blJlZik7XG4gICAgdmFyIGRyb3Bkb3duSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGRyb3Bkb3duSGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgZHJvcGRvd25LZXlEb3duSGFuZGxlcnNba2V5XSkge1xuICAgICAgICBkcm9wZG93bktleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBkcm9wZG93bkhhbmRsZUNsaWNrID0gZnVuY3Rpb24gZHJvcGRvd25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRHJvcGRvd25DbGlja1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gX2V4dGVuZHMoKF9leHRlbmRzMyA9IHt9LCBfZXh0ZW5kczNbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoZHJvcGRvd25Ob2RlKSB7XG4gICAgICBpZiAoZHJvcGRvd25Ob2RlKSB7XG4gICAgICAgIGRyb3Bkb3duUmVmLmN1cnJlbnQgPSBkcm9wZG93bk5vZGU7XG4gICAgICB9XG4gICAgfSksIF9leHRlbmRzMyksICFwcmV2ZW50S2V5QWN0aW9uICYmIHtcbiAgICAgIG9uS2V5RG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBkcm9wZG93bkhhbmRsZUtleURvd24pLFxuICAgICAgb25DbGljazogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgZHJvcGRvd25IYW5kbGVDbGljaylcbiAgICB9LCByZXN0KTtcbiAgfSwgW2Rpc3BhdGNoLCBkcm9wZG93bktleURvd25IYW5kbGVycywgc2V0R2V0dGVyUHJvcENhbGxJbmZvXSk7XG5cbiAgLy8gcmV0dXJuc1xuICB2YXIgYWRkU2VsZWN0ZWRJdGVtID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uQWRkU2VsZWN0ZWRJdGVtLFxuICAgICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW1cbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciByZW1vdmVTZWxlY3RlZEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0sXG4gICAgICBzZWxlY3RlZEl0ZW06IHNlbGVjdGVkSXRlbVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldFNlbGVjdGVkSXRlbXMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtcykge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0U2VsZWN0ZWRJdGVtcyxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IG5ld1NlbGVjdGVkSXRlbXNcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBzZXRBY3RpdmVJbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdBY3RpdmVJbmRleCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXgsXG4gICAgICBhY3RpdmVJbmRleDogbmV3QWN0aXZlSW5kZXhcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciByZXNldCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblJlc2V0XG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIGdldFNlbGVjdGVkSXRlbVByb3BzOiBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyxcbiAgICBnZXREcm9wZG93blByb3BzOiBnZXREcm9wZG93blByb3BzLFxuICAgIGFkZFNlbGVjdGVkSXRlbTogYWRkU2VsZWN0ZWRJdGVtLFxuICAgIHJlbW92ZVNlbGVjdGVkSXRlbTogcmVtb3ZlU2VsZWN0ZWRJdGVtLFxuICAgIHNldFNlbGVjdGVkSXRlbXM6IHNldFNlbGVjdGVkSXRlbXMsXG4gICAgc2V0QWN0aXZlSW5kZXg6IHNldEFjdGl2ZUluZGV4LFxuICAgIHJlc2V0OiByZXNldCxcbiAgICBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLFxuICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgeyBEb3duc2hpZnQkMSBhcyBkZWZhdWx0LCByZXNldElkQ291bnRlciwgdXNlQ29tYm9ib3gsIHVzZU11bHRpcGxlU2VsZWN0aW9uLCB1c2VTZWxlY3QgfTtcbiJdLCJuYW1lcyI6WyJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIl9leHRlbmRzIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9pbmhlcml0c0xvb3NlIiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJjbG9uZUVsZW1lbnQiLCJDb21wb25lbnQiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZHVjZXIiLCJ1c2VNZW1vIiwiaXNGb3J3YXJkUmVmIiwiY29tcHV0ZSIsIl9fYXNzaWduIiwiaWRDb3VudGVyIiwiY2JUb0NiIiwiY2IiLCJub29wIiwic2Nyb2xsSW50b1ZpZXciLCJub2RlIiwibWVudU5vZGUiLCJhY3Rpb25zIiwiYm91bmRhcnkiLCJibG9jayIsInNjcm9sbE1vZGUiLCJmb3JFYWNoIiwiX3JlZiIsImVsIiwidG9wIiwibGVmdCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJpc09yQ29udGFpbnNOb2RlIiwicGFyZW50IiwiY2hpbGQiLCJlbnZpcm9ubWVudCIsInJlc3VsdCIsIk5vZGUiLCJjb250YWlucyIsImRlYm91bmNlIiwiZm4iLCJ0aW1lIiwiY2FuY2VsIiwidGltZW91dElkIiwiY2xlYXJUaW1lb3V0Iiwid3JhcHBlciIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5Iiwic2V0VGltZW91dCIsImFwcGx5IiwiY2FsbEFsbEV2ZW50SGFuZGxlcnMiLCJfbGVuMiIsImZucyIsIl9rZXkyIiwiZXZlbnQiLCJfbGVuMyIsIl9rZXkzIiwic29tZSIsImNvbmNhdCIsInByZXZlbnREb3duc2hpZnREZWZhdWx0IiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVFdmVudCIsImhhbmRsZVJlZnMiLCJfbGVuNCIsInJlZnMiLCJfa2V5NCIsInJlZiIsImN1cnJlbnQiLCJnZW5lcmF0ZUlkIiwiU3RyaW5nIiwicmVzZXRJZENvdW50ZXIiLCJjb25zb2xlIiwid2FybiIsImdldEExMXlTdGF0dXNNZXNzYWdlJDEiLCJfcmVmMiIsImlzT3BlbiIsInJlc3VsdENvdW50IiwicHJldmlvdXNSZXN1bHRDb3VudCIsInVud3JhcEFycmF5IiwiYXJnIiwiZGVmYXVsdFZhbHVlIiwiaXNBcnJheSIsImlzRE9NRWxlbWVudCIsImVsZW1lbnQiLCJ0eXBlIiwiZ2V0RWxlbWVudFByb3BzIiwicHJvcHMiLCJyZXF1aXJlZFByb3AiLCJmbk5hbWUiLCJwcm9wTmFtZSIsImVycm9yIiwic3RhdGVLZXlzIiwicGlja1N0YXRlIiwic3RhdGUiLCJrIiwiZ2V0U3RhdGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldlN0YXRlIiwia2V5IiwiaXNDb250cm9sbGVkUHJvcCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZUFycm93S2V5Iiwia2V5Q29kZSIsImluZGV4T2YiLCJpc1BsYWluT2JqZWN0Iiwib2JqIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiZ2V0SGlnaGxpZ2h0ZWRJbmRleCIsInN0YXJ0Iiwib2Zmc2V0IiwiaXRlbXMiLCJpc0l0ZW1EaXNhYmxlZCIsImNpcmN1bGFyIiwiY291bnQiLCJpdGVtc0xhc3RJbmRleCIsImhpZ2hsaWdodGVkSW5kZXgiLCJnZXROb25EaXNhYmxlZEluZGV4IiwiYmFja3dhcmRzIiwiaW5kZXgiLCJfaW5kZXgiLCJ0YXJnZXRXaXRoaW5Eb3duc2hpZnQiLCJ0YXJnZXQiLCJkb3duc2hpZnRFbGVtZW50cyIsImNoZWNrQWN0aXZlRWxlbWVudCIsImNvbnRleHROb2RlIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwidmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwid2FybmluZ0Rlc2NyaXB0aW9uIiwicHJvcEtleSIsImNsZWFudXBTdGF0dXMiLCJkb2N1bWVudFByb3AiLCJnZXRTdGF0dXNEaXYiLCJ0ZXh0Q29udGVudCIsInNldFN0YXR1cyIsInN0YXR1cyIsImRpdiIsInN0YXR1c0RpdiIsImdldEVsZW1lbnRCeUlkIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImFzc2lnbiIsInN0eWxlIiwiYm9yZGVyIiwiY2xpcCIsImhlaWdodCIsIm1hcmdpbiIsIm92ZXJmbG93IiwicGFkZGluZyIsInBvc2l0aW9uIiwid2lkdGgiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1bmtub3duIiwibW91c2VVcCIsIml0ZW1Nb3VzZUVudGVyIiwia2V5RG93bkFycm93VXAiLCJrZXlEb3duQXJyb3dEb3duIiwia2V5RG93bkVzY2FwZSIsImtleURvd25FbnRlciIsImtleURvd25Ib21lIiwia2V5RG93bkVuZCIsImNsaWNrSXRlbSIsImJsdXJJbnB1dCIsImNoYW5nZUlucHV0Iiwia2V5RG93blNwYWNlQnV0dG9uIiwiY2xpY2tCdXR0b24iLCJibHVyQnV0dG9uIiwiY29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtIiwidG91Y2hFbmQiLCJzdGF0ZUNoYW5nZVR5cGVzJDMiLCJmcmVlemUiLCJfX3Byb3RvX18iLCJfZXhjbHVkZWQkNCIsIl9leGNsdWRlZDIkMyIsIl9leGNsdWRlZDMkMiIsIl9leGNsdWRlZDQkMSIsIl9leGNsdWRlZDUiLCJEb3duc2hpZnQiLCJfQ29tcG9uZW50IiwiX3Byb3BzIiwiX3RoaXMiLCJpZCIsIm1lbnVJZCIsImxhYmVsSWQiLCJpbnB1dElkIiwiZ2V0SXRlbUlkIiwiaW5wdXQiLCJpdGVtQ291bnQiLCJ0aW1lb3V0SWRzIiwiaW50ZXJuYWxTZXRUaW1lb3V0IiwiZmlsdGVyIiwiaSIsInB1c2giLCJzZXRJdGVtQ291bnQiLCJ1bnNldEl0ZW1Db3VudCIsIl9pdGVtIiwiY3VycmVudEVsZW1lbnROb2RlIiwiZ2V0SXRlbU5vZGVGcm9tSW5kZXgiLCJoYXNBdHRyaWJ1dGUiLCJzZXRIaWdobGlnaHRlZEluZGV4Iiwib3RoZXJTdGF0ZVRvU2V0IiwiZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgiLCJpbnRlcm5hbFNldFN0YXRlIiwiY2xlYXJTZWxlY3Rpb24iLCJzZWxlY3RlZEl0ZW0iLCJpbnB1dFZhbHVlIiwiZGVmYXVsdElzT3BlbiIsInNlbGVjdEl0ZW0iLCJpdGVtIiwiaXRlbVRvU3RyaW5nIiwic2VsZWN0SXRlbUF0SW5kZXgiLCJpdGVtSW5kZXgiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzdGF0ZVRvU2V0IiwiaXNJdGVtU2VsZWN0ZWQiLCJvbkNoYW5nZUFyZyIsIm9uU3RhdGVDaGFuZ2VBcmciLCJpc1N0YXRlVG9TZXRGdW5jdGlvbiIsIm9uSW5wdXRWYWx1ZUNoYW5nZSIsImdldFN0YXRlQW5kSGVscGVycyIsInNldFN0YXRlIiwibmV3U3RhdGVUb1NldCIsInN0YXRlUmVkdWNlciIsIm5leHRTdGF0ZSIsImhhc01vcmVTdGF0ZVRoYW5UeXBlIiwib25TdGF0ZUNoYW5nZSIsIm9uU2VsZWN0Iiwib25DaGFuZ2UiLCJvblVzZXJBY3Rpb24iLCJyb290UmVmIiwiX3Jvb3ROb2RlIiwiZ2V0Um9vdFByb3BzIiwiX3RlbXAiLCJfdGVtcDIiLCJfZXh0ZW5kczIiLCJfcmVmJHJlZktleSIsInJlZktleSIsInJlc3QiLCJfcmVmMiRzdXBwcmVzc1JlZkVycm8iLCJzdXBwcmVzc1JlZkVycm9yIiwiY2FsbGVkIiwiX3RoaXMkZ2V0U3RhdGUiLCJyb2xlIiwia2V5RG93bkhhbmRsZXJzIiwiQXJyb3dEb3duIiwiX3RoaXMyIiwicHJldmVudERlZmF1bHQiLCJhbW91bnQiLCJzaGlmdEtleSIsIm1vdmVIaWdobGlnaHRlZEluZGV4IiwiZ2V0SXRlbUNvdW50IiwiX3RoaXMyJGdldFN0YXRlIiwibmV4dEhpZ2hsaWdodGVkSW5kZXgiLCJBcnJvd1VwIiwiX3RoaXMzIiwiX3RoaXMzJGdldFN0YXRlIiwiRW50ZXIiLCJ3aGljaCIsIl90aGlzJGdldFN0YXRlMiIsIml0ZW1Ob2RlIiwiRXNjYXBlIiwicmVzZXQiLCJidXR0b25LZXlEb3duSGFuZGxlcnMiLCJfIiwidG9nZ2xlTWVudSIsImlucHV0S2V5RG93bkhhbmRsZXJzIiwiSG9tZSIsIl90aGlzJGdldFN0YXRlMyIsIm5ld0hpZ2hsaWdodGVkSW5kZXgiLCJFbmQiLCJfdGhpcyRnZXRTdGF0ZTQiLCJnZXRUb2dnbGVCdXR0b25Qcm9wcyIsIl90ZW1wMyIsIl9yZWYzIiwib25DbGljayIsIm9uUHJlc3MiLCJvbktleURvd24iLCJvbktleVVwIiwib25CbHVyIiwiX3RoaXMkZ2V0U3RhdGU1IiwiZW5hYmxlZEV2ZW50SGFuZGxlcnMiLCJidXR0b25IYW5kbGVDbGljayIsImJ1dHRvbkhhbmRsZUtleURvd24iLCJidXR0b25IYW5kbGVLZXlVcCIsImJ1dHRvbkhhbmRsZUJsdXIiLCJldmVudEhhbmRsZXJzIiwiZGlzYWJsZWQiLCJmb2N1cyIsImJsdXJUYXJnZXQiLCJpc01vdXNlRG93biIsImdldExhYmVsUHJvcHMiLCJodG1sRm9yIiwiZ2V0SW5wdXRQcm9wcyIsIl90ZW1wNCIsIl9yZWY0Iiwib25JbnB1dCIsIm9uQ2hhbmdlVGV4dCIsIm9uQ2hhbmdlS2V5IiwiX3RoaXMkZ2V0U3RhdGU2IiwiX2V2ZW50SGFuZGxlcnMiLCJpbnB1dEhhbmRsZUNoYW5nZSIsImlucHV0SGFuZGxlS2V5RG93biIsImlucHV0SGFuZGxlQmx1ciIsImF1dG9Db21wbGV0ZSIsInZhbHVlIiwiZG93bnNoaWZ0QnV0dG9uSXNBY3RpdmUiLCJkYXRhc2V0IiwidG9nZ2xlIiwibWVudVJlZiIsIl9tZW51Tm9kZSIsImdldE1lbnVQcm9wcyIsIl90ZW1wNSIsIl90ZW1wNiIsIl9leHRlbmRzMyIsIl9yZWY1IiwiX3JlZjUkcmVmS2V5IiwiX3JlZjYiLCJfcmVmNiRzdXBwcmVzc1JlZkVycm8iLCJnZXRJdGVtUHJvcHMiLCJfdGVtcDciLCJfZW5hYmxlZEV2ZW50SGFuZGxlcnMiLCJfcmVmNyIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZURvd24iLCJfcmVmNyRpdGVtIiwib25TZWxlY3RLZXkiLCJjdXN0b21DbGlja0hhbmRsZXIiLCJhdm9pZFNjcm9sbGluZyIsImNsZWFySXRlbXMiLCJfcmVmOCIsIl9yZWY5IiwiX3RoaXMkZ2V0U3RhdGU3Iiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJ1cGRhdGVTdGF0dXMiLCJnZXRBMTF5U3RhdHVzTWVzc2FnZSIsImhpZ2hsaWdodGVkSXRlbSIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkaW5pdGlhbEhpIiwiaW5pdGlhbEhpZ2hsaWdodGVkSW5kZXgiLCJfaGlnaGxpZ2h0ZWRJbmRleCIsIl90aGlzJHByb3BzJGluaXRpYWxJcyIsImluaXRpYWxJc09wZW4iLCJfaXNPcGVuIiwiX3RoaXMkcHJvcHMkaW5pdGlhbEluIiwiaW5pdGlhbElucHV0VmFsdWUiLCJfaW5wdXRWYWx1ZSIsIl90aGlzJHByb3BzJGluaXRpYWxTZSIsImluaXRpYWxTZWxlY3RlZEl0ZW0iLCJfc2VsZWN0ZWRJdGVtIiwiX3N0YXRlIiwiX3Byb3RvIiwiaW50ZXJuYWxDbGVhclRpbWVvdXRzIiwiZ2V0U3RhdGUkMSIsInN0YXRlVG9NZXJnZSIsInNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3IiwiX3RoaXMkZ2V0U3RhdGU4IiwiX3RoaXMkZ2V0U3RhdGU5IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpczQiLCJ2YWxpZGF0ZUdldE1lbnVQcm9wc0NhbGxlZENvcnJlY3RseSIsIm9uTW91c2VVcCIsImNvbnRleHRXaXRoaW5Eb3duc2hpZnQiLCJvbk91dGVyQ2xpY2siLCJvblRvdWNoU3RhcnQiLCJpc1RvdWNoTW92ZSIsIm9uVG91Y2hNb3ZlIiwib25Ub3VjaEVuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGVhbnVwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNob3VsZFNjcm9sbCIsIl9yZWYxMCIsImN1cnJlbnRIaWdobGlnaHRlZEluZGV4IiwiX3JlZjExIiwicHJldkhpZ2hsaWdodGVkSW5kZXgiLCJzY3JvbGxXaGVuT3BlbiIsInNjcm9sbFdoZW5OYXZpZ2F0aW5nIiwiY29tcG9uZW50RGlkVXBkYXRlIiwic2VsZWN0ZWRJdGVtQ2hhbmdlZCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJ2YWxpZGF0ZUdldFJvb3RQcm9wc0NhbGxlZENvcnJlY3RseSIsIkVycm9yIiwiZGVmYXVsdFByb3BzIiwicHJldkl0ZW0iLCJ3aW5kb3ciLCJzdGF0ZUNoYW5nZVR5cGVzIiwicHJvcFR5cGVzIiwiZnVuYyIsIm51bWJlciIsImJvb2wiLCJhbnkiLCJzdHJpbmciLCJzaGFwZSIsImlzUmVxdWlyZWQiLCJEb3duc2hpZnQkMSIsIl9yZWYxMiIsIl9yZWYxMyIsInJlZktleVNwZWNpZmllZCIsImlzQ29tcG9zaXRlIiwiX2V4Y2x1ZGVkJDMiLCJkcm9wZG93bkRlZmF1bHRTdGF0ZVZhbHVlcyIsImNhbGxPbkNoYW5nZVByb3BzIiwiYWN0aW9uIiwibmV3U3RhdGUiLCJjaGFuZ2VzIiwiaW52b2tlT25DaGFuZ2VIYW5kbGVyIiwiaGFuZGxlciIsImNhcGl0YWxpemVTdHJpbmciLCJzIiwiYSIsImdldEExMXlTZWxlY3Rpb25NZXNzYWdlIiwic2VsZWN0aW9uUGFyYW1ldGVycyIsIml0ZW1Ub1N0cmluZ0xvY2FsIiwidXBkYXRlQTExeVN0YXR1cyIsImdldEExMXlNZXNzYWdlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUVsZW1lbnRJZHMiLCJ0b2dnbGVCdXR0b25JZCIsInJlYWN0SWQiLCJ1c2VJZCIsImVsZW1lbnRJZHNSZWYiLCJfcmVmMiRpZCIsImdldEl0ZW1BbmRJbmRleCIsIml0ZW1Qcm9wIiwiaW5kZXhQcm9wIiwiZXJyb3JNZXNzYWdlIiwiaXNBY2NlcHRlZENoYXJhY3RlcktleSIsInRlc3QiLCJzbGljZSIsInRvVXBwZXJDYXNlIiwidXNlTGF0ZXN0UmVmIiwidmFsIiwidXNlRW5oYW5jZWRSZWR1Y2VyIiwicmVkdWNlciIsImluaXRpYWxTdGF0ZSIsInByZXZTdGF0ZVJlZiIsImFjdGlvblJlZiIsImVuaGFuY2VkUmVkdWNlciIsIl91c2VSZWR1Y2VyIiwiZGlzcGF0Y2giLCJwcm9wc1JlZiIsImRpc3BhdGNoV2l0aFByb3BzIiwidXNlQ29udHJvbGxlZFJlZHVjZXIkMSIsIl91c2VFbmhhbmNlZFJlZHVjZXIiLCJkZWZhdWx0UHJvcHMkMyIsImdldERlZmF1bHRWYWx1ZSQxIiwiZGVmYXVsdFN0YXRlVmFsdWVzIiwiZ2V0SW5pdGlhbFZhbHVlJDEiLCJpbml0aWFsVmFsdWUiLCJnZXRJbml0aWFsU3RhdGUkMiIsImdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4iLCJ1c2VNb3VzZUFuZFRvdWNoVHJhY2tlciIsImRvd25zaGlmdEVsZW1lbnRSZWZzIiwiaGFuZGxlQmx1ciIsIm1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiIsIm1hcCIsInVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlciIsImlzSW5pdGlhbE1vdW50UmVmIiwicHJvcEtleXMiLCJnZXR0ZXJQcm9wc0NhbGxlZFJlZiIsImFjYyIsInByb3BDYWxsSW5mbyIsImVsZW1lbnRSZWYiLCJzZXRHZXR0ZXJQcm9wQ2FsbEluZm8iLCJ1c2VBMTF5TWVzc2FnZVNldHRlciIsImRlcGVuZGVuY3lBcnJheSIsImlzSW5pdGlhbE1vdW50IiwidXNlU2Nyb2xsSW50b1ZpZXciLCJpdGVtUmVmcyIsIm1lbnVFbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdQcm9wIiwic2hvdWxkU2Nyb2xsUmVmIiwidXNlQ29udHJvbFByb3BzVmFsaWRhdG9yIiwicHJldlByb3BzUmVmIiwiZ2V0Q2hhbmdlc09uU2VsZWN0aW9uIiwiX3Byb3BzJGl0ZW1zIiwic2hvdWxkU2VsZWN0IiwiY29tbW9uUHJvcFR5cGVzIiwiY29tbW9uRHJvcGRvd25Qcm9wVHlwZXMiLCJkZWZhdWx0U2VsZWN0ZWRJdGVtIiwib25TZWxlY3RlZEl0ZW1DaGFuZ2UiLCJvbkhpZ2hsaWdodGVkSW5kZXhDaGFuZ2UiLCJvbklzT3BlbkNoYW5nZSIsImRvd25zaGlmdENvbW1vblJlZHVjZXIiLCJJdGVtTW91c2VNb3ZlIiwiTWVudU1vdXNlTGVhdmUiLCJUb2dnbGVCdXR0b25DbGljayIsIkZ1bmN0aW9uVG9nZ2xlTWVudSIsIkZ1bmN0aW9uT3Blbk1lbnUiLCJGdW5jdGlvbkNsb3NlTWVudSIsIkZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCIsIkZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSIsIkZ1bmN0aW9uUmVzZXQiLCJnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleSIsIl9hIiwia2V5c1NvRmFyIiwibG93ZXJDYXNlZEtleXNTb0ZhciIsInRvTG93ZXJDYXNlIiwib2Zmc2V0SW5kZXgiLCJzdGFydHNXaXRoIiwicHJvcFR5cGVzJDIiLCJhcnJheSIsImRlZmF1bHRQcm9wcyQyIiwidmFsaWRhdGVQcm9wVHlwZXMkMiIsIm9wdGlvbnMiLCJjYWxsZXIiLCJjaGVja1Byb3BUeXBlcyIsIm5hbWUiLCJUb2dnbGVCdXR0b25DbGljayQxIiwiVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93RG93biIsIlRvZ2dsZUJ1dHRvbktleURvd25BcnJvd1VwIiwiVG9nZ2xlQnV0dG9uS2V5RG93bkNoYXJhY3RlciIsIlRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUiLCJUb2dnbGVCdXR0b25LZXlEb3duSG9tZSIsIlRvZ2dsZUJ1dHRvbktleURvd25FbmQiLCJUb2dnbGVCdXR0b25LZXlEb3duRW50ZXIiLCJUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b24iLCJUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwIiwiVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VEb3duIiwiVG9nZ2xlQnV0dG9uQmx1ciIsIk1lbnVNb3VzZUxlYXZlJDEiLCJJdGVtTW91c2VNb3ZlJDEiLCJJdGVtQ2xpY2skMSIsIkZ1bmN0aW9uVG9nZ2xlTWVudSQxIiwiRnVuY3Rpb25PcGVuTWVudSQxIiwiRnVuY3Rpb25DbG9zZU1lbnUkMSIsIkZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCQxIiwiRnVuY3Rpb25TZWxlY3RJdGVtJDEiLCJGdW5jdGlvblNldElucHV0VmFsdWUkMSIsIkZ1bmN0aW9uUmVzZXQkMiIsInN0YXRlQ2hhbmdlVHlwZXMkMiIsIkl0ZW1DbGljayIsIkZ1bmN0aW9uU2VsZWN0SXRlbSIsImRvd25zaGlmdFNlbGVjdFJlZHVjZXIiLCJhbHRLZXkiLCJsb3dlcmNhc2VkS2V5IiwiX2hpZ2hsaWdodGVkSW5kZXgyIiwiX2V4Y2x1ZGVkJDIiLCJfZXhjbHVkZWQyJDIiLCJfZXhjbHVkZWQzJDEiLCJ1c2VTZWxlY3QiLCJ1c2VyUHJvcHMiLCJfdXNlQ29udHJvbGxlZFJlZHVjZXIiLCJ0b2dnbGVCdXR0b25SZWYiLCJjbGVhclRpbWVvdXRSZWYiLCJlbGVtZW50SWRzIiwicHJldmlvdXNSZXN1bHRDb3VudFJlZiIsImxhdGVzdCIsIm91dGVyRGlzcGF0Y2giLCJmb2N1c09uT3BlbiIsInRvZ2dsZUJ1dHRvbktleURvd25IYW5kbGVycyIsIlBhZ2VVcCIsIlBhZ2VEb3duIiwiY3VycmVudFN0YXRlIiwibmV3U2VsZWN0ZWRJdGVtIiwic2V0SW5wdXRWYWx1ZSIsIm5ld0lucHV0VmFsdWUiLCJsYWJlbFByb3BzIiwib25Nb3VzZUxlYXZlIiwibWVudUhhbmRsZU1vdXNlTGVhdmUiLCJfcmVmMyRyZWZLZXkiLCJfcmVmNCRzdXBwcmVzc1JlZkVycm8iLCJsYXRlc3RTdGF0ZSIsInRvZ2dsZUJ1dHRvbkhhbmRsZUNsaWNrIiwidG9nZ2xlQnV0dG9uSGFuZGxlQmx1ciIsInRvZ2dsZUJ1dHRvbkhhbmRsZUtleURvd24iLCJ0b2dnbGVQcm9wcyIsInRvZ2dsZUJ1dHRvbk5vZGUiLCJ0YWJJbmRleCIsIl9leHRlbmRzNCIsImRpc2FibGVkUHJvcCIsIl9sYXRlc3QkY3VycmVudCIsImxhdGVzdFByb3BzIiwiX2dldEl0ZW1BbmRJbmRleCIsIml0ZW1IYW5kbGVNb3VzZU1vdmUiLCJpdGVtSGFuZGxlQ2xpY2siLCJpdGVtUHJvcHMiLCJJbnB1dEtleURvd25BcnJvd0Rvd24iLCJJbnB1dEtleURvd25BcnJvd1VwIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duSG9tZSIsIklucHV0S2V5RG93bkVuZCIsIklucHV0S2V5RG93blBhZ2VVcCIsIklucHV0S2V5RG93blBhZ2VEb3duIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJJbnB1dENoYW5nZSIsIklucHV0Qmx1ciIsIklucHV0Q2xpY2siLCJGdW5jdGlvblJlc2V0JDEiLCJDb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW0iLCJzdGF0ZUNoYW5nZVR5cGVzJDEiLCJnZXRJbml0aWFsU3RhdGUkMSIsImRlZmF1bHRJbnB1dFZhbHVlIiwicHJvcFR5cGVzJDEiLCJ1c2VDb250cm9sbGVkUmVkdWNlciIsInByZXZpb3VzU2VsZWN0ZWRJdGVtUmVmIiwidmFsaWRhdGVQcm9wVHlwZXMkMSIsInZhbGlkYXRlUHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzJDEiLCJkb3duc2hpZnRVc2VDb21ib2JveFJlZHVjZXIiLCJfZXhjbHVkZWQkMSIsIl9leGNsdWRlZDIkMSIsIl9leGNsdWRlZDMiLCJfZXhjbHVkZWQ0IiwidXNlQ29tYm9ib3giLCJpbnB1dFJlZiIsIl9lbnZpcm9ubWVudCRkb2N1bWVudCIsIl9pbnB1dFJlZiRjdXJyZW50IiwiaXRlbUhhbmRsZU1vdXNlRG93biIsImUiLCJfZXh0ZW5kczUiLCJfcmVmNiRyZWZLZXkiLCJfcmVmNyRzdXBwcmVzc1JlZkVycm8iLCJpc0JsdXJCeVRhYkNoYW5nZSIsInJlbGF0ZWRUYXJnZXQiLCJpbnB1dEhhbmRsZUNsaWNrIiwiaW5wdXROb2RlIiwiYWN0aXZlSW5kZXgiLCJzZWxlY3RlZEl0ZW1zIiwiZ2V0SW5pdGlhbFZhbHVlIiwiZ2V0RGVmYXVsdFZhbHVlIiwiZ2V0SW5pdGlhbFN0YXRlIiwiaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkIiwibWV0YUtleSIsImN0cmxLZXkiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJnZXRBMTF5UmVtb3ZhbE1lc3NhZ2UiLCJyZW1vdmVkU2VsZWN0ZWRJdGVtIiwiaW5pdGlhbFNlbGVjdGVkSXRlbXMiLCJkZWZhdWx0U2VsZWN0ZWRJdGVtcyIsImluaXRpYWxBY3RpdmVJbmRleCIsImRlZmF1bHRBY3RpdmVJbmRleCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiLCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UiLCJrZXlOYXZpZ2F0aW9uTmV4dCIsImtleU5hdmlnYXRpb25QcmV2aW91cyIsIlNlbGVjdGVkSXRlbUNsaWNrIiwiU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZSIsIlNlbGVjdGVkSXRlbUtleURvd25CYWNrc3BhY2UiLCJTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQiLCJTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzIiwiRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzIiwiRHJvcGRvd25LZXlEb3duQmFja3NwYWNlIiwiRHJvcGRvd25DbGljayIsIkZ1bmN0aW9uQWRkU2VsZWN0ZWRJdGVtIiwiRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0iLCJGdW5jdGlvblNldFNlbGVjdGVkSXRlbXMiLCJGdW5jdGlvblNldEFjdGl2ZUluZGV4IiwiZG93bnNoaWZ0TXVsdGlwbGVTZWxlY3Rpb25SZWR1Y2VyIiwibmV3QWN0aXZlSW5kZXgiLCJfbmV3QWN0aXZlSW5kZXgiLCJzZWxlY3RlZEl0ZW1JbmRleCIsIm5ld1NlbGVjdGVkSXRlbXMiLCJfbmV3QWN0aXZlSW5kZXgyIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsInVzZU11bHRpcGxlU2VsZWN0aW9uIiwiZHJvcGRvd25SZWYiLCJwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYiLCJzZWxlY3RlZEl0ZW1SZWZzIiwiZmluZCIsImFjdGl2ZVNlbGVjdGVkSXRlbSIsInNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVycyIsIkRlbGV0ZSIsIkJhY2tzcGFjZSIsImRyb3Bkb3duS2V5RG93bkhhbmRsZXJzIiwiZ2V0U2VsZWN0ZWRJdGVtUHJvcHMiLCJzZWxlY3RlZEl0ZW1Qcm9wIiwiaXNGb2N1c2FibGUiLCJzZWxlY3RlZEl0ZW1IYW5kbGVDbGljayIsInNlbGVjdGVkSXRlbUhhbmRsZUtleURvd24iLCJzZWxlY3RlZEl0ZW1Ob2RlIiwiZ2V0RHJvcGRvd25Qcm9wcyIsIl9yZWY0JHJlZktleSIsIl9yZWY0JHByZXZlbnRLZXlBY3RpbyIsInByZXZlbnRLZXlBY3Rpb24iLCJfcmVmNSRzdXBwcmVzc1JlZkVycm8iLCJkcm9wZG93bkhhbmRsZUtleURvd24iLCJkcm9wZG93bkhhbmRsZUNsaWNrIiwiZHJvcGRvd25Ob2RlIiwiYWRkU2VsZWN0ZWRJdGVtIiwicmVtb3ZlU2VsZWN0ZWRJdGVtIiwic2V0U2VsZWN0ZWRJdGVtcyIsInNldEFjdGl2ZUluZGV4IiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/dist/downshift.esm.js\n");
4107
-
4108
- /***/ }),
4109
-
4110
- /***/ "../../../node_modules/downshift/node_modules/react-is/cjs/react-is.development.js":
4111
- /*!*****************************************************************************************!*\
4112
- !*** ../../../node_modules/downshift/node_modules/react-is/cjs/react-is.development.js ***!
4113
- \*****************************************************************************************/
4114
- /***/ ((__unused_webpack_module, exports) => {
4115
-
4116
- "use strict";
4117
- eval("/** @license React v17.0.2\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \nif (true) {\n (function() {\n \"use strict\";\n var isValidElementType = function isValidElementType(type) {\n if (typeof type === \"string\" || typeof type === \"function\") {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI) {\n return true;\n }\n if (typeof type === \"object\" && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n return false;\n };\n var typeOf = function typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n var $$typeof = object.$$typeof;\n switch($$typeof){\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n default:\n var $$typeofType = type && type.$$typeof;\n switch($$typeofType){\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n return undefined;\n };\n var isAsyncMode = function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isAsyncMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isConcurrentMode = function isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isConcurrentMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isContextConsumer = function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n var isContextProvider = function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n };\n var isElement = function isElement(object) {\n return typeof object === \"object\" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n var isForwardRef = function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n var isFragment = function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n var isLazy = function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n var isMemo = function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n var isPortal = function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n var isProfiler = function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n var isStrictMode = function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n var isSuspense = function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n // ATTENTION\n // When adding new symbols to this file,\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n var REACT_ELEMENT_TYPE = 0xeac7;\n var REACT_PORTAL_TYPE = 0xeaca;\n var REACT_FRAGMENT_TYPE = 0xeacb;\n var REACT_STRICT_MODE_TYPE = 0xeacc;\n var REACT_PROFILER_TYPE = 0xead2;\n var REACT_PROVIDER_TYPE = 0xeacd;\n var REACT_CONTEXT_TYPE = 0xeace;\n var REACT_FORWARD_REF_TYPE = 0xead0;\n var REACT_SUSPENSE_TYPE = 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = 0xead8;\n var REACT_MEMO_TYPE = 0xead3;\n var REACT_LAZY_TYPE = 0xead4;\n var REACT_BLOCK_TYPE = 0xead9;\n var REACT_SERVER_BLOCK_TYPE = 0xeada;\n var REACT_FUNDAMENTAL_TYPE = 0xead5;\n var REACT_SCOPE_TYPE = 0xead7;\n var REACT_OPAQUE_ID_TYPE = 0xeae0;\n var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\n var REACT_OFFSCREEN_TYPE = 0xeae2;\n var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n if (typeof Symbol === \"function\" && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor(\"react.element\");\n REACT_PORTAL_TYPE = symbolFor(\"react.portal\");\n REACT_FRAGMENT_TYPE = symbolFor(\"react.fragment\");\n REACT_STRICT_MODE_TYPE = symbolFor(\"react.strict_mode\");\n REACT_PROFILER_TYPE = symbolFor(\"react.profiler\");\n REACT_PROVIDER_TYPE = symbolFor(\"react.provider\");\n REACT_CONTEXT_TYPE = symbolFor(\"react.context\");\n REACT_FORWARD_REF_TYPE = symbolFor(\"react.forward_ref\");\n REACT_SUSPENSE_TYPE = symbolFor(\"react.suspense\");\n REACT_SUSPENSE_LIST_TYPE = symbolFor(\"react.suspense_list\");\n REACT_MEMO_TYPE = symbolFor(\"react.memo\");\n REACT_LAZY_TYPE = symbolFor(\"react.lazy\");\n REACT_BLOCK_TYPE = symbolFor(\"react.block\");\n REACT_SERVER_BLOCK_TYPE = symbolFor(\"react.server.block\");\n REACT_FUNDAMENTAL_TYPE = symbolFor(\"react.fundamental\");\n REACT_SCOPE_TYPE = symbolFor(\"react.scope\");\n REACT_OPAQUE_ID_TYPE = symbolFor(\"react.opaque.id\");\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor(\"react.debug_trace_mode\");\n REACT_OFFSCREEN_TYPE = symbolFor(\"react.offscreen\");\n REACT_LEGACY_HIDDEN_TYPE = symbolFor(\"react.legacy_hidden\");\n }\n // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n var enableScopeAPI = false; // Experimental Create Event Handle API.\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false;\n var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0NBT0MsR0FFRDtBQUVBLElBQUlBLElBQXFDLEVBQUU7SUFDeEMsWUFBVztRQUNkO1lBd0RTRyxxQkFBVCxTQUFTQSxtQkFBbUJDLElBQUksRUFBRTtZQUNoQyxJQUFJLE9BQU9BLFNBQVMsWUFBWSxPQUFPQSxTQUFTLFlBQVk7Z0JBQzFELE9BQU8sSUFBSTtZQUNiLENBQUMsQ0FBQyxtRkFBbUY7WUFHckYsSUFBSUEsU0FBU0MsdUJBQXVCRCxTQUFTRSx1QkFBdUJGLFNBQVNHLGlDQUFpQ0gsU0FBU0ksMEJBQTBCSixTQUFTSyx1QkFBdUJMLFNBQVNNLDRCQUE0Qk4sU0FBU08sNEJBQTRCQyxnQkFBaUI7Z0JBQzFRLE9BQU8sSUFBSTtZQUNiLENBQUM7WUFFRCxJQUFJLE9BQU9SLFNBQVMsWUFBWUEsU0FBUyxJQUFJLEVBQUU7Z0JBQzdDLElBQUlBLEtBQUtTLFFBQVEsS0FBS0MsbUJBQW1CVixLQUFLUyxRQUFRLEtBQUtFLG1CQUFtQlgsS0FBS1MsUUFBUSxLQUFLRyx1QkFBdUJaLEtBQUtTLFFBQVEsS0FBS0ksc0JBQXNCYixLQUFLUyxRQUFRLEtBQUtLLDBCQUEwQmQsS0FBS1MsUUFBUSxLQUFLTSwwQkFBMEJmLEtBQUtTLFFBQVEsS0FBS08sb0JBQW9CaEIsSUFBSSxDQUFDLEVBQUUsS0FBS2lCLHlCQUF5QjtvQkFDaFUsT0FBTyxJQUFJO2dCQUNiLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxLQUFLO1FBQ2Q7WUFFU0MsU0FBVCxTQUFTQSxPQUFPQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxPQUFPQSxXQUFXLFlBQVlBLFdBQVcsSUFBSSxFQUFFO2dCQUNqRCxJQUFJVixXQUFXVSxPQUFPVixRQUFRO2dCQUU5QixPQUFRQTtvQkFDTixLQUFLVzt3QkFDSCxJQUFJcEIs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UUEwRHZGNkIsdUJBQXVCLEdBQUdYO1FBQzFCVyx1QkFBdUIsR0FBR1Y7UUFDMUJVLGVBQWUsR0FBR1Q7UUFDbEJTLGtCQUFrQixHQUFHUjtRQUNyQlEsZ0JBQWdCLEdBQUdQO1FBQ25CTyxZQUFZLEdBQUdOO1FBQ2ZNLFlBQVksR0FBR0w7UUFDZkssY0FBYyxHQUFHSjtRQUNqQkksZ0JBQWdCLEdBQUdIO1FBQ25CRyxrQkFBa0IsR0FBR0Y7UUFDckJFLGdCQUFnQixHQUFHRDtRQUNuQkMsbUJBQW1CLEdBQUdqQztRQUN0QmlDLHdCQUF3QixHQUFHOUI7UUFDM0I4Qix5QkFBeUIsR0FBRzVCO1FBQzVCNEIseUJBQXlCLEdBQUczQjtRQUM1QjJCLGlCQUFpQixHQUFHMUI7UUFDcEIwQixvQkFBb0IsR0FBR3pCO1FBQ3ZCeUIsa0JBQWtCLEdBQUd4QjtRQUNyQndCLGNBQWMsR0FBR3ZCO1FBQ2pCdUIsY0FBYyxHQUFHdEI7UUFDakJzQixnQkFBZ0IsR0FBR3JCO1FBQ25CcUIsa0JBQWtCLEdBQUdwQjtRQUNyQm9CLG9CQUFvQixHQUFHbkI7UUFDdkJtQixrQkFBa0IsR0FBR2xCO1FBQ3JCa0IsMEJBQTBCLEdBQUcxRDtRQUM3QjBELGNBQWMsR0FBR3ZDO0lBQ2Y7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG93bnNoaWZ0L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanM/NGU3MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImlzVmFsaWRFbGVtZW50VHlwZSIsInR5cGUiLCJSRUFDVF9GUkFHTUVOVF9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIiwiUkVBQ1RfU1RSSUNUX01PREVfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX1RZUEUiLCJSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUiLCJSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUiLCJlbmFibGVTY29wZUFQSSIsIiQkdHlwZW9mIiwiUkVBQ1RfTEFaWV9UWVBFIiwiUkVBQ1RfTUVNT19UWVBFIiwiUkVBQ1RfUFJPVklERVJfVFlQRSIsIlJFQUNUX0NPTlRFWFRfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIiwiUkVBQ1RfQkxPQ0tfVFlQRSIsIlJFQUNUX1NFUlZFUl9CTE9DS19UWVBFIiwidHlwZU9mIiwib2JqZWN0IiwiUkVBQ1RfRUxFTUVOVF9UWVBFIiwiJCR0eXBlb2ZUeXBlIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJ1bmRlZmluZWQiLCJpc0FzeW5jTW9kZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlIiwiY29uc29sZSIsImlzQ29uY3VycmVudE1vZGUiLCJoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImlzRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzRnJhZ21lbnQiLCJpc0xhenkiLCJpc01lbW8iLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJpc1N0cmljdE1vZGUiLCJpc1N1c3BlbnNlIiwiUkVBQ1RfU0NPUEVfVFlQRSIsIlJFQUNUX09QQVFVRV9JRF9UWVBFIiwiUkVBQ1RfT0ZGU0NSRUVOX1RZUEUiLCJTeW1ib2wiLCJmb3IiLCJzeW1ib2xGb3IiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJFbGVtZW50IiwiRm9yd2FyZFJlZiIsIkZyYWdtZW50IiwiTGF6eSIsIk1lbW8iLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/react-is/cjs/react-is.development.js\n");
4118
-
4119
- /***/ }),
4120
-
4121
- /***/ "../../../node_modules/downshift/node_modules/react-is/index.js":
4122
- /*!**********************************************************************!*\
4123
- !*** ../../../node_modules/downshift/node_modules/react-is/index.js ***!
4124
- \**********************************************************************/
4125
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4126
-
4127
- "use strict";
4128
- eval("\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"../../../node_modules/downshift/node_modules/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxJQUFJQSxLQUF5QixFQUFjLEVBRTFDLE1BQU07SUFDTEcsOEpBQXlCO0FBQzNCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb3duc2hpZnQvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzP2VlNTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/react-is/index.js\n");
4128
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Downshift$1),\n/* harmony export */ resetIdCounter: () => (/* binding */ resetIdCounter),\n/* harmony export */ useCombobox: () => (/* binding */ useCombobox),\n/* harmony export */ useMultipleSelection: () => (/* binding */ useMultipleSelection),\n/* harmony export */ useSelect: () => (/* binding */ useSelect)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"../../../node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ \"../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! prop-types */ \"../../../node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ \"webpack/sharing/consume/default/react/react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-is */ \"../../../node_modules/react-is/index.js\");\n/* harmony import */ var compute_scroll_into_view__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! compute-scroll-into-view */ \"../../../node_modules/compute-scroll-into-view/dist/index.js\");\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ \"../../../node_modules/tslib/tslib.es6.mjs\");\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\n\n\n\n\n\n\n\n\n\nvar idCounter = 0;\n/**\n * Accepts a parameter and returns it if it's a function\n * or a noop function if it's not. This allows us to\n * accept a callback, but not worry about it if it's not\n * passed.\n * @param {Function} cb the callback\n * @return {Function} a function\n */ function cbToCb(cb) {\n return typeof cb === \"function\" ? cb : noop;\n}\nfunction noop() {}\n/**\n * Scroll node into view if necessary\n * @param {HTMLElement} node the element that should scroll into view\n * @param {HTMLElement} menuNode the menu element of the component\n */ function scrollIntoView(node, menuNode) {\n if (!node) {\n return;\n }\n var actions = (0,compute_scroll_into_view__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(node, {\n boundary: menuNode,\n block: \"nearest\",\n scrollMode: \"if-needed\"\n });\n actions.forEach(function(_ref) {\n var el = _ref.el, top = _ref.top, left = _ref.left;\n el.scrollTop = top;\n el.scrollLeft = left;\n });\n}\n/**\n * @param {HTMLElement} parent the parent node\n * @param {HTMLElement} child the child node\n * @param {Window} environment The window context where downshift renders.\n * @return {Boolean} whether the parent is the child or the child is in the parent\n */ function isOrContainsNode(parent, child, environment) {\n var result = parent === child || _instanceof(child, environment.Node) && parent.contains && parent.contains(child);\n return result;\n}\n/**\n * Simple debounce implementation. Will call the given\n * function once after the time given has passed since\n * it was last called.\n * @param {Function} fn the function to call after the time\n * @param {Number} time the time to wait\n * @return {Function} the debounced function\n */ function debounce(fn, time) {\n var cancel = function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n var wrapper = function wrapper() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n cancel();\n timeoutId = setTimeout(function() {\n timeoutId = null;\n fn.apply(void 0, args);\n }, time);\n };\n var timeoutId;\n wrapper.cancel = cancel;\n return wrapper;\n}\n/**\n * This is intended to be used to compose event handlers.\n * They are executed in order until one of them sets\n * `event.preventDownshiftDefault = true`.\n * @param {...Function} fns the event handler functions\n * @return {Function} the event handler to add to an element\n */ function callAllEventHandlers() {\n for(var _len2 = arguments.length, fns = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n fns[_key2] = arguments[_key2];\n }\n return function(event) {\n for(var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++){\n args[_key3 - 1] = arguments[_key3];\n }\n return fns.some(function(fn) {\n if (fn) {\n fn.apply(void 0, [\n event\n ].concat(args));\n }\n return event.preventDownshiftDefault || event.hasOwnProperty(\"nativeEvent\") && event.nativeEvent.preventDownshiftDefault;\n });\n };\n}\nfunction handleRefs() {\n for(var _len4 = arguments.length, refs = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++){\n refs[_key4] = arguments[_key4];\n }\n return function(node) {\n refs.forEach(function(ref) {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n });\n };\n}\n/**\n * This generates a unique ID for an instance of Downshift\n * @return {String} the unique ID\n */ function generateId() {\n return String(idCounter++);\n}\n/**\n * Resets idCounter to 0. Used for SSR.\n */ function resetIdCounter() {\n // istanbul ignore next\n if (\"useId\" in (react__WEBPACK_IMPORTED_MODULE_4___default())) {\n console.warn(\"It is not necessary to call resetIdCounter when using React 18+\");\n return;\n }\n idCounter = 0;\n}\n/**\n * Default implementation for status message. Only added when menu is open.\n * Will specify if there are results in the list, and if so, how many,\n * and what keys are relevant.\n *\n * @param {Object} param the downshift state and other relevant properties\n * @return {String} the a11y status message\n */ function getA11yStatusMessage$1(_ref2) {\n var isOpen = _ref2.isOpen, resultCount = _ref2.resultCount, previousResultCount = _ref2.previousResultCount;\n if (!isOpen) {\n return \"\";\n }\n if (!resultCount) {\n return \"No results are available.\";\n }\n if (resultCount !== previousResultCount) {\n return resultCount + \" result\" + (resultCount === 1 ? \" is\" : \"s are\") + \" available, use up and down arrow keys to navigate. Press Enter key to select.\";\n }\n return \"\";\n}\n/**\n * Takes an argument and if it's an array, returns the first item in the array\n * otherwise returns the argument\n * @param {*} arg the maybe-array\n * @param {*} defaultValue the value if arg is falsey not defined\n * @return {*} the arg or it's first item\n */ function unwrapArray(arg, defaultValue) {\n arg = Array.isArray(arg) ? /* istanbul ignore next (preact) */ arg[0] : arg;\n if (!arg && defaultValue) {\n return defaultValue;\n } else {\n return arg;\n }\n}\n/**\n * @param {Object} element (P)react element\n * @return {Boolean} whether it's a DOM element\n */ function isDOMElement(element) {\n // then we assume this is react\n return typeof element.type === \"string\";\n}\n/**\n * @param {Object} element (P)react element\n * @return {Object} the props\n */ function getElementProps(element) {\n return element.props;\n}\n/**\n * Throws a helpful error message for required properties. Useful\n * to be used as a default in destructuring or object params.\n * @param {String} fnName the function name\n * @param {String} propName the prop name\n */ function requiredProp(fnName, propName) {\n // eslint-disable-next-line no-console\n console.error('The property \"' + propName + '\" is required in \"' + fnName + '\"');\n}\nvar stateKeys = [\n \"highlightedIndex\",\n \"inputValue\",\n \"isOpen\",\n \"selectedItem\",\n \"type\"\n];\n/**\n * @param {Object} state the state object\n * @return {Object} state that is relevant to downshift\n */ function pickState(state) {\n if (state === void 0) {\n state = {};\n }\n var result = {};\n stateKeys.forEach(function(k) {\n if (state.hasOwnProperty(k)) {\n result[k] = state[k];\n }\n });\n return result;\n}\n/**\n * This will perform a shallow merge of the given state object\n * with the state coming from props\n * (for the controlled component scenario)\n * This is used in state updater functions so they're referencing\n * the right state regardless of where it comes from.\n *\n * @param {Object} state The state of the component/hook.\n * @param {Object} props The props that may contain controlled values.\n * @returns {Object} The merged controlled state.\n */ function getState(state, props) {\n return Object.keys(state).reduce(function(prevState, key) {\n prevState[key] = isControlledProp(props, key) ? props[key] : state[key];\n return prevState;\n }, {});\n}\n/**\n * This determines whether a prop is a \"controlled prop\" meaning it is\n * state which is controlled by the outside of this component rather\n * than within this component.\n *\n * @param {Object} props The props that may contain controlled values.\n * @param {String} key the key to check\n * @return {Boolean} whether it is a controlled controlled prop\n */ function isControlledProp(props, key) {\n return props[key] !== undefined;\n}\n/**\n * Normalizes the 'key' property of a KeyboardEvent in IE/Edge\n * @param {Object} event a keyboardEvent object\n * @return {String} keyboard key\n */ function normalizeArrowKey(event) {\n var key = event.key, keyCode = event.keyCode;\n /* istanbul ignore next (ie) */ if (keyCode >= 37 && keyCode <= 40 && key.indexOf(\"Arrow\") !== 0) {\n return \"Arrow\" + key;\n }\n return key;\n}\n/**\n * Simple check if the value passed is object literal\n * @param {*} obj any things\n * @return {Boolean} whether it's object literal\n */ function isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {number} offset The offset from the current highlightedIndex to start searching.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean?} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next highlightedIndex.\n */ function getHighlightedIndex(start, offset, items, isItemDisabled, circular) {\n if (circular === void 0) {\n circular = false;\n }\n var count = items.length;\n if (count === 0) {\n return -1;\n }\n var itemsLastIndex = count - 1;\n if (typeof start !== \"number\" || start < 0 || start > itemsLastIndex) {\n start = offset > 0 ? -1 : itemsLastIndex + 1;\n }\n var current = start + offset;\n if (current < 0) {\n current = circular ? itemsLastIndex : 0;\n } else if (current > itemsLastIndex) {\n current = circular ? 0 : itemsLastIndex;\n }\n var highlightedIndex = getNonDisabledIndex(current, offset < 0, items, isItemDisabled, circular);\n if (highlightedIndex === -1) {\n return start >= count ? -1 : start;\n }\n return highlightedIndex;\n}\n/**\n * Returns the next non-disabled highlightedIndex value.\n *\n * @param {number} start The current highlightedIndex.\n * @param {boolean} backwards If true, it will search backwards from the start.\n * @param {unknown[]} items The items array.\n * @param {(item: unknown, index: number) => boolean} isItemDisabled Function that tells if an item is disabled or not.\n * @param {boolean} circular If the search reaches the end, if it can search again starting from the other end.\n * @returns {number} The next non-disabled index.\n */ function getNonDisabledIndex(start, backwards, items, isItemDisabled, circular) {\n if (circular === void 0) {\n circular = false;\n }\n var count = items.length;\n if (backwards) {\n for(var index = start; index >= 0; index--){\n if (!isItemDisabled(items[index], index)) {\n return index;\n }\n }\n } else {\n for(var _index = start; _index < count; _index++){\n if (!isItemDisabled(items[_index], _index)) {\n return _index;\n }\n }\n }\n if (circular) {\n return getNonDisabledIndex(backwards ? count - 1 : 0, backwards, items, isItemDisabled);\n }\n return -1;\n}\n/**\n * Checks if event target is within the downshift elements.\n *\n * @param {EventTarget} target Target to check.\n * @param {HTMLElement[]} downshiftElements The elements that form downshift (list, toggle button etc).\n * @param {Window} environment The window context where downshift renders.\n * @param {boolean} checkActiveElement Whether to also check activeElement.\n *\n * @returns {boolean} Whether or not the target is within downshift elements.\n */ function targetWithinDownshift(target, downshiftElements, environment, checkActiveElement) {\n if (checkActiveElement === void 0) {\n checkActiveElement = true;\n }\n return downshiftElements.some(function(contextNode) {\n return contextNode && (isOrContainsNode(contextNode, target, environment) || checkActiveElement && isOrContainsNode(contextNode, environment.document.activeElement, environment));\n });\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar validateControlledUnchanged = noop;\n/* istanbul ignore next */ if (true) {\n validateControlledUnchanged = function validateControlledUnchanged(state, prevProps, nextProps) {\n var warningDescription = \"This prop should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled Downshift element for the lifetime of the component. More info: https://github.com/downshift-js/downshift#control-props\";\n Object.keys(state).forEach(function(propKey) {\n if (prevProps[propKey] !== undefined && nextProps[propKey] === undefined) {\n // eslint-disable-next-line no-console\n console.error('downshift: A component has changed the controlled prop \"' + propKey + '\" to be uncontrolled. ' + warningDescription);\n } else if (prevProps[propKey] === undefined && nextProps[propKey] !== undefined) {\n // eslint-disable-next-line no-console\n console.error('downshift: A component has changed the uncontrolled prop \"' + propKey + '\" to be controlled. ' + warningDescription);\n }\n });\n };\n}\nvar cleanupStatus = debounce(function(documentProp) {\n getStatusDiv(documentProp).textContent = \"\";\n}, 500);\n/**\n * @param {String} status the status message\n * @param {Object} documentProp document passed by the user.\n */ function setStatus(status, documentProp) {\n var div = getStatusDiv(documentProp);\n if (!status) {\n return;\n }\n div.textContent = status;\n cleanupStatus(documentProp);\n}\n/**\n * Get the status node or create it if it does not already exist.\n * @param {Object} documentProp document passed by the user.\n * @return {HTMLElement} the status node.\n */ function getStatusDiv(documentProp) {\n if (documentProp === void 0) {\n documentProp = document;\n }\n var statusDiv = documentProp.getElementById(\"a11y-status-message\");\n if (statusDiv) {\n return statusDiv;\n }\n statusDiv = documentProp.createElement(\"div\");\n statusDiv.setAttribute(\"id\", \"a11y-status-message\");\n statusDiv.setAttribute(\"role\", \"status\");\n statusDiv.setAttribute(\"aria-live\", \"polite\");\n statusDiv.setAttribute(\"aria-relevant\", \"additions text\");\n Object.assign(statusDiv.style, {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\"\n });\n documentProp.body.appendChild(statusDiv);\n return statusDiv;\n}\nvar unknown = true ? \"__autocomplete_unknown__\" : 0;\nvar mouseUp = true ? \"__autocomplete_mouseup__\" : 0;\nvar itemMouseEnter = true ? \"__autocomplete_item_mouseenter__\" : 0;\nvar keyDownArrowUp = true ? \"__autocomplete_keydown_arrow_up__\" : 0;\nvar keyDownArrowDown = true ? \"__autocomplete_keydown_arrow_down__\" : 0;\nvar keyDownEscape = true ? \"__autocomplete_keydown_escape__\" : 0;\nvar keyDownEnter = true ? \"__autocomplete_keydown_enter__\" : 0;\nvar keyDownHome = true ? \"__autocomplete_keydown_home__\" : 0;\nvar keyDownEnd = true ? \"__autocomplete_keydown_end__\" : 0;\nvar clickItem = true ? \"__autocomplete_click_item__\" : 0;\nvar blurInput = true ? \"__autocomplete_blur_input__\" : 0;\nvar changeInput = true ? \"__autocomplete_change_input__\" : 0;\nvar keyDownSpaceButton = true ? \"__autocomplete_keydown_space_button__\" : 0;\nvar clickButton = true ? \"__autocomplete_click_button__\" : 0;\nvar blurButton = true ? \"__autocomplete_blur_button__\" : 0;\nvar controlledPropUpdatedSelectedItem = true ? \"__autocomplete_controlled_prop_updated_selected_item__\" : 0;\nvar touchEnd = true ? \"__autocomplete_touchend__\" : 0;\nvar stateChangeTypes$3 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n unknown: unknown,\n mouseUp: mouseUp,\n itemMouseEnter: itemMouseEnter,\n keyDownArrowUp: keyDownArrowUp,\n keyDownArrowDown: keyDownArrowDown,\n keyDownEscape: keyDownEscape,\n keyDownEnter: keyDownEnter,\n keyDownHome: keyDownHome,\n keyDownEnd: keyDownEnd,\n clickItem: clickItem,\n blurInput: blurInput,\n changeInput: changeInput,\n keyDownSpaceButton: keyDownSpaceButton,\n clickButton: clickButton,\n blurButton: blurButton,\n controlledPropUpdatedSelectedItem: controlledPropUpdatedSelectedItem,\n touchEnd: touchEnd\n});\nvar _excluded$4 = [\n \"refKey\",\n \"ref\"\n], _excluded2$3 = [\n \"onClick\",\n \"onPress\",\n \"onKeyDown\",\n \"onKeyUp\",\n \"onBlur\"\n], _excluded3$2 = [\n \"onKeyDown\",\n \"onBlur\",\n \"onChange\",\n \"onInput\",\n \"onChangeText\"\n], _excluded4$1 = [\n \"refKey\",\n \"ref\"\n], _excluded5 = [\n \"onMouseMove\",\n \"onMouseDown\",\n \"onClick\",\n \"onPress\",\n \"index\",\n \"item\"\n];\nvar Downshift = /*#__PURE__*/ function() {\n var Downshift = /*#__PURE__*/ function(_Component) {\n var Downshift = function Downshift(_props) {\n var _this;\n _this = _Component.call(this, _props) || this;\n // fancy destructuring + defaults + aliases\n // this basically says each value of state should either be set to\n // the initial value or the default value if the initial value is not provided\n _this.id = _this.props.id || \"downshift-\" + generateId();\n _this.menuId = _this.props.menuId || _this.id + \"-menu\";\n _this.labelId = _this.props.labelId || _this.id + \"-label\";\n _this.inputId = _this.props.inputId || _this.id + \"-input\";\n _this.getItemId = _this.props.getItemId || function(index) {\n return _this.id + \"-item-\" + index;\n };\n _this.input = null;\n _this.items = [];\n // itemCount can be changed asynchronously\n // from within downshift (so it can't come from a prop)\n // this is why we store it as an instance and use\n // getItemCount rather than just use items.length\n // (to support windowing + async)\n _this.itemCount = null;\n _this.previousResultCount = 0;\n _this.timeoutIds = [];\n /**\n * @param {Function} fn the function to call after the time\n * @param {Number} time the time to wait\n */ _this.internalSetTimeout = function(fn, time) {\n var id = setTimeout(function() {\n _this.timeoutIds = _this.timeoutIds.filter(function(i) {\n return i !== id;\n });\n fn();\n }, time);\n _this.timeoutIds.push(id);\n };\n _this.setItemCount = function(count) {\n _this.itemCount = count;\n };\n _this.unsetItemCount = function() {\n _this.itemCount = null;\n };\n _this.isItemDisabled = function(_item, index) {\n var currentElementNode = _this.getItemNodeFromIndex(index);\n return currentElementNode && currentElementNode.hasAttribute(\"disabled\");\n };\n _this.setHighlightedIndex = function(highlightedIndex, otherStateToSet) {\n if (highlightedIndex === void 0) {\n highlightedIndex = _this.props.defaultHighlightedIndex;\n }\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n highlightedIndex: highlightedIndex\n }, otherStateToSet));\n };\n _this.clearSelection = function(cb) {\n _this.internalSetState({\n selectedItem: null,\n inputValue: \"\",\n highlightedIndex: _this.props.defaultHighlightedIndex,\n isOpen: _this.props.defaultIsOpen\n }, cb);\n };\n _this.selectItem = function(item, otherStateToSet, cb) {\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: _this.props.defaultIsOpen,\n highlightedIndex: _this.props.defaultHighlightedIndex,\n selectedItem: item,\n inputValue: _this.props.itemToString(item)\n }, otherStateToSet), cb);\n };\n _this.selectItemAtIndex = function(itemIndex, otherStateToSet, cb) {\n var item = _this.items[itemIndex];\n if (item == null) {\n return;\n }\n _this.selectItem(item, otherStateToSet, cb);\n };\n _this.selectHighlightedItem = function(otherStateToSet, cb) {\n return _this.selectItemAtIndex(_this.getState().highlightedIndex, otherStateToSet, cb);\n };\n // any piece of our state can live in two places:\n // 1. Uncontrolled: it's internal (this.state)\n // We will call this.setState to update that state\n // 2. Controlled: it's external (this.props)\n // We will call this.props.onStateChange to update that state\n //\n // In addition, we'll call this.props.onChange if the\n // selectedItem is changed.\n _this.internalSetState = function(stateToSet, cb) {\n var isItemSelected, onChangeArg;\n var onStateChangeArg = {};\n var isStateToSetFunction = typeof stateToSet === \"function\";\n // we want to call `onInputValueChange` before the `setState` call\n // so someone controlling the `inputValue` state gets notified of\n // the input change as soon as possible. This avoids issues with\n // preserving the cursor position.\n // See https://github.com/downshift-js/downshift/issues/217 for more info.\n if (!isStateToSetFunction && stateToSet.hasOwnProperty(\"inputValue\")) {\n _this.props.onInputValueChange(stateToSet.inputValue, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.getStateAndHelpers(), stateToSet));\n }\n return _this.setState(function(state) {\n state = _this.getState(state);\n var newStateToSet = isStateToSetFunction ? stateToSet(state) : stateToSet;\n // Your own function that could modify the state that will be set.\n newStateToSet = _this.props.stateReducer(state, newStateToSet);\n // checks if an item is selected, regardless of if it's different from\n // what was selected before\n // used to determine if onSelect and onChange callbacks should be called\n isItemSelected = newStateToSet.hasOwnProperty(\"selectedItem\");\n // this keeps track of the object we want to call with setState\n var nextState = {};\n // we need to call on change if the outside world is controlling any of our state\n // and we're trying to update that state. OR if the selection has changed and we're\n // trying to update the selection\n if (isItemSelected && newStateToSet.selectedItem !== state.selectedItem) {\n onChangeArg = newStateToSet.selectedItem;\n }\n newStateToSet.type = newStateToSet.type || unknown;\n Object.keys(newStateToSet).forEach(function(key) {\n // onStateChangeArg should only have the state that is\n // actually changing\n if (state[key] !== newStateToSet[key]) {\n onStateChangeArg[key] = newStateToSet[key];\n }\n // the type is useful for the onStateChangeArg\n // but we don't actually want to set it in internal state.\n // this is an undocumented feature for now... Not all internalSetState\n // calls support it and I'm not certain we want them to yet.\n // But it enables users controlling the isOpen state to know when\n // the isOpen state changes due to mouseup events which is quite handy.\n if (key === \"type\") {\n return;\n }\n newStateToSet[key];\n // if it's coming from props, then we don't care to set it internally\n if (!isControlledProp(_this.props, key)) {\n nextState[key] = newStateToSet[key];\n }\n });\n // if stateToSet is a function, then we weren't able to call onInputValueChange\n // earlier, so we'll call it now that we know what the inputValue state will be.\n if (isStateToSetFunction && newStateToSet.hasOwnProperty(\"inputValue\")) {\n _this.props.onInputValueChange(newStateToSet.inputValue, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.getStateAndHelpers(), newStateToSet));\n }\n return nextState;\n }, function() {\n // call the provided callback if it's a function\n cbToCb(cb)();\n // only call the onStateChange and onChange callbacks if\n // we have relevant information to pass them.\n var hasMoreStateThanType = Object.keys(onStateChangeArg).length > 1;\n if (hasMoreStateThanType) {\n _this.props.onStateChange(onStateChangeArg, _this.getStateAndHelpers());\n }\n if (isItemSelected) {\n _this.props.onSelect(stateToSet.selectedItem, _this.getStateAndHelpers());\n }\n if (onChangeArg !== undefined) {\n _this.props.onChange(onChangeArg, _this.getStateAndHelpers());\n }\n // this is currently undocumented and therefore subject to change\n // We'll try to not break it, but just be warned.\n _this.props.onUserAction(onStateChangeArg, _this.getStateAndHelpers());\n });\n };\n //////////////////////////// ROOT\n _this.rootRef = function(node) {\n return _this._rootNode = node;\n };\n _this.getRootProps = function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey, ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$4);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n // this is used in the render to know whether the user has called getRootProps.\n // It uses that to know whether to apply the props automatically\n _this.getRootProps.called = true;\n _this.getRootProps.refKey = refKey;\n _this.getRootProps.suppressRefError = suppressRefError;\n var _this$getState = _this.getState(), isOpen = _this$getState.isOpen;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, _this.rootRef), _extends2.role = \"combobox\", _extends2[\"aria-expanded\"] = isOpen, _extends2[\"aria-haspopup\"] = \"listbox\", _extends2[\"aria-owns\"] = isOpen ? _this.menuId : undefined, _extends2[\"aria-labelledby\"] = _this.labelId, _extends2), rest);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ROOT\n _this.keyDownHandlers = {\n ArrowDown: function ArrowDown(event) {\n var _this2 = this;\n event.preventDefault();\n if (this.getState().isOpen) {\n var amount = event.shiftKey ? 5 : 1;\n this.moveHighlightedIndex(amount, {\n type: keyDownArrowDown\n });\n } else {\n this.internalSetState({\n isOpen: true,\n type: keyDownArrowDown\n }, function() {\n var itemCount = _this2.getItemCount();\n if (itemCount > 0) {\n var _this2$getState = _this2.getState(), highlightedIndex = _this2$getState.highlightedIndex;\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, 1, {\n length: itemCount\n }, _this2.isItemDisabled, true);\n _this2.setHighlightedIndex(nextHighlightedIndex, {\n type: keyDownArrowDown\n });\n }\n });\n }\n },\n ArrowUp: function ArrowUp(event) {\n var _this3 = this;\n event.preventDefault();\n if (this.getState().isOpen) {\n var amount = event.shiftKey ? -5 : -1;\n this.moveHighlightedIndex(amount, {\n type: keyDownArrowUp\n });\n } else {\n this.internalSetState({\n isOpen: true,\n type: keyDownArrowUp\n }, function() {\n var itemCount = _this3.getItemCount();\n if (itemCount > 0) {\n var _this3$getState = _this3.getState(), highlightedIndex = _this3$getState.highlightedIndex;\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, -1, {\n length: itemCount\n }, _this3.isItemDisabled, true);\n _this3.setHighlightedIndex(nextHighlightedIndex, {\n type: keyDownArrowUp\n });\n }\n });\n }\n },\n Enter: function Enter(event) {\n if (event.which === 229) {\n return;\n }\n var _this$getState2 = this.getState(), isOpen = _this$getState2.isOpen, highlightedIndex = _this$getState2.highlightedIndex;\n if (isOpen && highlightedIndex != null) {\n event.preventDefault();\n var item = this.items[highlightedIndex];\n var itemNode = this.getItemNodeFromIndex(highlightedIndex);\n if (item == null || itemNode && itemNode.hasAttribute(\"disabled\")) {\n return;\n }\n this.selectHighlightedItem({\n type: keyDownEnter\n });\n }\n },\n Escape: function Escape(event) {\n event.preventDefault();\n this.reset((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: keyDownEscape\n }, !this.state.isOpen && {\n selectedItem: null,\n inputValue: \"\"\n }));\n }\n };\n //////////////////////////// BUTTON\n _this.buttonKeyDownHandlers = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.keyDownHandlers, {\n \" \": function _(event) {\n event.preventDefault();\n this.toggleMenu({\n type: keyDownSpaceButton\n });\n }\n });\n _this.inputKeyDownHandlers = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, _this.keyDownHandlers, {\n Home: function Home(event) {\n var _this$getState3 = this.getState(), isOpen = _this$getState3.isOpen;\n if (!isOpen) {\n return;\n }\n event.preventDefault();\n var itemCount = this.getItemCount();\n if (itemCount <= 0 || !isOpen) {\n return;\n }\n // get next non-disabled starting downwards from 0 if that's disabled.\n var newHighlightedIndex = getNonDisabledIndex(0, false, {\n length: itemCount\n }, this.isItemDisabled);\n this.setHighlightedIndex(newHighlightedIndex, {\n type: keyDownHome\n });\n },\n End: function End(event) {\n var _this$getState4 = this.getState(), isOpen = _this$getState4.isOpen;\n if (!isOpen) {\n return;\n }\n event.preventDefault();\n var itemCount = this.getItemCount();\n if (itemCount <= 0 || !isOpen) {\n return;\n }\n // get next non-disabled starting upwards from last index if that's disabled.\n var newHighlightedIndex = getNonDisabledIndex(itemCount - 1, true, {\n length: itemCount\n }, this.isItemDisabled);\n this.setHighlightedIndex(newHighlightedIndex, {\n type: keyDownEnd\n });\n }\n });\n _this.getToggleButtonProps = function(_temp3) {\n var _ref3 = _temp3 === void 0 ? {} : _temp3, onClick = _ref3.onClick;\n _ref3.onPress;\n var onKeyDown = _ref3.onKeyDown, onKeyUp = _ref3.onKeyUp, onBlur = _ref3.onBlur, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$3);\n var _this$getState5 = _this.getState(), isOpen = _this$getState5.isOpen;\n var enabledEventHandlers = {\n onClick: callAllEventHandlers(onClick, _this.buttonHandleClick),\n onKeyDown: callAllEventHandlers(onKeyDown, _this.buttonHandleKeyDown),\n onKeyUp: callAllEventHandlers(onKeyUp, _this.buttonHandleKeyUp),\n onBlur: callAllEventHandlers(onBlur, _this.buttonHandleBlur)\n };\n var eventHandlers = rest.disabled ? {} : enabledEventHandlers;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: \"button\",\n role: \"button\",\n \"aria-label\": isOpen ? \"close menu\" : \"open menu\",\n \"aria-haspopup\": true,\n \"data-toggle\": true\n }, eventHandlers, rest);\n };\n _this.buttonHandleKeyUp = function(event) {\n // Prevent click event from emitting in Firefox\n event.preventDefault();\n };\n _this.buttonHandleKeyDown = function(event) {\n var key = normalizeArrowKey(event);\n if (_this.buttonKeyDownHandlers[key]) {\n _this.buttonKeyDownHandlers[key].call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this), event);\n }\n };\n _this.buttonHandleClick = function(event) {\n event.preventDefault();\n // handle odd case for Safari and Firefox which\n // don't give the button the focus properly.\n /* istanbul ignore if (can't reasonably test this) */ if (_this.props.environment.document.activeElement === _this.props.environment.document.body) {\n event.target.focus();\n }\n // to simplify testing components that use downshift, we'll not wrap this in a setTimeout\n // if the NODE_ENV is test. With the proper build system, this should be dead code eliminated\n // when building for production and should therefore have no impact on production code.\n if (false) {} else {\n // Ensure that toggle of menu occurs after the potential blur event in iOS\n _this.internalSetTimeout(function() {\n return _this.toggleMenu({\n type: clickButton\n });\n });\n }\n };\n _this.buttonHandleBlur = function(event) {\n var blurTarget = event.target; // Save blur target for comparison with activeElement later\n // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not body element\n _this.internalSetTimeout(function() {\n if (!_this.isMouseDown && (_this.props.environment.document.activeElement == null || _this.props.environment.document.activeElement.id !== _this.inputId) && _this.props.environment.document.activeElement !== blurTarget // Do nothing if we refocus the same element again (to solve issue in Safari on iOS)\n ) {\n _this.reset({\n type: blurButton\n });\n }\n });\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BUTTON\n /////////////////////////////// LABEL\n _this.getLabelProps = function(props) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n htmlFor: _this.inputId,\n id: _this.labelId\n }, props);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ LABEL\n /////////////////////////////// INPUT\n _this.getInputProps = function(_temp4) {\n var _ref4 = _temp4 === void 0 ? {} : _temp4, onKeyDown = _ref4.onKeyDown, onBlur = _ref4.onBlur, onChange = _ref4.onChange, onInput = _ref4.onInput;\n _ref4.onChangeText;\n var rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref4, _excluded3$2);\n var onChangeKey;\n var eventHandlers = {};\n /* istanbul ignore next (preact) */ {\n onChangeKey = \"onChange\";\n }\n var _this$getState6 = _this.getState(), inputValue = _this$getState6.inputValue, isOpen = _this$getState6.isOpen, highlightedIndex = _this$getState6.highlightedIndex;\n if (!rest.disabled) {\n var _eventHandlers;\n eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, _this.inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, _this.inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, _this.inputHandleBlur), _eventHandlers);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n \"aria-autocomplete\": \"list\",\n \"aria-activedescendant\": isOpen && typeof highlightedIndex === \"number\" && highlightedIndex >= 0 ? _this.getItemId(highlightedIndex) : undefined,\n \"aria-controls\": isOpen ? _this.menuId : undefined,\n \"aria-labelledby\": rest && rest[\"aria-label\"] ? undefined : _this.labelId,\n // https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion\n // revert back since autocomplete=\"nope\" is ignored on latest Chrome and Opera\n autoComplete: \"off\",\n value: inputValue,\n id: _this.inputId\n }, eventHandlers, rest);\n };\n _this.inputHandleKeyDown = function(event) {\n var key = normalizeArrowKey(event);\n if (key && _this.inputKeyDownHandlers[key]) {\n _this.inputKeyDownHandlers[key].call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(_this), event);\n }\n };\n _this.inputHandleChange = function(event) {\n _this.internalSetState({\n type: changeInput,\n isOpen: true,\n inputValue: event.target.value,\n highlightedIndex: _this.props.defaultHighlightedIndex\n });\n };\n _this.inputHandleBlur = function() {\n // Need setTimeout, so that when the user presses Tab, the activeElement is the next focused element, not the body element\n _this.internalSetTimeout(function() {\n var downshiftButtonIsActive = _this.props.environment.document && !!_this.props.environment.document.activeElement && !!_this.props.environment.document.activeElement.dataset && _this.props.environment.document.activeElement.dataset.toggle && _this._rootNode && _this._rootNode.contains(_this.props.environment.document.activeElement);\n if (!_this.isMouseDown && !downshiftButtonIsActive) {\n _this.reset({\n type: blurInput\n });\n }\n });\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ INPUT\n /////////////////////////////// MENU\n _this.menuRef = function(node) {\n _this._menuNode = node;\n };\n _this.getMenuProps = function(_temp5, _temp6) {\n var _extends3;\n var _ref5 = _temp5 === void 0 ? {} : _temp5, _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, ref = _ref5.ref, props = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded4$1);\n var _ref6 = _temp6 === void 0 ? {} : _temp6, _ref6$suppressRefErro = _ref6.suppressRefError, suppressRefError = _ref6$suppressRefErro === void 0 ? false : _ref6$suppressRefErro;\n _this.getMenuProps.called = true;\n _this.getMenuProps.refKey = refKey;\n _this.getMenuProps.suppressRefError = suppressRefError;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, _this.menuRef), _extends3.role = \"listbox\", _extends3[\"aria-labelledby\"] = props && props[\"aria-label\"] ? undefined : _this.labelId, _extends3.id = _this.menuId, _extends3), props);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ MENU\n /////////////////////////////// ITEM\n _this.getItemProps = function(_temp7) {\n var _enabledEventHandlers;\n var _ref7 = _temp7 === void 0 ? {} : _temp7, onMouseMove = _ref7.onMouseMove, onMouseDown = _ref7.onMouseDown, onClick = _ref7.onClick;\n _ref7.onPress;\n var index = _ref7.index, _ref7$item = _ref7.item, item = _ref7$item === void 0 ? false ? /* istanbul ignore next */ 0 : requiredProp(\"getItemProps\", \"item\") : _ref7$item, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref7, _excluded5);\n if (index === undefined) {\n _this.items.push(item);\n index = _this.items.indexOf(item);\n } else {\n _this.items[index] = item;\n }\n var onSelectKey = \"onClick\";\n var customClickHandler = onClick;\n var enabledEventHandlers = (_enabledEventHandlers = {\n // onMouseMove is used over onMouseEnter here. onMouseMove\n // is only triggered on actual mouse movement while onMouseEnter\n // can fire on DOM changes, interrupting keyboard navigation\n onMouseMove: callAllEventHandlers(onMouseMove, function() {\n if (index === _this.getState().highlightedIndex) {\n return;\n }\n _this.setHighlightedIndex(index, {\n type: itemMouseEnter\n });\n // We never want to manually scroll when changing state based\n // on `onMouseMove` because we will be moving the element out\n // from under the user which is currently scrolling/moving the\n // cursor\n _this.avoidScrolling = true;\n _this.internalSetTimeout(function() {\n return _this.avoidScrolling = false;\n }, 250);\n }),\n onMouseDown: callAllEventHandlers(onMouseDown, function(event) {\n // This prevents the activeElement from being changed\n // to the item so it can remain with the current activeElement\n // which is a more common use case.\n event.preventDefault();\n })\n }, _enabledEventHandlers[onSelectKey] = callAllEventHandlers(customClickHandler, function() {\n _this.selectItemAtIndex(index, {\n type: clickItem\n });\n }), _enabledEventHandlers);\n // Passing down the onMouseDown handler to prevent redirect\n // of the activeElement if clicking on disabled items\n var eventHandlers = rest.disabled ? {\n onMouseDown: enabledEventHandlers.onMouseDown\n } : enabledEventHandlers;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: _this.getItemId(index),\n role: \"option\",\n \"aria-selected\": _this.getState().highlightedIndex === index\n }, eventHandlers, rest);\n };\n //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ITEM\n _this.clearItems = function() {\n _this.items = [];\n };\n _this.reset = function(otherStateToSet, cb) {\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState(function(_ref8) {\n var selectedItem = _ref8.selectedItem;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: _this.props.defaultIsOpen,\n highlightedIndex: _this.props.defaultHighlightedIndex,\n inputValue: _this.props.itemToString(selectedItem)\n }, otherStateToSet);\n }, cb);\n };\n _this.toggleMenu = function(otherStateToSet, cb) {\n if (otherStateToSet === void 0) {\n otherStateToSet = {};\n }\n otherStateToSet = pickState(otherStateToSet);\n _this.internalSetState(function(_ref9) {\n var isOpen = _ref9.isOpen;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: !isOpen\n }, isOpen && {\n highlightedIndex: _this.props.defaultHighlightedIndex\n }, otherStateToSet);\n }, function() {\n var _this$getState7 = _this.getState(), isOpen = _this$getState7.isOpen, highlightedIndex = _this$getState7.highlightedIndex;\n if (isOpen) {\n if (_this.getItemCount() > 0 && typeof highlightedIndex === \"number\") {\n _this.setHighlightedIndex(highlightedIndex, otherStateToSet);\n }\n }\n cbToCb(cb)();\n });\n };\n _this.openMenu = function(cb) {\n _this.internalSetState({\n isOpen: true\n }, cb);\n };\n _this.closeMenu = function(cb) {\n _this.internalSetState({\n isOpen: false\n }, cb);\n };\n _this.updateStatus = debounce(function() {\n var state = _this.getState();\n var item = _this.items[state.highlightedIndex];\n var resultCount = _this.getItemCount();\n var status = _this.props.getA11yStatusMessage((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n itemToString: _this.props.itemToString,\n previousResultCount: _this.previousResultCount,\n resultCount: resultCount,\n highlightedItem: item\n }, state));\n _this.previousResultCount = resultCount;\n setStatus(status, _this.props.environment.document);\n }, 200);\n var _this$props = _this.props, defaultHighlightedIndex = _this$props.defaultHighlightedIndex, _this$props$initialHi = _this$props.initialHighlightedIndex, _highlightedIndex = _this$props$initialHi === void 0 ? defaultHighlightedIndex : _this$props$initialHi, defaultIsOpen = _this$props.defaultIsOpen, _this$props$initialIs = _this$props.initialIsOpen, _isOpen = _this$props$initialIs === void 0 ? defaultIsOpen : _this$props$initialIs, _this$props$initialIn = _this$props.initialInputValue, _inputValue = _this$props$initialIn === void 0 ? \"\" : _this$props$initialIn, _this$props$initialSe = _this$props.initialSelectedItem, _selectedItem = _this$props$initialSe === void 0 ? null : _this$props$initialSe;\n var _state = _this.getState({\n highlightedIndex: _highlightedIndex,\n isOpen: _isOpen,\n inputValue: _inputValue,\n selectedItem: _selectedItem\n });\n if (_state.selectedItem != null && _this.props.initialInputValue === undefined) {\n _state.inputValue = _this.props.itemToString(_state.selectedItem);\n }\n _this.state = _state;\n return _this;\n };\n (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Downshift, _Component);\n var _proto = Downshift.prototype;\n /**\n * Clear all running timeouts\n */ _proto.internalClearTimeouts = function internalClearTimeouts() {\n this.timeoutIds.forEach(function(id) {\n clearTimeout(id);\n });\n this.timeoutIds = [];\n } /**\n * Gets the state based on internal state or props\n * If a state value is passed via props, then that\n * is the value given, otherwise it's retrieved from\n * stateToMerge\n *\n * @param {Object} stateToMerge defaults to this.state\n * @return {Object} the state\n */ ;\n _proto.getState = function getState$1(stateToMerge) {\n if (stateToMerge === void 0) {\n stateToMerge = this.state;\n }\n return getState(stateToMerge, this.props);\n };\n _proto.getItemCount = function getItemCount() {\n // things read better this way. They're in priority order:\n // 1. `this.itemCount`\n // 2. `this.props.itemCount`\n // 3. `this.items.length`\n var itemCount = this.items.length;\n if (this.itemCount != null) {\n itemCount = this.itemCount;\n } else if (this.props.itemCount !== undefined) {\n itemCount = this.props.itemCount;\n }\n return itemCount;\n };\n _proto.getItemNodeFromIndex = function getItemNodeFromIndex(index) {\n return this.props.environment.document.getElementById(this.getItemId(index));\n };\n _proto.scrollHighlightedItemIntoView = function scrollHighlightedItemIntoView() {\n /* istanbul ignore else (react-native) */ {\n var node = this.getItemNodeFromIndex(this.getState().highlightedIndex);\n this.props.scrollIntoView(node, this._menuNode);\n }\n };\n _proto.moveHighlightedIndex = function moveHighlightedIndex(amount, otherStateToSet) {\n var itemCount = this.getItemCount();\n var _this$getState8 = this.getState(), highlightedIndex = _this$getState8.highlightedIndex;\n if (itemCount > 0) {\n var nextHighlightedIndex = getHighlightedIndex(highlightedIndex, amount, {\n length: itemCount\n }, this.isItemDisabled, true);\n this.setHighlightedIndex(nextHighlightedIndex, otherStateToSet);\n }\n };\n _proto.getStateAndHelpers = function getStateAndHelpers() {\n var _this$getState9 = this.getState(), highlightedIndex = _this$getState9.highlightedIndex, inputValue = _this$getState9.inputValue, selectedItem = _this$getState9.selectedItem, isOpen = _this$getState9.isOpen;\n var _$itemToString = this.props.itemToString;\n var id = this.id;\n var getRootProps = this.getRootProps, getToggleButtonProps = this.getToggleButtonProps, getLabelProps = this.getLabelProps, getMenuProps = this.getMenuProps, getInputProps = this.getInputProps, getItemProps = this.getItemProps, openMenu = this.openMenu, closeMenu = this.closeMenu, toggleMenu = this.toggleMenu, selectItem = this.selectItem, selectItemAtIndex = this.selectItemAtIndex, selectHighlightedItem = this.selectHighlightedItem, setHighlightedIndex = this.setHighlightedIndex, clearSelection = this.clearSelection, clearItems = this.clearItems, reset = this.reset, setItemCount = this.setItemCount, unsetItemCount = this.unsetItemCount, setState = this.internalSetState;\n return {\n // prop getters\n getRootProps: getRootProps,\n getToggleButtonProps: getToggleButtonProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getInputProps: getInputProps,\n getItemProps: getItemProps,\n // actions\n reset: reset,\n openMenu: openMenu,\n closeMenu: closeMenu,\n toggleMenu: toggleMenu,\n selectItem: selectItem,\n selectItemAtIndex: selectItemAtIndex,\n selectHighlightedItem: selectHighlightedItem,\n setHighlightedIndex: setHighlightedIndex,\n clearSelection: clearSelection,\n clearItems: clearItems,\n setItemCount: setItemCount,\n unsetItemCount: unsetItemCount,\n setState: setState,\n // props\n itemToString: _$itemToString,\n // derived\n id: id,\n // state\n highlightedIndex: highlightedIndex,\n inputValue: inputValue,\n isOpen: isOpen,\n selectedItem: selectedItem\n };\n };\n _proto.componentDidMount = function componentDidMount() {\n var _this4 = this;\n /* istanbul ignore if (react-native) */ if ( true && this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n }\n /* istanbul ignore if (react-native) */ {\n // this.isMouseDown helps us track whether the mouse is currently held down.\n // This is useful when the user clicks on an item in the list, but holds the mouse\n // down long enough for the list to disappear (because the blur event fires on the input)\n // this.isMouseDown is used in the blur handler on the input to determine whether the blur event should\n // trigger hiding the menu.\n var onMouseDown = function onMouseDown() {\n _this4.isMouseDown = true;\n };\n var onMouseUp = function onMouseUp(event) {\n _this4.isMouseDown = false;\n // if the target element or the activeElement is within a downshift node\n // then we don't want to reset downshift\n var contextWithinDownshift = targetWithinDownshift(event.target, [\n _this4._rootNode,\n _this4._menuNode\n ], _this4.props.environment);\n if (!contextWithinDownshift && _this4.getState().isOpen) {\n _this4.reset({\n type: mouseUp\n }, function() {\n return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n });\n }\n };\n // Touching an element in iOS gives focus and hover states, but touching out of\n // the element will remove hover, and persist the focus state, resulting in the\n // blur event not being triggered.\n // this.isTouchMove helps us track whether the user is tapping or swiping on a touch screen.\n // If the user taps outside of Downshift, the component should be reset,\n // but not if the user is swiping\n var onTouchStart = function onTouchStart() {\n _this4.isTouchMove = false;\n };\n var onTouchMove = function onTouchMove() {\n _this4.isTouchMove = true;\n };\n var onTouchEnd = function onTouchEnd(event) {\n var contextWithinDownshift = targetWithinDownshift(event.target, [\n _this4._rootNode,\n _this4._menuNode\n ], _this4.props.environment, false);\n if (!_this4.isTouchMove && !contextWithinDownshift && _this4.getState().isOpen) {\n _this4.reset({\n type: touchEnd\n }, function() {\n return _this4.props.onOuterClick(_this4.getStateAndHelpers());\n });\n }\n };\n var environment = this.props.environment;\n environment.addEventListener(\"mousedown\", onMouseDown);\n environment.addEventListener(\"mouseup\", onMouseUp);\n environment.addEventListener(\"touchstart\", onTouchStart);\n environment.addEventListener(\"touchmove\", onTouchMove);\n environment.addEventListener(\"touchend\", onTouchEnd);\n this.cleanup = function() {\n _this4.internalClearTimeouts();\n _this4.updateStatus.cancel();\n environment.removeEventListener(\"mousedown\", onMouseDown);\n environment.removeEventListener(\"mouseup\", onMouseUp);\n environment.removeEventListener(\"touchstart\", onTouchStart);\n environment.removeEventListener(\"touchmove\", onTouchMove);\n environment.removeEventListener(\"touchend\", onTouchEnd);\n };\n }\n };\n _proto.shouldScroll = function shouldScroll(prevState, prevProps) {\n var _ref10 = this.props.highlightedIndex === undefined ? this.getState() : this.props, currentHighlightedIndex = _ref10.highlightedIndex;\n var _ref11 = prevProps.highlightedIndex === undefined ? prevState : prevProps, prevHighlightedIndex = _ref11.highlightedIndex;\n var scrollWhenOpen = currentHighlightedIndex && this.getState().isOpen && !prevState.isOpen;\n var scrollWhenNavigating = currentHighlightedIndex !== prevHighlightedIndex;\n return scrollWhenOpen || scrollWhenNavigating;\n };\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (true) {\n validateControlledUnchanged(this.state, prevProps, this.props);\n /* istanbul ignore if (react-native) */ if (this.getMenuProps.called && !this.getMenuProps.suppressRefError) {\n validateGetMenuPropsCalledCorrectly(this._menuNode, this.getMenuProps);\n }\n }\n if (isControlledProp(this.props, \"selectedItem\") && this.props.selectedItemChanged(prevProps.selectedItem, this.props.selectedItem)) {\n this.internalSetState({\n type: controlledPropUpdatedSelectedItem,\n inputValue: this.props.itemToString(this.props.selectedItem)\n });\n }\n if (!this.avoidScrolling && this.shouldScroll(prevState, prevProps)) {\n this.scrollHighlightedItemIntoView();\n }\n /* istanbul ignore else (react-native) */ {\n this.updateStatus();\n }\n };\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cleanup(); // avoids memory leak\n };\n _proto.render = function render() {\n var children = unwrapArray(this.props.children, noop);\n // because the items are rerendered every time we call the children\n // we clear this out each render and it will be populated again as\n // getItemProps is called.\n this.clearItems();\n // we reset this so we know whether the user calls getRootProps during\n // this render. If they do then we don't need to do anything,\n // if they don't then we need to clone the element they return and\n // apply the props for them.\n this.getRootProps.called = false;\n this.getRootProps.refKey = undefined;\n this.getRootProps.suppressRefError = undefined;\n // we do something similar for getMenuProps\n this.getMenuProps.called = false;\n this.getMenuProps.refKey = undefined;\n this.getMenuProps.suppressRefError = undefined;\n // we do something similar for getLabelProps\n this.getLabelProps.called = false;\n // and something similar for getInputProps\n this.getInputProps.called = false;\n var element = unwrapArray(children(this.getStateAndHelpers()));\n if (!element) {\n return null;\n }\n if (this.getRootProps.called || this.props.suppressRefError) {\n if ( true && !this.getRootProps.suppressRefError && !this.props.suppressRefError) {\n validateGetRootPropsCalledCorrectly(element, this.getRootProps);\n }\n return element;\n } else if (isDOMElement(element)) {\n // they didn't apply the root props, but we can clone\n // this and apply the props ourselves\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_4__.cloneElement)(element, this.getRootProps(getElementProps(element)));\n }\n /* istanbul ignore else */ if (true) {\n // they didn't apply the root props, but they need to\n // otherwise we can't query around the autocomplete\n throw new Error(\"downshift: If you return a non-DOM element, you must apply the getRootProps function\");\n }\n /* istanbul ignore next */ return undefined;\n };\n return Downshift;\n }(react__WEBPACK_IMPORTED_MODULE_4__.Component);\n Downshift.defaultProps = {\n defaultHighlightedIndex: null,\n defaultIsOpen: false,\n getA11yStatusMessage: getA11yStatusMessage$1,\n itemToString: function itemToString(i) {\n if (i == null) {\n return \"\";\n }\n if ( true && isPlainObject(i) && !i.hasOwnProperty(\"toString\")) {\n // eslint-disable-next-line no-console\n console.warn(\"downshift: An object was passed to the default implementation of `itemToString`. You should probably provide your own `itemToString` implementation. Please refer to the `itemToString` API documentation.\", \"The object that was passed:\", i);\n }\n return String(i);\n },\n onStateChange: noop,\n onInputValueChange: noop,\n onUserAction: noop,\n onChange: noop,\n onSelect: noop,\n onOuterClick: noop,\n selectedItemChanged: function selectedItemChanged(prevItem, item) {\n return prevItem !== item;\n },\n environment: /* istanbul ignore next (ssr) */ typeof window === \"undefined\" ? {} : window,\n stateReducer: function stateReducer(state, stateToSet) {\n return stateToSet;\n },\n suppressRefError: false,\n scrollIntoView: scrollIntoView\n };\n Downshift.stateChangeTypes = stateChangeTypes$3;\n return Downshift;\n}();\n true ? Downshift.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n defaultHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n initialHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n initialInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n initialIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n getA11yStatusMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n itemToString: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onSelect: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onStateChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onInputValueChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onUserAction: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onOuterClick: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n selectedItemChanged: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n stateReducer: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n itemCount: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n id: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n environment: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n addEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n removeEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n document: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n createElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n getElementById: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n activeElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired,\n body: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired\n }).isRequired,\n Node: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n }),\n suppressRefError: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n // things we keep in state for uncontrolled components\n // but can accept as props for controlled components\n /* eslint-disable react/no-unused-prop-types */ selectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n isOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n inputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n highlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n labelId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n inputId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n menuId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n getItemId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n} : 0;\nvar Downshift$1 = Downshift;\nfunction validateGetMenuPropsCalledCorrectly(node, _ref12) {\n var refKey = _ref12.refKey;\n if (!node) {\n // eslint-disable-next-line no-console\n console.error('downshift: The ref prop \"' + refKey + '\" from getMenuProps was not applied correctly on your menu element.');\n }\n}\nfunction validateGetRootPropsCalledCorrectly(element, _ref13) {\n var refKey = _ref13.refKey;\n var refKeySpecified = refKey !== \"ref\";\n var isComposite = !isDOMElement(element);\n if (isComposite && !refKeySpecified && !(0,react_is__WEBPACK_IMPORTED_MODULE_5__.isForwardRef)(element)) {\n // eslint-disable-next-line no-console\n console.error(\"downshift: You returned a non-DOM element. You must specify a refKey in getRootProps\");\n } else if (!isComposite && refKeySpecified) {\n // eslint-disable-next-line no-console\n console.error('downshift: You returned a DOM element. You should not specify a refKey in getRootProps. You specified \"' + refKey + '\"');\n }\n if (!(0,react_is__WEBPACK_IMPORTED_MODULE_5__.isForwardRef)(element) && !getElementProps(element)[refKey]) {\n // eslint-disable-next-line no-console\n console.error('downshift: You must apply the ref prop \"' + refKey + '\" from getRootProps onto your root element.');\n }\n}\nvar _excluded$3 = [\n \"isInitialMount\",\n \"highlightedIndex\",\n \"items\",\n \"environment\"\n];\nvar dropdownDefaultStateValues = {\n highlightedIndex: -1,\n isOpen: false,\n selectedItem: null,\n inputValue: \"\"\n};\nfunction callOnChangeProps(action, state, newState) {\n var props = action.props, type = action.type;\n var changes = {};\n Object.keys(state).forEach(function(key) {\n invokeOnChangeHandler(key, action, state, newState);\n if (newState[key] !== state[key]) {\n changes[key] = newState[key];\n }\n });\n if (props.onStateChange && Object.keys(changes).length) {\n props.onStateChange((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: type\n }, changes));\n }\n}\nfunction invokeOnChangeHandler(key, action, state, newState) {\n var props = action.props, type = action.type;\n var handler = \"on\" + capitalizeString(key) + \"Change\";\n if (props[handler] && newState[key] !== undefined && newState[key] !== state[key]) {\n props[handler]((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n type: type\n }, newState));\n }\n}\n/**\n * Default state reducer that returns the changes.\n *\n * @param {Object} s state.\n * @param {Object} a action with changes.\n * @returns {Object} changes.\n */ function stateReducer(s, a) {\n return a.changes;\n}\n/**\n * Returns a message to be added to aria-live region when item is selected.\n *\n * @param {Object} selectionParameters Parameters required to build the message.\n * @returns {string} The a11y message.\n */ function getA11ySelectionMessage(selectionParameters) {\n var selectedItem = selectionParameters.selectedItem, itemToStringLocal = selectionParameters.itemToString;\n return selectedItem ? itemToStringLocal(selectedItem) + \" has been selected.\" : \"\";\n}\n/**\n * Debounced call for updating the a11y message.\n */ var updateA11yStatus = debounce(function(getA11yMessage, document1) {\n setStatus(getA11yMessage(), document1);\n}, 200);\n// istanbul ignore next\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\" ? react__WEBPACK_IMPORTED_MODULE_4__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_4__.useEffect;\n// istanbul ignore next\nvar useElementIds = \"useId\" in (react__WEBPACK_IMPORTED_MODULE_4___default()) // Avoid conditional useId call\n ? function useElementIds(_ref) {\n var id = _ref.id, labelId = _ref.labelId, menuId = _ref.menuId, getItemId = _ref.getItemId, toggleButtonId = _ref.toggleButtonId, inputId = _ref.inputId;\n // Avoid conditional useId call\n var reactId = \"downshift-\" + react__WEBPACK_IMPORTED_MODULE_4___default().useId();\n if (!id) {\n id = reactId;\n }\n var elementIdsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n labelId: labelId || id + \"-label\",\n menuId: menuId || id + \"-menu\",\n getItemId: getItemId || function(index) {\n return id + \"-item-\" + index;\n },\n toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n inputId: inputId || id + \"-input\"\n });\n return elementIdsRef.current;\n} : function useElementIds(_ref2) {\n var _ref2$id = _ref2.id, id = _ref2$id === void 0 ? \"downshift-\" + generateId() : _ref2$id, labelId = _ref2.labelId, menuId = _ref2.menuId, getItemId = _ref2.getItemId, toggleButtonId = _ref2.toggleButtonId, inputId = _ref2.inputId;\n var elementIdsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n labelId: labelId || id + \"-label\",\n menuId: menuId || id + \"-menu\",\n getItemId: getItemId || function(index) {\n return id + \"-item-\" + index;\n },\n toggleButtonId: toggleButtonId || id + \"-toggle-button\",\n inputId: inputId || id + \"-input\"\n });\n return elementIdsRef.current;\n};\nfunction getItemAndIndex(itemProp, indexProp, items, errorMessage) {\n var item, index;\n if (itemProp === undefined) {\n if (indexProp === undefined) {\n throw new Error(errorMessage);\n }\n item = items[indexProp];\n index = indexProp;\n } else {\n index = indexProp === undefined ? items.indexOf(itemProp) : indexProp;\n item = itemProp;\n }\n return [\n item,\n index\n ];\n}\nfunction itemToString(item) {\n return item ? String(item) : \"\";\n}\nfunction isAcceptedCharacterKey(key) {\n return /^\\S{1}$/.test(key);\n}\nfunction capitalizeString(string) {\n return \"\" + string.slice(0, 1).toUpperCase() + string.slice(1);\n}\nfunction useLatestRef(val) {\n var ref = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(val);\n // technically this is not \"concurrent mode safe\" because we're manipulating\n // the value during render (so it's not idempotent). However, the places this\n // hook is used is to support memoizing callbacks which will be called\n // *during* render, so we need the latest values *during* render.\n // If not for this, then we'd probably want to use useLayoutEffect instead.\n ref.current = val;\n return ref;\n}\n/**\n * Computes the controlled state using a the previous state, props,\n * two reducers, one from downshift and an optional one from the user.\n * Also calls the onChange handlers for state values that have changed.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useEnhancedReducer(reducer, initialState, props) {\n var prevStateRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var actionRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var enhancedReducer = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(state, action) {\n actionRef.current = action;\n state = getState(state, action.props);\n var changes = reducer(state, action);\n var newState = action.props.stateReducer(state, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, action, {\n changes: changes\n }));\n return newState;\n }, [\n reducer\n ]);\n var _useReducer = (0,react__WEBPACK_IMPORTED_MODULE_4__.useReducer)(enhancedReducer, initialState), state = _useReducer[0], dispatch = _useReducer[1];\n var propsRef = useLatestRef(props);\n var dispatchWithProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(action) {\n return dispatch((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n props: propsRef.current\n }, action));\n }, [\n propsRef\n ]);\n var action = actionRef.current;\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (action && prevStateRef.current && prevStateRef.current !== state) {\n callOnChangeProps(action, getState(prevStateRef.current, action.props), state);\n }\n prevStateRef.current = state;\n }, [\n state,\n props,\n action\n ]);\n return [\n state,\n dispatchWithProps\n ];\n}\n/**\n * Wraps the useEnhancedReducer and applies the controlled prop values before\n * returning the new state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useControlledReducer$1(reducer, initialState, props) {\n var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];\n return [\n getState(state, props),\n dispatch\n ];\n}\nvar defaultProps$3 = {\n itemToString: itemToString,\n stateReducer: stateReducer,\n getA11ySelectionMessage: getA11ySelectionMessage,\n scrollIntoView: scrollIntoView,\n environment: /* istanbul ignore next (ssr) */ typeof window === \"undefined\" ? {} : window\n};\nfunction getDefaultValue$1(props, propKey, defaultStateValues) {\n if (defaultStateValues === void 0) {\n defaultStateValues = dropdownDefaultStateValues;\n }\n var defaultValue = props[\"default\" + capitalizeString(propKey)];\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n return defaultStateValues[propKey];\n}\nfunction getInitialValue$1(props, propKey, defaultStateValues) {\n if (defaultStateValues === void 0) {\n defaultStateValues = dropdownDefaultStateValues;\n }\n var value = props[propKey];\n if (value !== undefined) {\n return value;\n }\n var initialValue = props[\"initial\" + capitalizeString(propKey)];\n if (initialValue !== undefined) {\n return initialValue;\n }\n return getDefaultValue$1(props, propKey, defaultStateValues);\n}\nfunction getInitialState$2(props) {\n var selectedItem = getInitialValue$1(props, \"selectedItem\");\n var isOpen = getInitialValue$1(props, \"isOpen\");\n var highlightedIndex = getInitialValue$1(props, \"highlightedIndex\");\n var inputValue = getInitialValue$1(props, \"inputValue\");\n return {\n highlightedIndex: highlightedIndex < 0 && selectedItem && isOpen ? props.items.indexOf(selectedItem) : highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nfunction getHighlightedIndexOnOpen(props, state, offset) {\n var items = props.items, initialHighlightedIndex = props.initialHighlightedIndex, defaultHighlightedIndex = props.defaultHighlightedIndex;\n var selectedItem = state.selectedItem, highlightedIndex = state.highlightedIndex;\n if (items.length === 0) {\n return -1;\n }\n // initialHighlightedIndex will give value to highlightedIndex on initial state only.\n if (initialHighlightedIndex !== undefined && highlightedIndex === initialHighlightedIndex) {\n return initialHighlightedIndex;\n }\n if (defaultHighlightedIndex !== undefined) {\n return defaultHighlightedIndex;\n }\n if (selectedItem) {\n return items.indexOf(selectedItem);\n }\n if (offset === 0) {\n return -1;\n }\n return offset < 0 ? items.length - 1 : 0;\n}\n/**\n * Reuse the movement tracking of mouse and touch events.\n *\n * @param {boolean} isOpen Whether the dropdown is open or not.\n * @param {Array<Object>} downshiftElementRefs Downshift element refs to track movement (toggleButton, menu etc.)\n * @param {Object} environment Environment where component/hook exists.\n * @param {Function} handleBlur Handler on blur from mouse or touch.\n * @returns {Object} Ref containing whether mouseDown or touchMove event is happening\n */ function useMouseAndTouchTracker(isOpen, downshiftElementRefs, environment, handleBlur) {\n var mouseAndTouchTrackersRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({\n isMouseDown: false,\n isTouchMove: false\n });\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if ((environment == null ? void 0 : environment.addEventListener) == null) {\n return;\n }\n // The same strategy for checking if a click occurred inside or outside downshift\n // as in downshift.js.\n var onMouseDown = function onMouseDown() {\n mouseAndTouchTrackersRef.current.isMouseDown = true;\n };\n var onMouseUp = function onMouseUp(event) {\n mouseAndTouchTrackersRef.current.isMouseDown = false;\n if (isOpen && !targetWithinDownshift(event.target, downshiftElementRefs.map(function(ref) {\n return ref.current;\n }), environment)) {\n handleBlur();\n }\n };\n var onTouchStart = function onTouchStart() {\n mouseAndTouchTrackersRef.current.isTouchMove = false;\n };\n var onTouchMove = function onTouchMove() {\n mouseAndTouchTrackersRef.current.isTouchMove = true;\n };\n var onTouchEnd = function onTouchEnd(event) {\n if (isOpen && !mouseAndTouchTrackersRef.current.isTouchMove && !targetWithinDownshift(event.target, downshiftElementRefs.map(function(ref) {\n return ref.current;\n }), environment, false)) {\n handleBlur();\n }\n };\n environment.addEventListener(\"mousedown\", onMouseDown);\n environment.addEventListener(\"mouseup\", onMouseUp);\n environment.addEventListener(\"touchstart\", onTouchStart);\n environment.addEventListener(\"touchmove\", onTouchMove);\n environment.addEventListener(\"touchend\", onTouchEnd);\n // eslint-disable-next-line consistent-return\n return function cleanup() {\n environment.removeEventListener(\"mousedown\", onMouseDown);\n environment.removeEventListener(\"mouseup\", onMouseUp);\n environment.removeEventListener(\"touchstart\", onTouchStart);\n environment.removeEventListener(\"touchmove\", onTouchMove);\n environment.removeEventListener(\"touchend\", onTouchEnd);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isOpen,\n environment\n ]);\n return mouseAndTouchTrackersRef;\n}\n/* istanbul ignore next */ // eslint-disable-next-line import/no-mutable-exports\nvar useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n return noop;\n};\n/**\n * Custom hook that checks if getter props are called correctly.\n *\n * @param {...any} propKeys Getter prop names to be handled.\n * @returns {Function} Setter function called inside getter props to set call information.\n */ /* istanbul ignore next */ if (true) {\n useGetterPropsCalledChecker = function useGetterPropsCalledChecker() {\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n for(var _len = arguments.length, propKeys = new Array(_len), _key = 0; _key < _len; _key++){\n propKeys[_key] = arguments[_key];\n }\n var getterPropsCalledRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(propKeys.reduce(function(acc, propKey) {\n acc[propKey] = {};\n return acc;\n }, {}));\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n Object.keys(getterPropsCalledRef.current).forEach(function(propKey) {\n var propCallInfo = getterPropsCalledRef.current[propKey];\n if (isInitialMountRef.current) {\n if (!Object.keys(propCallInfo).length) {\n // eslint-disable-next-line no-console\n console.error(\"downshift: You forgot to call the \" + propKey + \" getter function on your component / element.\");\n return;\n }\n }\n var suppressRefError = propCallInfo.suppressRefError, refKey = propCallInfo.refKey, elementRef = propCallInfo.elementRef;\n if ((!elementRef || !elementRef.current) && !suppressRefError) {\n // eslint-disable-next-line no-console\n console.error('downshift: The ref prop \"' + refKey + '\" from ' + propKey + \" was not applied correctly on your element.\");\n }\n });\n isInitialMountRef.current = false;\n });\n var setGetterPropCallInfo = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(propKey, suppressRefError, refKey, elementRef) {\n getterPropsCalledRef.current[propKey] = {\n suppressRefError: suppressRefError,\n refKey: refKey,\n elementRef: elementRef\n };\n }, []);\n return setGetterPropCallInfo;\n };\n}\nfunction useA11yMessageSetter(getA11yMessage, dependencyArray, _ref3) {\n var isInitialMount = _ref3.isInitialMount, highlightedIndex = _ref3.highlightedIndex, items = _ref3.items, environment = _ref3.environment, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded$3);\n // Sets a11y status message on changes in state.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMount || false) {\n return;\n }\n updateA11yStatus(function() {\n return getA11yMessage((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n highlightedIndex: highlightedIndex,\n highlightedItem: items[highlightedIndex],\n resultCount: items.length\n }, rest));\n }, environment.document);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencyArray);\n}\nfunction useScrollIntoView(_ref4) {\n var highlightedIndex = _ref4.highlightedIndex, isOpen = _ref4.isOpen, itemRefs = _ref4.itemRefs, getItemNodeFromIndex = _ref4.getItemNodeFromIndex, menuElement = _ref4.menuElement, scrollIntoViewProp = _ref4.scrollIntoView;\n // used not to scroll on highlight by mouse.\n var shouldScrollRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // Scroll on highlighted item if change comes from keyboard.\n useIsomorphicLayoutEffect(function() {\n if (highlightedIndex < 0 || !isOpen || !Object.keys(itemRefs.current).length) {\n return;\n }\n if (shouldScrollRef.current === false) {\n shouldScrollRef.current = true;\n } else {\n scrollIntoViewProp(getItemNodeFromIndex(highlightedIndex), menuElement);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n highlightedIndex\n ]);\n return shouldScrollRef;\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar useControlPropsValidator = noop;\n/* istanbul ignore next */ if (true) {\n useControlPropsValidator = function useControlPropsValidator(_ref5) {\n var isInitialMount = _ref5.isInitialMount, props = _ref5.props, state = _ref5.state;\n // used for checking when props are moving from controlled to uncontrolled.\n var prevPropsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(props);\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMount) {\n return;\n }\n validateControlledUnchanged(state, prevPropsRef.current, props);\n prevPropsRef.current = props;\n }, [\n state,\n props,\n isInitialMount\n ]);\n };\n}\n/**\n * Handles selection on Enter / Alt + ArrowUp. Closes the menu and resets the highlighted index, unless there is a highlighted.\n * In that case, selects the item and resets to defaults for open state and highlighted idex.\n * @param {Object} props The useCombobox props.\n * @param {number} highlightedIndex The index from the state.\n * @param {boolean} inputValue Also return the input value for state.\n * @returns The changes for the state.\n */ function getChangesOnSelection(props, highlightedIndex, inputValue) {\n var _props$items;\n if (inputValue === void 0) {\n inputValue = true;\n }\n var shouldSelect = ((_props$items = props.items) == null ? void 0 : _props$items.length) && highlightedIndex >= 0;\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, shouldSelect && (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n selectedItem: props.items[highlightedIndex],\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\")\n }, inputValue && {\n inputValue: props.itemToString(props.items[highlightedIndex])\n }));\n}\n// Shared between all exports.\nvar commonPropTypes = {\n environment: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n addEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n removeEventListener: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n document: prop_types__WEBPACK_IMPORTED_MODULE_7___default().shape({\n createElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n getElementById: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired,\n activeElement: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired,\n body: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any).isRequired\n }).isRequired,\n Node: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func).isRequired\n }),\n itemToString: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n stateReducer: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n// Shared between useSelect, useCombobox, Downshift.\nvar commonDropdownPropTypes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonPropTypes, {\n getA11yStatusMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n highlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialHighlightedIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n isOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n defaultIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n initialIsOpen: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().bool),\n selectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n initialSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n defaultSelectedItem: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().any),\n id: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n labelId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n menuId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n getItemId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n toggleButtonId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n onSelectedItemChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onHighlightedIndexChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onStateChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onIsOpenChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n scrollIntoView: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\nfunction downshiftCommonReducer(state, action, stateChangeTypes) {\n var type = action.type, props = action.props;\n var changes;\n switch(type){\n case stateChangeTypes.ItemMouseMove:\n changes = {\n highlightedIndex: action.disabled ? -1 : action.index\n };\n break;\n case stateChangeTypes.MenuMouseLeave:\n changes = {\n highlightedIndex: -1\n };\n break;\n case stateChangeTypes.ToggleButtonClick:\n case stateChangeTypes.FunctionToggleMenu:\n changes = {\n isOpen: !state.isOpen,\n highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case stateChangeTypes.FunctionOpenMenu:\n changes = {\n isOpen: true,\n highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case stateChangeTypes.FunctionCloseMenu:\n changes = {\n isOpen: false\n };\n break;\n case stateChangeTypes.FunctionSetHighlightedIndex:\n changes = {\n highlightedIndex: action.highlightedIndex\n };\n break;\n case stateChangeTypes.FunctionSetInputValue:\n changes = {\n inputValue: action.inputValue\n };\n break;\n case stateChangeTypes.FunctionReset:\n changes = {\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n selectedItem: getDefaultValue$1(props, \"selectedItem\"),\n inputValue: getDefaultValue$1(props, \"inputValue\")\n };\n break;\n default:\n throw new Error(\"Reducer called without proper action type.\");\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ function getItemIndexByCharacterKey(_a) {\n var keysSoFar = _a.keysSoFar, highlightedIndex = _a.highlightedIndex, items = _a.items, _$itemToString = _a.itemToString, isItemDisabled = _a.isItemDisabled;\n var lowerCasedKeysSoFar = keysSoFar.toLowerCase();\n for(var index = 0; index < items.length; index++){\n // if we already have a search query in progress, we also consider the current highlighted item.\n var offsetIndex = (index + highlightedIndex + (keysSoFar.length < 2 ? 1 : 0)) % items.length;\n var item = items[offsetIndex];\n if (item !== undefined && _$itemToString(item).toLowerCase().startsWith(lowerCasedKeysSoFar) && !isItemDisabled(item, offsetIndex)) {\n return offsetIndex;\n }\n }\n return highlightedIndex;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nvar propTypes$2 = (0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)({}, commonDropdownPropTypes), {\n items: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array).isRequired,\n isItemDisabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n getA11ySelectionMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\n/**\n * Default implementation for status message. Only added when menu is open.\n * Will specift if there are results in the list, and if so, how many,\n * and what keys are relevant.\n *\n * @param {Object} param the downshift state and other relevant properties\n * @return {String} the a11y status message\n */ function getA11yStatusMessage(_a) {\n var isOpen = _a.isOpen, resultCount = _a.resultCount, previousResultCount = _a.previousResultCount;\n if (!isOpen) {\n return \"\";\n }\n if (!resultCount) {\n return \"No results are available.\";\n }\n if (resultCount !== previousResultCount) {\n return \"\".concat(resultCount, \" result\").concat(resultCount === 1 ? \" is\" : \"s are\", \" available, use up and down arrow keys to navigate. Press Enter or Space Bar keys to select.\");\n }\n return \"\";\n}\nvar defaultProps$2 = (0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_8__.__assign)({}, defaultProps$3), {\n getA11yStatusMessage: getA11yStatusMessage,\n isItemDisabled: function isItemDisabled() {\n return false;\n }\n});\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$2 = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes$2 = function validatePropTypes$2(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes$2, options, \"prop\", caller.name);\n };\n}\nvar ToggleButtonClick$1 = true ? \"__togglebutton_click__\" : 0;\nvar ToggleButtonKeyDownArrowDown = true ? \"__togglebutton_keydown_arrow_down__\" : 0;\nvar ToggleButtonKeyDownArrowUp = true ? \"__togglebutton_keydown_arrow_up__\" : 0;\nvar ToggleButtonKeyDownCharacter = true ? \"__togglebutton_keydown_character__\" : 0;\nvar ToggleButtonKeyDownEscape = true ? \"__togglebutton_keydown_escape__\" : 0;\nvar ToggleButtonKeyDownHome = true ? \"__togglebutton_keydown_home__\" : 0;\nvar ToggleButtonKeyDownEnd = true ? \"__togglebutton_keydown_end__\" : 0;\nvar ToggleButtonKeyDownEnter = true ? \"__togglebutton_keydown_enter__\" : 0;\nvar ToggleButtonKeyDownSpaceButton = true ? \"__togglebutton_keydown_space_button__\" : 0;\nvar ToggleButtonKeyDownPageUp = true ? \"__togglebutton_keydown_page_up__\" : 0;\nvar ToggleButtonKeyDownPageDown = true ? \"__togglebutton_keydown_page_down__\" : 0;\nvar ToggleButtonBlur = true ? \"__togglebutton_blur__\" : 0;\nvar MenuMouseLeave$1 = true ? \"__menu_mouse_leave__\" : 0;\nvar ItemMouseMove$1 = true ? \"__item_mouse_move__\" : 0;\nvar ItemClick$1 = true ? \"__item_click__\" : 0;\nvar FunctionToggleMenu$1 = true ? \"__function_toggle_menu__\" : 0;\nvar FunctionOpenMenu$1 = true ? \"__function_open_menu__\" : 0;\nvar FunctionCloseMenu$1 = true ? \"__function_close_menu__\" : 0;\nvar FunctionSetHighlightedIndex$1 = true ? \"__function_set_highlighted_index__\" : 0;\nvar FunctionSelectItem$1 = true ? \"__function_select_item__\" : 0;\nvar FunctionSetInputValue$1 = true ? \"__function_set_input_value__\" : 0;\nvar FunctionReset$2 = true ? \"__function_reset__\" : 0;\nvar stateChangeTypes$2 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n ToggleButtonClick: ToggleButtonClick$1,\n ToggleButtonKeyDownArrowDown: ToggleButtonKeyDownArrowDown,\n ToggleButtonKeyDownArrowUp: ToggleButtonKeyDownArrowUp,\n ToggleButtonKeyDownCharacter: ToggleButtonKeyDownCharacter,\n ToggleButtonKeyDownEscape: ToggleButtonKeyDownEscape,\n ToggleButtonKeyDownHome: ToggleButtonKeyDownHome,\n ToggleButtonKeyDownEnd: ToggleButtonKeyDownEnd,\n ToggleButtonKeyDownEnter: ToggleButtonKeyDownEnter,\n ToggleButtonKeyDownSpaceButton: ToggleButtonKeyDownSpaceButton,\n ToggleButtonKeyDownPageUp: ToggleButtonKeyDownPageUp,\n ToggleButtonKeyDownPageDown: ToggleButtonKeyDownPageDown,\n ToggleButtonBlur: ToggleButtonBlur,\n MenuMouseLeave: MenuMouseLeave$1,\n ItemMouseMove: ItemMouseMove$1,\n ItemClick: ItemClick$1,\n FunctionToggleMenu: FunctionToggleMenu$1,\n FunctionOpenMenu: FunctionOpenMenu$1,\n FunctionCloseMenu: FunctionCloseMenu$1,\n FunctionSetHighlightedIndex: FunctionSetHighlightedIndex$1,\n FunctionSelectItem: FunctionSelectItem$1,\n FunctionSetInputValue: FunctionSetInputValue$1,\n FunctionReset: FunctionReset$2\n});\n/* eslint-disable complexity */ function downshiftSelectReducer(state, action) {\n var _props$items;\n var type = action.type, props = action.props, altKey = action.altKey;\n var changes;\n switch(type){\n case ItemClick$1:\n changes = {\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n selectedItem: props.items[action.index]\n };\n break;\n case ToggleButtonKeyDownCharacter:\n {\n var lowercasedKey = action.key;\n var inputValue = \"\" + state.inputValue + lowercasedKey;\n var prevHighlightedIndex = !state.isOpen && state.selectedItem ? props.items.indexOf(state.selectedItem) : state.highlightedIndex;\n var highlightedIndex = getItemIndexByCharacterKey({\n keysSoFar: inputValue,\n highlightedIndex: prevHighlightedIndex,\n items: props.items,\n itemToString: props.itemToString,\n isItemDisabled: props.isItemDisabled\n });\n changes = {\n inputValue: inputValue,\n highlightedIndex: highlightedIndex,\n isOpen: true\n };\n }\n break;\n case ToggleButtonKeyDownArrowDown:\n {\n var _highlightedIndex = state.isOpen ? getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled) : altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1);\n changes = {\n highlightedIndex: _highlightedIndex,\n isOpen: true\n };\n }\n break;\n case ToggleButtonKeyDownArrowUp:\n if (state.isOpen && altKey) {\n changes = getChangesOnSelection(props, state.highlightedIndex, false);\n } else {\n var _highlightedIndex2 = state.isOpen ? getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled) : getHighlightedIndexOnOpen(props, state, -1);\n changes = {\n highlightedIndex: _highlightedIndex2,\n isOpen: true\n };\n }\n break;\n // only triggered when menu is open.\n case ToggleButtonKeyDownEnter:\n case ToggleButtonKeyDownSpaceButton:\n changes = getChangesOnSelection(props, state.highlightedIndex, false);\n break;\n case ToggleButtonKeyDownHome:\n changes = {\n highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled),\n isOpen: true\n };\n break;\n case ToggleButtonKeyDownEnd:\n changes = {\n highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled),\n isOpen: true\n };\n break;\n case ToggleButtonKeyDownPageUp:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled)\n };\n break;\n case ToggleButtonKeyDownPageDown:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled)\n };\n break;\n case ToggleButtonKeyDownEscape:\n changes = {\n isOpen: false,\n highlightedIndex: -1\n };\n break;\n case ToggleButtonBlur:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && {\n selectedItem: props.items[state.highlightedIndex]\n });\n break;\n case FunctionSelectItem$1:\n changes = {\n selectedItem: action.selectedItem\n };\n break;\n default:\n return downshiftCommonReducer(state, action, stateChangeTypes$2);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ var _excluded$2 = [\n \"onMouseLeave\",\n \"refKey\",\n \"onKeyDown\",\n \"onBlur\",\n \"ref\"\n], _excluded2$2 = [\n \"onBlur\",\n \"onClick\",\n \"onPress\",\n \"onKeyDown\",\n \"refKey\",\n \"ref\"\n], _excluded3$1 = [\n \"item\",\n \"index\",\n \"onMouseMove\",\n \"onClick\",\n \"onPress\",\n \"refKey\",\n \"disabled\",\n \"ref\"\n];\nuseSelect.stateChangeTypes = stateChangeTypes$2;\nfunction useSelect(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes$2(userProps, useSelect);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$2, userProps);\n var items = props.items, _$scrollIntoView = props.scrollIntoView, environment = props.environment, _$itemToString = props.itemToString, _$getA11ySelectionMessage = props.getA11ySelectionMessage, _$getA11yStatusMessage = props.getA11yStatusMessage;\n // Initial state depending on controlled props.\n var initialState = getInitialState$2(props);\n var _useControlledReducer = useControlledReducer$1(downshiftSelectReducer, initialState, props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var isOpen = state.isOpen, highlightedIndex = state.highlightedIndex, selectedItem = state.selectedItem, inputValue = state.inputValue;\n // Element efs.\n var toggleButtonRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var menuRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var itemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({});\n // used to keep the inputValue clearTimeout object between renders.\n var clearTimeoutRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n // prevent id re-generation between renders.\n var elementIds = useElementIds(props);\n // used to keep track of how many items we had on previous cycle.\n var previousResultCountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // utility callback to get item element.\n var latest = useLatestRef({\n state: state,\n props: props\n });\n // Some utils.\n var getItemNodeFromIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(index) {\n return itemRefs.current[elementIds.getItemId(index)];\n }, [\n elementIds\n ]);\n // Effects.\n // Sets a11y status message on changes in state.\n useA11yMessageSetter(_$getA11yStatusMessage, [\n isOpen,\n highlightedIndex,\n inputValue,\n items\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Sets a11y status message on changes in selectedItem.\n useA11yMessageSetter(_$getA11ySelectionMessage, [\n selectedItem\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Scroll on highlighted item if change comes from keyboard.\n var shouldScrollRef = useScrollIntoView({\n menuElement: menuRef.current,\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n itemRefs: itemRefs,\n scrollIntoView: _$scrollIntoView,\n getItemNodeFromIndex: getItemNodeFromIndex\n });\n // Sets cleanup for the keysSoFar callback, debounded after 500ms.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n // init the clean function here as we need access to dispatch.\n clearTimeoutRef.current = debounce(function(outerDispatch) {\n outerDispatch({\n type: FunctionSetInputValue$1,\n inputValue: \"\"\n });\n }, 500);\n // Cancel any pending debounced calls on mount\n return function() {\n clearTimeoutRef.current.cancel();\n };\n }, []);\n // Invokes the keysSoFar callback set up above.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!inputValue) {\n return;\n }\n clearTimeoutRef.current(dispatch);\n }, [\n dispatch,\n inputValue\n ]);\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n previousResultCountRef.current = items.length;\n });\n // Focus the toggle button on first render if required.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var focusOnOpen = getInitialValue$1(props, \"isOpen\");\n if (focusOnOpen && toggleButtonRef.current) {\n toggleButtonRef.current.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // Add mouse/touch events to document.\n var mouseAndTouchTrackersRef = useMouseAndTouchTracker(isOpen, [\n menuRef,\n toggleButtonRef\n ], environment, function() {\n dispatch({\n type: ToggleButtonBlur\n });\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getMenuProps\", \"getToggleButtonProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Reset itemRefs on close.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!isOpen) {\n itemRefs.current = {};\n }\n }, [\n isOpen\n ]);\n // Event handler functions.\n var toggleButtonKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n return {\n ArrowDown: function ArrowDown(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownArrowDown,\n altKey: event.altKey\n });\n },\n ArrowUp: function ArrowUp(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownArrowUp,\n altKey: event.altKey\n });\n },\n Home: function Home(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownHome\n });\n },\n End: function End(event) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownEnd\n });\n },\n Escape: function Escape() {\n if (latest.current.state.isOpen) {\n dispatch({\n type: ToggleButtonKeyDownEscape\n });\n }\n },\n Enter: function Enter(event) {\n event.preventDefault();\n dispatch({\n type: latest.current.state.isOpen ? ToggleButtonKeyDownEnter : ToggleButtonClick$1\n });\n },\n PageUp: function PageUp(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownPageUp\n });\n }\n },\n PageDown: function PageDown(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: ToggleButtonKeyDownPageDown\n });\n }\n },\n \" \": function _(event) {\n event.preventDefault();\n var currentState = latest.current.state;\n if (!currentState.isOpen) {\n dispatch({\n type: ToggleButtonClick$1\n });\n return;\n }\n if (currentState.inputValue) {\n dispatch({\n type: ToggleButtonKeyDownCharacter,\n key: \" \"\n });\n } else {\n dispatch({\n type: ToggleButtonKeyDownSpaceButton\n });\n }\n }\n };\n }, [\n dispatch,\n latest\n ]);\n // Action functions.\n var toggleMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionToggleMenu$1\n });\n }, [\n dispatch\n ]);\n var closeMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionCloseMenu$1\n });\n }, [\n dispatch\n ]);\n var openMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionOpenMenu$1\n });\n }, [\n dispatch\n ]);\n var setHighlightedIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newHighlightedIndex) {\n dispatch({\n type: FunctionSetHighlightedIndex$1,\n highlightedIndex: newHighlightedIndex\n });\n }, [\n dispatch\n ]);\n var selectItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItem) {\n dispatch({\n type: FunctionSelectItem$1,\n selectedItem: newSelectedItem\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset$2\n });\n }, [\n dispatch\n ]);\n var setInputValue = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newInputValue) {\n dispatch({\n type: FunctionSetInputValue$1,\n inputValue: newInputValue\n });\n }, [\n dispatch\n ]);\n // Getter functions.\n var getLabelProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(labelProps) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: elementIds.labelId,\n htmlFor: elementIds.toggleButtonId\n }, labelProps);\n }, [\n elementIds\n ]);\n var getMenuProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, onMouseLeave = _ref.onMouseLeave, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey;\n _ref.onKeyDown;\n _ref.onBlur;\n var ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$2);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n var menuHandleMouseLeave = function menuHandleMouseLeave() {\n dispatch({\n type: MenuMouseLeave$1\n });\n };\n setGetterPropCallInfo(\"getMenuProps\", suppressRefError, refKey, menuRef);\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(menuNode) {\n menuRef.current = menuNode;\n }), _extends2.id = elementIds.menuId, _extends2.role = \"listbox\", _extends2[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, menuHandleMouseLeave), _extends2), rest);\n }, [\n dispatch,\n setGetterPropCallInfo,\n elementIds\n ]);\n var getToggleButtonProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp3, _temp4) {\n var _extends3;\n var _ref3 = _temp3 === void 0 ? {} : _temp3, onBlur = _ref3.onBlur, onClick = _ref3.onClick;\n _ref3.onPress;\n var onKeyDown = _ref3.onKeyDown, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$2);\n var _ref4 = _temp4 === void 0 ? {} : _temp4, _ref4$suppressRefErro = _ref4.suppressRefError, suppressRefError = _ref4$suppressRefErro === void 0 ? false : _ref4$suppressRefErro;\n var latestState = latest.current.state;\n var toggleButtonHandleClick = function toggleButtonHandleClick() {\n dispatch({\n type: ToggleButtonClick$1\n });\n };\n var toggleButtonHandleBlur = function toggleButtonHandleBlur() {\n if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {\n dispatch({\n type: ToggleButtonBlur\n });\n }\n };\n var toggleButtonHandleKeyDown = function toggleButtonHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && toggleButtonKeyDownHandlers[key]) {\n toggleButtonKeyDownHandlers[key](event);\n } else if (isAcceptedCharacterKey(key)) {\n dispatch({\n type: ToggleButtonKeyDownCharacter,\n key: key\n });\n }\n };\n var toggleProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(toggleButtonNode) {\n toggleButtonRef.current = toggleButtonNode;\n }), _extends3[\"aria-activedescendant\"] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : \"\", _extends3[\"aria-controls\"] = elementIds.menuId, _extends3[\"aria-expanded\"] = latest.current.state.isOpen, _extends3[\"aria-haspopup\"] = \"listbox\", _extends3[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends3.id = elementIds.toggleButtonId, _extends3.role = \"combobox\", _extends3.tabIndex = 0, _extends3.onBlur = callAllEventHandlers(onBlur, toggleButtonHandleBlur), _extends3), rest);\n if (!rest.disabled) {\n /* istanbul ignore if (react-native) */ {\n toggleProps.onClick = callAllEventHandlers(onClick, toggleButtonHandleClick);\n toggleProps.onKeyDown = callAllEventHandlers(onKeyDown, toggleButtonHandleKeyDown);\n }\n }\n setGetterPropCallInfo(\"getToggleButtonProps\", suppressRefError, refKey, toggleButtonRef);\n return toggleProps;\n }, [\n latest,\n elementIds,\n setGetterPropCallInfo,\n dispatch,\n mouseAndTouchTrackersRef,\n toggleButtonKeyDownHandlers\n ]);\n var getItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp5) {\n var _extends4;\n var _ref5 = _temp5 === void 0 ? {} : _temp5, itemProp = _ref5.item, indexProp = _ref5.index, onMouseMove = _ref5.onMouseMove, onClick = _ref5.onClick;\n _ref5.onPress;\n var _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, disabledProp = _ref5.disabled, ref = _ref5.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded3$1);\n if (disabledProp !== undefined) {\n console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useSelect.');\n }\n var _latest$current = latest.current, latestState = _latest$current.state, latestProps = _latest$current.props;\n var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, \"Pass either item or index to getItemProps!\"), item = _getItemAndIndex[0], index = _getItemAndIndex[1];\n var disabled = latestProps.isItemDisabled(item, index);\n var itemHandleMouseMove = function itemHandleMouseMove() {\n if (index === latestState.highlightedIndex) {\n return;\n }\n shouldScrollRef.current = false;\n dispatch({\n type: ItemMouseMove$1,\n index: index,\n disabled: disabled\n });\n };\n var itemHandleClick = function itemHandleClick() {\n dispatch({\n type: ItemClick$1,\n index: index\n });\n };\n var itemProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function(itemNode) {\n if (itemNode) {\n itemRefs.current[elementIds.getItemId(index)] = itemNode;\n }\n }), _extends4[\"aria-disabled\"] = disabled, _extends4[\"aria-selected\"] = \"\" + (item === latestState.selectedItem), _extends4.id = elementIds.getItemId(index), _extends4.role = \"option\", _extends4), rest);\n if (!disabled) {\n /* istanbul ignore next (react-native) */ {\n itemProps.onClick = callAllEventHandlers(onClick, itemHandleClick);\n }\n }\n itemProps.onMouseMove = callAllEventHandlers(onMouseMove, itemHandleMouseMove);\n return itemProps;\n }, [\n latest,\n elementIds,\n shouldScrollRef,\n dispatch\n ]);\n return {\n // prop getters.\n getToggleButtonProps: getToggleButtonProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getItemProps: getItemProps,\n // actions.\n toggleMenu: toggleMenu,\n openMenu: openMenu,\n closeMenu: closeMenu,\n setHighlightedIndex: setHighlightedIndex,\n selectItem: selectItem,\n reset: reset,\n setInputValue: setInputValue,\n // state.\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nvar InputKeyDownArrowDown = true ? \"__input_keydown_arrow_down__\" : 0;\nvar InputKeyDownArrowUp = true ? \"__input_keydown_arrow_up__\" : 0;\nvar InputKeyDownEscape = true ? \"__input_keydown_escape__\" : 0;\nvar InputKeyDownHome = true ? \"__input_keydown_home__\" : 0;\nvar InputKeyDownEnd = true ? \"__input_keydown_end__\" : 0;\nvar InputKeyDownPageUp = true ? \"__input_keydown_page_up__\" : 0;\nvar InputKeyDownPageDown = true ? \"__input_keydown_page_down__\" : 0;\nvar InputKeyDownEnter = true ? \"__input_keydown_enter__\" : 0;\nvar InputChange = true ? \"__input_change__\" : 0;\nvar InputBlur = true ? \"__input_blur__\" : 0;\nvar InputClick = true ? \"__input_click__\" : 0;\nvar MenuMouseLeave = true ? \"__menu_mouse_leave__\" : 0;\nvar ItemMouseMove = true ? \"__item_mouse_move__\" : 0;\nvar ItemClick = true ? \"__item_click__\" : 0;\nvar ToggleButtonClick = true ? \"__togglebutton_click__\" : 0;\nvar FunctionToggleMenu = true ? \"__function_toggle_menu__\" : 0;\nvar FunctionOpenMenu = true ? \"__function_open_menu__\" : 0;\nvar FunctionCloseMenu = true ? \"__function_close_menu__\" : 0;\nvar FunctionSetHighlightedIndex = true ? \"__function_set_highlighted_index__\" : 0;\nvar FunctionSelectItem = true ? \"__function_select_item__\" : 0;\nvar FunctionSetInputValue = true ? \"__function_set_input_value__\" : 0;\nvar FunctionReset$1 = true ? \"__function_reset__\" : 0;\nvar ControlledPropUpdatedSelectedItem = true ? \"__controlled_prop_updated_selected_item__\" : 0;\nvar stateChangeTypes$1 = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n InputKeyDownArrowDown: InputKeyDownArrowDown,\n InputKeyDownArrowUp: InputKeyDownArrowUp,\n InputKeyDownEscape: InputKeyDownEscape,\n InputKeyDownHome: InputKeyDownHome,\n InputKeyDownEnd: InputKeyDownEnd,\n InputKeyDownPageUp: InputKeyDownPageUp,\n InputKeyDownPageDown: InputKeyDownPageDown,\n InputKeyDownEnter: InputKeyDownEnter,\n InputChange: InputChange,\n InputBlur: InputBlur,\n InputClick: InputClick,\n MenuMouseLeave: MenuMouseLeave,\n ItemMouseMove: ItemMouseMove,\n ItemClick: ItemClick,\n ToggleButtonClick: ToggleButtonClick,\n FunctionToggleMenu: FunctionToggleMenu,\n FunctionOpenMenu: FunctionOpenMenu,\n FunctionCloseMenu: FunctionCloseMenu,\n FunctionSetHighlightedIndex: FunctionSetHighlightedIndex,\n FunctionSelectItem: FunctionSelectItem,\n FunctionSetInputValue: FunctionSetInputValue,\n FunctionReset: FunctionReset$1,\n ControlledPropUpdatedSelectedItem: ControlledPropUpdatedSelectedItem\n});\nfunction getInitialState$1(props) {\n var initialState = getInitialState$2(props);\n var selectedItem = initialState.selectedItem;\n var inputValue = initialState.inputValue;\n if (inputValue === \"\" && selectedItem && props.defaultInputValue === undefined && props.initialInputValue === undefined && props.inputValue === undefined) {\n inputValue = props.itemToString(selectedItem);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, initialState, {\n inputValue: inputValue\n });\n}\nvar propTypes$1 = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonDropdownPropTypes, {\n items: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array).isRequired,\n isItemDisabled: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n selectedItemChanged: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n getA11ySelectionMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n inputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n defaultInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n initialInputValue: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n inputId: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n onInputValueChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n});\n/**\n * The useCombobox version of useControlledReducer, which also\n * checks if the controlled prop selectedItem changed between\n * renders. If so, it will also update inputValue with its\n * string equivalent. It uses the common useEnhancedReducer to\n * compute the rest of the state.\n *\n * @param {Function} reducer Reducer function from downshift.\n * @param {Object} initialState Initial state of the hook.\n * @param {Object} props The hook props.\n * @returns {Array} An array with the state and an action dispatcher.\n */ function useControlledReducer(reducer, initialState, props) {\n var previousSelectedItemRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n var _useEnhancedReducer = useEnhancedReducer(reducer, initialState, props), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];\n // ToDo: if needed, make same approach as selectedItemChanged from Downshift.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (!isControlledProp(props, \"selectedItem\")) {\n return;\n }\n if (props.selectedItemChanged(previousSelectedItemRef.current, props.selectedItem)) {\n dispatch({\n type: ControlledPropUpdatedSelectedItem,\n inputValue: props.itemToString(props.selectedItem)\n });\n }\n previousSelectedItemRef.current = state.selectedItem === previousSelectedItemRef.current ? props.selectedItem : state.selectedItem;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n state.selectedItem,\n props.selectedItem\n ]);\n return [\n getState(state, props),\n dispatch\n ];\n}\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes$1 = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes$1 = function validatePropTypes(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes$1, options, \"prop\", caller.name);\n };\n}\nvar defaultProps$1 = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$3, {\n selectedItemChanged: function selectedItemChanged(prevItem, item) {\n return prevItem !== item;\n },\n getA11yStatusMessage: getA11yStatusMessage$1,\n isItemDisabled: function isItemDisabled() {\n return false;\n }\n});\n/* eslint-disable complexity */ function downshiftUseComboboxReducer(state, action) {\n var _props$items;\n var type = action.type, props = action.props, altKey = action.altKey;\n var changes;\n switch(type){\n case ItemClick:\n changes = {\n isOpen: getDefaultValue$1(props, \"isOpen\"),\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n selectedItem: props.items[action.index],\n inputValue: props.itemToString(props.items[action.index])\n };\n break;\n case InputKeyDownArrowDown:\n if (state.isOpen) {\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 1, props.items, props.isItemDisabled, true)\n };\n } else {\n changes = {\n highlightedIndex: altKey && state.selectedItem == null ? -1 : getHighlightedIndexOnOpen(props, state, 1),\n isOpen: props.items.length >= 0\n };\n }\n break;\n case InputKeyDownArrowUp:\n if (state.isOpen) {\n if (altKey) {\n changes = getChangesOnSelection(props, state.highlightedIndex);\n } else {\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -1, props.items, props.isItemDisabled, true)\n };\n }\n } else {\n changes = {\n highlightedIndex: getHighlightedIndexOnOpen(props, state, -1),\n isOpen: props.items.length >= 0\n };\n }\n break;\n case InputKeyDownEnter:\n changes = getChangesOnSelection(props, state.highlightedIndex);\n break;\n case InputKeyDownEscape:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, !state.isOpen && {\n selectedItem: null,\n inputValue: \"\"\n });\n break;\n case InputKeyDownPageUp:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, -10, props.items, props.isItemDisabled, true)\n };\n break;\n case InputKeyDownPageDown:\n changes = {\n highlightedIndex: getHighlightedIndex(state.highlightedIndex, 10, props.items, props.isItemDisabled, true)\n };\n break;\n case InputKeyDownHome:\n changes = {\n highlightedIndex: getNonDisabledIndex(0, false, props.items, props.isItemDisabled)\n };\n break;\n case InputKeyDownEnd:\n changes = {\n highlightedIndex: getNonDisabledIndex(props.items.length - 1, true, props.items, props.isItemDisabled)\n };\n break;\n case InputBlur:\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isOpen: false,\n highlightedIndex: -1\n }, state.highlightedIndex >= 0 && ((_props$items = props.items) == null ? void 0 : _props$items.length) && action.selectItem && {\n selectedItem: props.items[state.highlightedIndex],\n inputValue: props.itemToString(props.items[state.highlightedIndex])\n });\n break;\n case InputChange:\n changes = {\n isOpen: true,\n highlightedIndex: getDefaultValue$1(props, \"highlightedIndex\"),\n inputValue: action.inputValue\n };\n break;\n case InputClick:\n changes = {\n isOpen: !state.isOpen,\n highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)\n };\n break;\n case FunctionSelectItem:\n changes = {\n selectedItem: action.selectedItem,\n inputValue: props.itemToString(action.selectedItem)\n };\n break;\n case ControlledPropUpdatedSelectedItem:\n changes = {\n inputValue: action.inputValue\n };\n break;\n default:\n return downshiftCommonReducer(state, action, stateChangeTypes$1);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\n/* eslint-enable complexity */ var _excluded$1 = [\n \"onMouseLeave\",\n \"refKey\",\n \"ref\"\n], _excluded2$1 = [\n \"item\",\n \"index\",\n \"refKey\",\n \"ref\",\n \"onMouseMove\",\n \"onMouseDown\",\n \"onClick\",\n \"onPress\",\n \"disabled\"\n], _excluded3 = [\n \"onClick\",\n \"onPress\",\n \"refKey\",\n \"ref\"\n], _excluded4 = [\n \"onKeyDown\",\n \"onChange\",\n \"onInput\",\n \"onBlur\",\n \"onChangeText\",\n \"onClick\",\n \"refKey\",\n \"ref\"\n];\nuseCombobox.stateChangeTypes = stateChangeTypes$1;\nfunction useCombobox(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes$1(userProps, useCombobox);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps$1, userProps);\n var items = props.items, _$scrollIntoView = props.scrollIntoView, environment = props.environment, _$getA11yStatusMessage = props.getA11yStatusMessage, _$getA11ySelectionMessage = props.getA11ySelectionMessage, _$itemToString = props.itemToString;\n // Initial state depending on controlled props.\n var initialState = getInitialState$1(props);\n var _useControlledReducer = useControlledReducer(downshiftUseComboboxReducer, initialState, props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var isOpen = state.isOpen, highlightedIndex = state.highlightedIndex, selectedItem = state.selectedItem, inputValue = state.inputValue;\n // Element refs.\n var menuRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var itemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)({});\n var inputRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var toggleButtonRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n // prevent id re-generation between renders.\n var elementIds = useElementIds(props);\n // used to keep track of how many items we had on previous cycle.\n var previousResultCountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n // utility callback to get item element.\n var latest = useLatestRef({\n state: state,\n props: props\n });\n var getItemNodeFromIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(index) {\n return itemRefs.current[elementIds.getItemId(index)];\n }, [\n elementIds\n ]);\n // Effects.\n // Sets a11y status message on changes in state.\n useA11yMessageSetter(_$getA11yStatusMessage, [\n isOpen,\n highlightedIndex,\n inputValue,\n items\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Sets a11y status message on changes in selectedItem.\n useA11yMessageSetter(_$getA11ySelectionMessage, [\n selectedItem\n ], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n isInitialMount: isInitialMountRef.current,\n previousResultCount: previousResultCountRef.current,\n items: items,\n environment: environment,\n itemToString: _$itemToString\n }, state));\n // Scroll on highlighted item if change comes from keyboard.\n var shouldScrollRef = useScrollIntoView({\n menuElement: menuRef.current,\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n itemRefs: itemRefs,\n scrollIntoView: _$scrollIntoView,\n getItemNodeFromIndex: getItemNodeFromIndex\n });\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n // Focus the input on first render if required.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var focusOnOpen = getInitialValue$1(props, \"isOpen\");\n if (focusOnOpen && inputRef.current) {\n inputRef.current.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n previousResultCountRef.current = items.length;\n });\n // Add mouse/touch events to document.\n var mouseAndTouchTrackersRef = useMouseAndTouchTracker(isOpen, [\n inputRef,\n menuRef,\n toggleButtonRef\n ], environment, function() {\n dispatch({\n type: InputBlur,\n selectItem: false\n });\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getInputProps\", \"getMenuProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Reset itemRefs on close.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n var _environment$document;\n if (!isOpen) {\n itemRefs.current = {};\n } else if (((_environment$document = environment.document) == null ? void 0 : _environment$document.activeElement) !== inputRef.current) {\n var _inputRef$current;\n inputRef == null || (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();\n }\n }, [\n isOpen,\n environment\n ]);\n /* Event handler functions */ var inputKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n return {\n ArrowDown: function ArrowDown(event) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownArrowDown,\n altKey: event.altKey\n });\n },\n ArrowUp: function ArrowUp(event) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownArrowUp,\n altKey: event.altKey\n });\n },\n Home: function Home(event) {\n if (!latest.current.state.isOpen) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownHome\n });\n },\n End: function End(event) {\n if (!latest.current.state.isOpen) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownEnd\n });\n },\n Escape: function Escape(event) {\n var latestState = latest.current.state;\n if (latestState.isOpen || latestState.inputValue || latestState.selectedItem || latestState.highlightedIndex > -1) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownEscape\n });\n }\n },\n Enter: function Enter(event) {\n var latestState = latest.current.state;\n // if closed or no highlighted index, do nothing.\n if (!latestState.isOpen || event.which === 229 // if IME composing, wait for next Enter keydown event.\n ) {\n return;\n }\n event.preventDefault();\n dispatch({\n type: InputKeyDownEnter\n });\n },\n PageUp: function PageUp(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownPageUp\n });\n }\n },\n PageDown: function PageDown(event) {\n if (latest.current.state.isOpen) {\n event.preventDefault();\n dispatch({\n type: InputKeyDownPageDown\n });\n }\n }\n };\n }, [\n dispatch,\n latest\n ]);\n // Getter props.\n var getLabelProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(labelProps) {\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n id: elementIds.labelId,\n htmlFor: elementIds.inputId\n }, labelProps);\n }, [\n elementIds\n ]);\n var getMenuProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp, _temp2) {\n var _extends2;\n var _ref = _temp === void 0 ? {} : _temp, onMouseLeave = _ref.onMouseLeave, _ref$refKey = _ref.refKey, refKey = _ref$refKey === void 0 ? \"ref\" : _ref$refKey, ref = _ref.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref, _excluded$1);\n var _ref2 = _temp2 === void 0 ? {} : _temp2, _ref2$suppressRefErro = _ref2.suppressRefError, suppressRefError = _ref2$suppressRefErro === void 0 ? false : _ref2$suppressRefErro;\n setGetterPropCallInfo(\"getMenuProps\", suppressRefError, refKey, menuRef);\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(menuNode) {\n menuRef.current = menuNode;\n }), _extends2.id = elementIds.menuId, _extends2.role = \"listbox\", _extends2[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : \"\" + elementIds.labelId, _extends2.onMouseLeave = callAllEventHandlers(onMouseLeave, function() {\n dispatch({\n type: MenuMouseLeave\n });\n }), _extends2), rest);\n }, [\n dispatch,\n setGetterPropCallInfo,\n elementIds\n ]);\n var getItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp3) {\n var _extends3, _ref4;\n var _ref3 = _temp3 === void 0 ? {} : _temp3, itemProp = _ref3.item, indexProp = _ref3.index, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, onMouseMove = _ref3.onMouseMove, onMouseDown = _ref3.onMouseDown, onClick = _ref3.onClick;\n _ref3.onPress;\n var disabledProp = _ref3.disabled, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded2$1);\n if (disabledProp !== undefined) {\n console.warn('Passing \"disabled\" as an argument to getItemProps is not supported anymore. Please use the isItemDisabled prop from useCombobox.');\n }\n var _latest$current = latest.current, latestProps = _latest$current.props, latestState = _latest$current.state;\n var _getItemAndIndex = getItemAndIndex(itemProp, indexProp, latestProps.items, \"Pass either item or index to getItemProps!\"), item = _getItemAndIndex[0], index = _getItemAndIndex[1];\n var disabled = latestProps.isItemDisabled(item, index);\n var onSelectKey = \"onClick\";\n var customClickHandler = onClick;\n var itemHandleMouseMove = function itemHandleMouseMove() {\n if (index === latestState.highlightedIndex) {\n return;\n }\n shouldScrollRef.current = false;\n dispatch({\n type: ItemMouseMove,\n index: index,\n disabled: disabled\n });\n };\n var itemHandleClick = function itemHandleClick() {\n dispatch({\n type: ItemClick,\n index: index\n });\n };\n var itemHandleMouseDown = function itemHandleMouseDown(e) {\n return e.preventDefault();\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(itemNode) {\n if (itemNode) {\n itemRefs.current[elementIds.getItemId(index)] = itemNode;\n }\n }), _extends3[\"aria-disabled\"] = disabled, _extends3[\"aria-selected\"] = \"\" + (index === latestState.highlightedIndex), _extends3.id = elementIds.getItemId(index), _extends3.role = \"option\", _extends3), !disabled && (_ref4 = {}, _ref4[onSelectKey] = callAllEventHandlers(customClickHandler, itemHandleClick), _ref4), {\n onMouseMove: callAllEventHandlers(onMouseMove, itemHandleMouseMove),\n onMouseDown: callAllEventHandlers(onMouseDown, itemHandleMouseDown)\n }, rest);\n }, [\n dispatch,\n latest,\n shouldScrollRef,\n elementIds\n ]);\n var getToggleButtonProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp4) {\n var _extends4;\n var _ref5 = _temp4 === void 0 ? {} : _temp4, onClick = _ref5.onClick;\n _ref5.onPress;\n var _ref5$refKey = _ref5.refKey, refKey = _ref5$refKey === void 0 ? \"ref\" : _ref5$refKey, ref = _ref5.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref5, _excluded3);\n var latestState = latest.current.state;\n var toggleButtonHandleClick = function toggleButtonHandleClick() {\n dispatch({\n type: ToggleButtonClick\n });\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends4 = {}, _extends4[refKey] = handleRefs(ref, function(toggleButtonNode) {\n toggleButtonRef.current = toggleButtonNode;\n }), _extends4[\"aria-controls\"] = elementIds.menuId, _extends4[\"aria-expanded\"] = latestState.isOpen, _extends4.id = elementIds.toggleButtonId, _extends4.tabIndex = -1, _extends4), !rest.disabled && (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, {\n onClick: callAllEventHandlers(onClick, toggleButtonHandleClick)\n }), rest);\n }, [\n dispatch,\n latest,\n elementIds\n ]);\n var getInputProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp5, _temp6) {\n var _extends5;\n var _ref6 = _temp5 === void 0 ? {} : _temp5, onKeyDown = _ref6.onKeyDown, onChange = _ref6.onChange, onInput = _ref6.onInput, onBlur = _ref6.onBlur;\n _ref6.onChangeText;\n var onClick = _ref6.onClick, _ref6$refKey = _ref6.refKey, refKey = _ref6$refKey === void 0 ? \"ref\" : _ref6$refKey, ref = _ref6.ref, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref6, _excluded4);\n var _ref7 = _temp6 === void 0 ? {} : _temp6, _ref7$suppressRefErro = _ref7.suppressRefError, suppressRefError = _ref7$suppressRefErro === void 0 ? false : _ref7$suppressRefErro;\n setGetterPropCallInfo(\"getInputProps\", suppressRefError, refKey, inputRef);\n var latestState = latest.current.state;\n var inputHandleKeyDown = function inputHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && inputKeyDownHandlers[key]) {\n inputKeyDownHandlers[key](event);\n }\n };\n var inputHandleChange = function inputHandleChange(event) {\n dispatch({\n type: InputChange,\n inputValue: event.target.value\n });\n };\n var inputHandleBlur = function inputHandleBlur(event) {\n /* istanbul ignore else */ if (latestState.isOpen && !mouseAndTouchTrackersRef.current.isMouseDown) {\n var isBlurByTabChange = event.relatedTarget === null && environment.document.activeElement !== environment.document.body;\n dispatch({\n type: InputBlur,\n selectItem: !isBlurByTabChange\n });\n }\n };\n var inputHandleClick = function inputHandleClick() {\n dispatch({\n type: InputClick\n });\n };\n /* istanbul ignore next (preact) */ var onChangeKey = \"onChange\";\n var eventHandlers = {};\n if (!rest.disabled) {\n var _eventHandlers;\n eventHandlers = (_eventHandlers = {}, _eventHandlers[onChangeKey] = callAllEventHandlers(onChange, onInput, inputHandleChange), _eventHandlers.onKeyDown = callAllEventHandlers(onKeyDown, inputHandleKeyDown), _eventHandlers.onBlur = callAllEventHandlers(onBlur, inputHandleBlur), _eventHandlers.onClick = callAllEventHandlers(onClick, inputHandleClick), _eventHandlers);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends5 = {}, _extends5[refKey] = handleRefs(ref, function(inputNode) {\n inputRef.current = inputNode;\n }), _extends5[\"aria-activedescendant\"] = latestState.isOpen && latestState.highlightedIndex > -1 ? elementIds.getItemId(latestState.highlightedIndex) : \"\", _extends5[\"aria-autocomplete\"] = \"list\", _extends5[\"aria-controls\"] = elementIds.menuId, _extends5[\"aria-expanded\"] = latestState.isOpen, _extends5[\"aria-labelledby\"] = rest && rest[\"aria-label\"] ? undefined : elementIds.labelId, _extends5.autoComplete = \"off\", _extends5.id = elementIds.inputId, _extends5.role = \"combobox\", _extends5.value = latestState.inputValue, _extends5), eventHandlers, rest);\n }, [\n setGetterPropCallInfo,\n latest,\n elementIds,\n inputKeyDownHandlers,\n dispatch,\n mouseAndTouchTrackersRef,\n environment\n ]);\n // returns\n var toggleMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionToggleMenu\n });\n }, [\n dispatch\n ]);\n var closeMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionCloseMenu\n });\n }, [\n dispatch\n ]);\n var openMenu = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionOpenMenu\n });\n }, [\n dispatch\n ]);\n var setHighlightedIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newHighlightedIndex) {\n dispatch({\n type: FunctionSetHighlightedIndex,\n highlightedIndex: newHighlightedIndex\n });\n }, [\n dispatch\n ]);\n var selectItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItem) {\n dispatch({\n type: FunctionSelectItem,\n selectedItem: newSelectedItem\n });\n }, [\n dispatch\n ]);\n var setInputValue = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newInputValue) {\n dispatch({\n type: FunctionSetInputValue,\n inputValue: newInputValue\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset$1\n });\n }, [\n dispatch\n ]);\n return {\n // prop getters.\n getItemProps: getItemProps,\n getLabelProps: getLabelProps,\n getMenuProps: getMenuProps,\n getInputProps: getInputProps,\n getToggleButtonProps: getToggleButtonProps,\n // actions.\n toggleMenu: toggleMenu,\n openMenu: openMenu,\n closeMenu: closeMenu,\n setHighlightedIndex: setHighlightedIndex,\n setInputValue: setInputValue,\n selectItem: selectItem,\n reset: reset,\n // state.\n highlightedIndex: highlightedIndex,\n isOpen: isOpen,\n selectedItem: selectedItem,\n inputValue: inputValue\n };\n}\nvar defaultStateValues = {\n activeIndex: -1,\n selectedItems: []\n};\n/**\n * Returns the initial value for a state key in the following order:\n * 1. controlled prop, 2. initial prop, 3. default prop, 4. default\n * value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */ function getInitialValue(props, propKey) {\n return getInitialValue$1(props, propKey, defaultStateValues);\n}\n/**\n * Returns the default value for a state key in the following order:\n * 1. controlled prop, 2. default prop, 3. default value from Downshift.\n *\n * @param {Object} props Props passed to the hook.\n * @param {string} propKey Props key to generate the value for.\n * @returns {any} The initial value for that prop.\n */ function getDefaultValue(props, propKey) {\n return getDefaultValue$1(props, propKey, defaultStateValues);\n}\n/**\n * Gets the initial state based on the provided props. It uses initial, default\n * and controlled props related to state in order to compute the initial value.\n *\n * @param {Object} props Props passed to the hook.\n * @returns {Object} The initial state.\n */ function getInitialState(props) {\n var activeIndex = getInitialValue(props, \"activeIndex\");\n var selectedItems = getInitialValue(props, \"selectedItems\");\n return {\n activeIndex: activeIndex,\n selectedItems: selectedItems\n };\n}\n/**\n * Returns true if dropdown keydown operation is permitted. Should not be\n * allowed on keydown with modifier keys (ctrl, alt, shift, meta), on\n * input element with text content that is either highlighted or selection\n * cursor is not at the starting position.\n *\n * @param {KeyboardEvent} event The event from keydown.\n * @returns {boolean} Whether the operation is allowed.\n */ function isKeyDownOperationPermitted(event) {\n if (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {\n return false;\n }\n var element = event.target;\n if (_instanceof(element, HTMLInputElement) && // if element is a text input\n element.value !== \"\" && // and we have text in it\n // and cursor is either not at the start or is currently highlighting text.\n (element.selectionStart !== 0 || element.selectionEnd !== 0)) {\n return false;\n }\n return true;\n}\n/**\n * Returns a message to be added to aria-live region when item is removed.\n *\n * @param {Object} selectionParameters Parameters required to build the message.\n * @returns {string} The a11y message.\n */ function getA11yRemovalMessage(selectionParameters) {\n var removedSelectedItem = selectionParameters.removedSelectedItem, itemToStringLocal = selectionParameters.itemToString;\n return itemToStringLocal(removedSelectedItem) + \" has been removed.\";\n}\nvar propTypes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, commonPropTypes, {\n selectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n initialSelectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n defaultSelectedItems: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().array),\n getA11yRemovalMessage: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n activeIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n initialActiveIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n defaultActiveIndex: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number),\n onActiveIndexChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n onSelectedItemsChange: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func),\n keyNavigationNext: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string),\n keyNavigationPrevious: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().string)\n});\nvar defaultProps = {\n itemToString: defaultProps$3.itemToString,\n stateReducer: defaultProps$3.stateReducer,\n environment: defaultProps$3.environment,\n getA11yRemovalMessage: getA11yRemovalMessage,\n keyNavigationNext: \"ArrowRight\",\n keyNavigationPrevious: \"ArrowLeft\"\n};\n// eslint-disable-next-line import/no-mutable-exports\nvar validatePropTypes = noop;\n/* istanbul ignore next */ if (true) {\n validatePropTypes = function validatePropTypes(options, caller) {\n prop_types__WEBPACK_IMPORTED_MODULE_7___default().checkPropTypes(propTypes, options, \"prop\", caller.name);\n };\n}\nvar SelectedItemClick = true ? \"__selected_item_click__\" : 0;\nvar SelectedItemKeyDownDelete = true ? \"__selected_item_keydown_delete__\" : 0;\nvar SelectedItemKeyDownBackspace = true ? \"__selected_item_keydown_backspace__\" : 0;\nvar SelectedItemKeyDownNavigationNext = true ? \"__selected_item_keydown_navigation_next__\" : 0;\nvar SelectedItemKeyDownNavigationPrevious = true ? \"__selected_item_keydown_navigation_previous__\" : 0;\nvar DropdownKeyDownNavigationPrevious = true ? \"__dropdown_keydown_navigation_previous__\" : 0;\nvar DropdownKeyDownBackspace = true ? \"__dropdown_keydown_backspace__\" : 0;\nvar DropdownClick = true ? \"__dropdown_click__\" : 0;\nvar FunctionAddSelectedItem = true ? \"__function_add_selected_item__\" : 0;\nvar FunctionRemoveSelectedItem = true ? \"__function_remove_selected_item__\" : 0;\nvar FunctionSetSelectedItems = true ? \"__function_set_selected_items__\" : 0;\nvar FunctionSetActiveIndex = true ? \"__function_set_active_index__\" : 0;\nvar FunctionReset = true ? \"__function_reset__\" : 0;\nvar stateChangeTypes = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n SelectedItemClick: SelectedItemClick,\n SelectedItemKeyDownDelete: SelectedItemKeyDownDelete,\n SelectedItemKeyDownBackspace: SelectedItemKeyDownBackspace,\n SelectedItemKeyDownNavigationNext: SelectedItemKeyDownNavigationNext,\n SelectedItemKeyDownNavigationPrevious: SelectedItemKeyDownNavigationPrevious,\n DropdownKeyDownNavigationPrevious: DropdownKeyDownNavigationPrevious,\n DropdownKeyDownBackspace: DropdownKeyDownBackspace,\n DropdownClick: DropdownClick,\n FunctionAddSelectedItem: FunctionAddSelectedItem,\n FunctionRemoveSelectedItem: FunctionRemoveSelectedItem,\n FunctionSetSelectedItems: FunctionSetSelectedItems,\n FunctionSetActiveIndex: FunctionSetActiveIndex,\n FunctionReset: FunctionReset\n});\n/* eslint-disable complexity */ function downshiftMultipleSelectionReducer(state, action) {\n var type = action.type, index = action.index, props = action.props, selectedItem = action.selectedItem;\n var activeIndex = state.activeIndex, selectedItems = state.selectedItems;\n var changes;\n switch(type){\n case SelectedItemClick:\n changes = {\n activeIndex: index\n };\n break;\n case SelectedItemKeyDownNavigationPrevious:\n changes = {\n activeIndex: activeIndex - 1 < 0 ? 0 : activeIndex - 1\n };\n break;\n case SelectedItemKeyDownNavigationNext:\n changes = {\n activeIndex: activeIndex + 1 >= selectedItems.length ? -1 : activeIndex + 1\n };\n break;\n case SelectedItemKeyDownBackspace:\n case SelectedItemKeyDownDelete:\n {\n if (activeIndex < 0) {\n break;\n }\n var newActiveIndex = activeIndex;\n if (selectedItems.length === 1) {\n newActiveIndex = -1;\n } else if (activeIndex === selectedItems.length - 1) {\n newActiveIndex = selectedItems.length - 2;\n }\n changes = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n selectedItems: [].concat(selectedItems.slice(0, activeIndex), selectedItems.slice(activeIndex + 1))\n }, {\n activeIndex: newActiveIndex\n });\n break;\n }\n case DropdownKeyDownNavigationPrevious:\n changes = {\n activeIndex: selectedItems.length - 1\n };\n break;\n case DropdownKeyDownBackspace:\n changes = {\n selectedItems: selectedItems.slice(0, selectedItems.length - 1)\n };\n break;\n case FunctionAddSelectedItem:\n changes = {\n selectedItems: [].concat(selectedItems, [\n selectedItem\n ])\n };\n break;\n case DropdownClick:\n changes = {\n activeIndex: -1\n };\n break;\n case FunctionRemoveSelectedItem:\n {\n var _newActiveIndex = activeIndex;\n var selectedItemIndex = selectedItems.indexOf(selectedItem);\n if (selectedItemIndex < 0) {\n break;\n }\n if (selectedItems.length === 1) {\n _newActiveIndex = -1;\n } else if (selectedItemIndex === selectedItems.length - 1) {\n _newActiveIndex = selectedItems.length - 2;\n }\n changes = {\n selectedItems: [].concat(selectedItems.slice(0, selectedItemIndex), selectedItems.slice(selectedItemIndex + 1)),\n activeIndex: _newActiveIndex\n };\n break;\n }\n case FunctionSetSelectedItems:\n {\n var newSelectedItems = action.selectedItems;\n changes = {\n selectedItems: newSelectedItems\n };\n break;\n }\n case FunctionSetActiveIndex:\n {\n var _newActiveIndex2 = action.activeIndex;\n changes = {\n activeIndex: _newActiveIndex2\n };\n break;\n }\n case FunctionReset:\n changes = {\n activeIndex: getDefaultValue(props, \"activeIndex\"),\n selectedItems: getDefaultValue(props, \"selectedItems\")\n };\n break;\n default:\n throw new Error(\"Reducer called without proper action type.\");\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, state, changes);\n}\nvar _excluded = [\n \"refKey\",\n \"ref\",\n \"onClick\",\n \"onKeyDown\",\n \"selectedItem\",\n \"index\"\n], _excluded2 = [\n \"refKey\",\n \"ref\",\n \"onKeyDown\",\n \"onClick\",\n \"preventKeyAction\"\n];\nuseMultipleSelection.stateChangeTypes = stateChangeTypes;\nfunction useMultipleSelection(userProps) {\n if (userProps === void 0) {\n userProps = {};\n }\n validatePropTypes(userProps, useMultipleSelection);\n // Props defaults and destructuring.\n var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, defaultProps, userProps);\n var _$getA11yRemovalMessage = props.getA11yRemovalMessage, _$itemToString = props.itemToString, environment = props.environment, keyNavigationNext = props.keyNavigationNext, keyNavigationPrevious = props.keyNavigationPrevious;\n // Reducer init.\n var _useControlledReducer = useControlledReducer$1(downshiftMultipleSelectionReducer, getInitialState(props), props), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];\n var activeIndex = state.activeIndex, selectedItems = state.selectedItems;\n // Refs.\n var isInitialMountRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(true);\n var dropdownRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null);\n var previousSelectedItemsRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(selectedItems);\n var selectedItemRefs = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();\n selectedItemRefs.current = [];\n var latest = useLatestRef({\n state: state,\n props: props\n });\n // Effects.\n /* Sets a11y status message on changes in selectedItem. */ (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current || false) {\n return;\n }\n if (selectedItems.length < previousSelectedItemsRef.current.length) {\n var removedSelectedItem = previousSelectedItemsRef.current.find(function(item) {\n return selectedItems.indexOf(item) < 0;\n });\n setStatus(_$getA11yRemovalMessage({\n itemToString: _$itemToString,\n resultCount: selectedItems.length,\n removedSelectedItem: removedSelectedItem,\n activeIndex: activeIndex,\n activeSelectedItem: selectedItems[activeIndex]\n }), environment.document);\n }\n previousSelectedItemsRef.current = selectedItems;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n selectedItems.length\n ]);\n // Sets focus on active item.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n if (isInitialMountRef.current) {\n return;\n }\n if (activeIndex === -1 && dropdownRef.current) {\n dropdownRef.current.focus();\n } else if (selectedItemRefs.current[activeIndex]) {\n selectedItemRefs.current[activeIndex].focus();\n }\n }, [\n activeIndex\n ]);\n useControlPropsValidator({\n isInitialMount: isInitialMountRef.current,\n props: props,\n state: state\n });\n var setGetterPropCallInfo = useGetterPropsCalledChecker(\"getDropdownProps\");\n // Make initial ref false.\n (0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function() {\n isInitialMountRef.current = false;\n return function() {\n isInitialMountRef.current = true;\n };\n }, []);\n // Event handler functions.\n var selectedItemKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n var _ref;\n return _ref = {}, _ref[keyNavigationPrevious] = function() {\n dispatch({\n type: SelectedItemKeyDownNavigationPrevious\n });\n }, _ref[keyNavigationNext] = function() {\n dispatch({\n type: SelectedItemKeyDownNavigationNext\n });\n }, _ref.Delete = function Delete() {\n dispatch({\n type: SelectedItemKeyDownDelete\n });\n }, _ref.Backspace = function Backspace() {\n dispatch({\n type: SelectedItemKeyDownBackspace\n });\n }, _ref;\n }, [\n dispatch,\n keyNavigationNext,\n keyNavigationPrevious\n ]);\n var dropdownKeyDownHandlers = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function() {\n var _ref2;\n return _ref2 = {}, _ref2[keyNavigationPrevious] = function(event) {\n if (isKeyDownOperationPermitted(event)) {\n dispatch({\n type: DropdownKeyDownNavigationPrevious\n });\n }\n }, _ref2.Backspace = function Backspace(event) {\n if (isKeyDownOperationPermitted(event)) {\n dispatch({\n type: DropdownKeyDownBackspace\n });\n }\n }, _ref2;\n }, [\n dispatch,\n keyNavigationPrevious\n ]);\n // Getter props.\n var getSelectedItemProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp) {\n var _extends2;\n var _ref3 = _temp === void 0 ? {} : _temp, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey, ref = _ref3.ref, onClick = _ref3.onClick, onKeyDown = _ref3.onKeyDown, selectedItemProp = _ref3.selectedItem, indexProp = _ref3.index, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref3, _excluded);\n var latestState = latest.current.state;\n var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, \"Pass either item or index to getSelectedItemProps!\"), index = _getItemAndIndex[1];\n var isFocusable = index > -1 && index === latestState.activeIndex;\n var selectedItemHandleClick = function selectedItemHandleClick() {\n dispatch({\n type: SelectedItemClick,\n index: index\n });\n };\n var selectedItemHandleKeyDown = function selectedItemHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && selectedItemKeyDownHandlers[key]) {\n selectedItemKeyDownHandlers[key](event);\n }\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(selectedItemNode) {\n if (selectedItemNode) {\n selectedItemRefs.current.push(selectedItemNode);\n }\n }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);\n }, [\n dispatch,\n latest,\n selectedItemKeyDownHandlers\n ]);\n var getDropdownProps = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(_temp2, _temp3) {\n var _extends3;\n var _ref4 = _temp2 === void 0 ? {} : _temp2, _ref4$refKey = _ref4.refKey, refKey = _ref4$refKey === void 0 ? \"ref\" : _ref4$refKey, ref = _ref4.ref, onKeyDown = _ref4.onKeyDown, onClick = _ref4.onClick, _ref4$preventKeyActio = _ref4.preventKeyAction, preventKeyAction = _ref4$preventKeyActio === void 0 ? false : _ref4$preventKeyActio, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref4, _excluded2);\n var _ref5 = _temp3 === void 0 ? {} : _temp3, _ref5$suppressRefErro = _ref5.suppressRefError, suppressRefError = _ref5$suppressRefErro === void 0 ? false : _ref5$suppressRefErro;\n setGetterPropCallInfo(\"getDropdownProps\", suppressRefError, refKey, dropdownRef);\n var dropdownHandleKeyDown = function dropdownHandleKeyDown(event) {\n var key = normalizeArrowKey(event);\n if (key && dropdownKeyDownHandlers[key]) {\n dropdownKeyDownHandlers[key](event);\n }\n };\n var dropdownHandleClick = function dropdownHandleClick() {\n dispatch({\n type: DropdownClick\n });\n };\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(dropdownNode) {\n if (dropdownNode) {\n dropdownRef.current = dropdownNode;\n }\n }), _extends3), !preventKeyAction && {\n onKeyDown: callAllEventHandlers(onKeyDown, dropdownHandleKeyDown),\n onClick: callAllEventHandlers(onClick, dropdownHandleClick)\n }, rest);\n }, [\n dispatch,\n dropdownKeyDownHandlers,\n setGetterPropCallInfo\n ]);\n // returns\n var addSelectedItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(selectedItem) {\n dispatch({\n type: FunctionAddSelectedItem,\n selectedItem: selectedItem\n });\n }, [\n dispatch\n ]);\n var removeSelectedItem = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(selectedItem) {\n dispatch({\n type: FunctionRemoveSelectedItem,\n selectedItem: selectedItem\n });\n }, [\n dispatch\n ]);\n var setSelectedItems = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newSelectedItems) {\n dispatch({\n type: FunctionSetSelectedItems,\n selectedItems: newSelectedItems\n });\n }, [\n dispatch\n ]);\n var setActiveIndex = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function(newActiveIndex) {\n dispatch({\n type: FunctionSetActiveIndex,\n activeIndex: newActiveIndex\n });\n }, [\n dispatch\n ]);\n var reset = (0,react__WEBPACK_IMPORTED_MODULE_4__.useCallback)(function() {\n dispatch({\n type: FunctionReset\n });\n }, [\n dispatch\n ]);\n return {\n getSelectedItemProps: getSelectedItemProps,\n getDropdownProps: getDropdownProps,\n addSelectedItem: addSelectedItem,\n removeSelectedItem: removeSelectedItem,\n setSelectedItems: setSelectedItems,\n setActiveIndex: setActiveIndex,\n reset: reset,\n selectedItems: selectedItems,\n activeIndex: activeIndex\n };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9kaXN0L2Rvd25zaGlmdC5lc20uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0c7QUFDMUM7QUFDNEI7QUFDaEI7QUFDbkM7QUFDMEY7QUFDckY7QUFDTztBQUNkO0FBRWpDLElBQUlpQixZQUFZO0FBRWhCOzs7Ozs7O0NBT0MsR0FDRCxTQUFTQyxPQUFPQyxFQUFFLEVBQUU7SUFDbEIsT0FBTyxPQUFPQSxPQUFPLGFBQWFBLEtBQUtDLElBQUk7QUFDN0M7QUFDQSxTQUFTQSxPQUFPLENBQUM7QUFFakI7Ozs7Q0FJQyxHQUNELFNBQVNDLGVBQWVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3RDLElBQUksQ0FBQ0QsTUFBTTtRQUNUO0lBQ0YsQ0FBQztJQUNELElBQUlFLFVBQVVULG9FQUFPQSxDQUFDTyxNQUFNO1FBQzFCRyxVQUFVRjtRQUNWRyxPQUFPO1FBQ1BDLFlBQVk7SUFDZDtJQUNBSCxRQUFRSSxPQUFPLENBQUMsU0FBVUMsSUFBSSxFQUFFO1FBQzlCLElBQUlDLEtBQUtELEtBQUtDLEVBQUUsRUFDZEMsTUFBTUYsS0FBS0UsR0FBRyxFQUNkQyxPQUFPSCxLQUFLRyxJQUFJO1FBQ2xCRixHQUFHRyxTQUFTLEdBQUdGO1FBQ2ZELEdBQUdJLFVBQVUsR0FBR0Y7SUFDbEI7QUFDRjtBQUVBOzs7OztDQUtDLEdBQ0QsU0FBU0csaUJBQWlCQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFFO0lBQ3BELElBQUlDLFNBQVNILFdBQVdDLFNBQVNBLFlBQUFBLE9BQWlCQyxZQUFZRSxJQUFJLEtBQUlKLE9BQU9LLFFBQVEsSUFBSUwsT0FBT0ssUUFBUSxDQUFDSjtJQUN6RyxPQUFPRTtBQUNUO0FBRUE7Ozs7Ozs7Q0FPQyxHQUNELFNBQVNHLFNBQVNDLEVBQUUsRUFBRUMsSUFBSSxFQUFFO1FBRWpCQyxTQUFULFNBQVNBLFNBQVM7UUFDaEIsSUFBSUMsV0FBVztZ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SUFBSW9QLHFCQUFxQnJyQixrREFBV0EsQ0FBQyxTQUFVbU4sWUFBWSxFQUFFO1FBQzNEOE8sU0FBUztZQUNQaFgsTUFBTWdrQjtZQUNOOWIsY0FBY0E7UUFDaEI7SUFDRixHQUFHO1FBQUM4TztLQUFTO0lBQ2IsSUFBSXFQLG1CQUFtQnRyQixrREFBV0EsQ0FBQyxTQUFVd3BCLGdCQUFnQixFQUFFO1FBQzdEdk4sU0FBUztZQUNQaFgsTUFBTWlrQjtZQUNOOUIsZUFBZW9DO1FBQ2pCO0lBQ0YsR0FBRztRQUFDdk47S0FBUztJQUNiLElBQUlzUCxpQkFBaUJ2ckIsa0RBQVdBLENBQUMsU0FBVXFwQixjQUFjLEVBQUU7UUFDekRwTixTQUFTO1lBQ1BoWCxNQUFNa2tCO1lBQ05oQyxhQUFha0M7UUFDZjtJQUNGLEdBQUc7UUFBQ3BOO0tBQVM7SUFDYixJQUFJckwsUUFBUTVRLGtEQUFXQSxDQUFDLFdBQVk7UUFDbENpYyxTQUFTO1lBQ1BoWCxNQUFNcWE7UUFDUjtJQUNGLEdBQUc7UUFBQ3JEO0tBQVM7SUFDYixPQUFPO1FBQ0xxTyxzQkFBc0JBO1FBQ3RCTSxrQkFBa0JBO1FBQ2xCUSxpQkFBaUJBO1FBQ2pCQyxvQkFBb0JBO1FBQ3BCQyxrQkFBa0JBO1FBQ2xCQyxnQkFBZ0JBO1FBQ2hCM2EsT0FBT0E7UUFDUHdXLGVBQWVBO1FBQ2ZELGFBQWFBO0lBQ2Y7QUFDRjtBQUVnRyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9kaXN0L2Rvd25zaGlmdC5lc20uanM/OWMzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZHVjZXIsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZvcndhcmRSZWYgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgY29tcHV0ZSBmcm9tICdjb21wdXRlLXNjcm9sbC1pbnRvLXZpZXcnO1xuaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5cbnZhciBpZENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEFjY2VwdHMgYSBwYXJhbWV0ZXIgYW5kIHJldHVybnMgaXQgaWYgaXQncyBhIGZ1bmN0aW9uXG4gKiBvciBhIG5vb3AgZnVuY3Rpb24gaWYgaXQncyBub3QuIFRoaXMgYWxsb3dzIHVzIHRvXG4gKiBhY2NlcHQgYSBjYWxsYmFjaywgYnV0IG5vdCB3b3JyeSBhYm91dCBpdCBpZiBpdCdzIG5vdFxuICogcGFzc2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2IgdGhlIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjYlRvQ2IoY2IpIHtcbiAgcmV0dXJuIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiIDogbm9vcDtcbn1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIFNjcm9sbCBub2RlIGludG8gdmlldyBpZiBuZWNlc3NhcnlcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgc2Nyb2xsIGludG8gdmlld1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbWVudU5vZGUgdGhlIG1lbnUgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KG5vZGUsIG1lbnVOb2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYWN0aW9ucyA9IGNvbXB1dGUobm9kZSwge1xuICAgIGJvdW5kYXJ5OiBtZW51Tm9kZSxcbiAgICBibG9jazogJ25lYXJlc3QnLFxuICAgIHNjcm9sbE1vZGU6ICdpZi1uZWVkZWQnXG4gIH0pO1xuICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgZWwgPSBfcmVmLmVsLFxuICAgICAgdG9wID0gX3JlZi50b3AsXG4gICAgICBsZWZ0ID0gX3JlZi5sZWZ0O1xuICAgIGVsLnNjcm9sbFRvcCA9IHRvcDtcbiAgICBlbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50IHRoZSBwYXJlbnQgbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2hpbGQgdGhlIGNoaWxkIG5vZGVcbiAqIEBwYXJhbSB7V2luZG93fSBlbnZpcm9ubWVudCBUaGUgd2luZG93IGNvbnRleHQgd2hlcmUgZG93bnNoaWZ0IHJlbmRlcnMuXG4gKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIHRoZSBwYXJlbnQgaXMgdGhlIGNoaWxkIG9yIHRoZSBjaGlsZCBpcyBpbiB0aGUgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGlzT3JDb250YWluc05vZGUocGFyZW50LCBjaGlsZCwgZW52aXJvbm1lbnQpIHtcbiAgdmFyIHJlc3VsdCA9IHBhcmVudCA9PT0gY2hpbGQgfHwgY2hpbGQgaW5zdGFuY2VvZiBlbnZpcm9ubWVudC5Ob2RlICYmIHBhcmVudC5jb250YWlucyAmJiBwYXJlbnQuY29udGFpbnMoY2hpbGQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNpbXBsZSBkZWJvdW5jZSBpbXBsZW1lbnRhdGlvbi4gV2lsbCBjYWxsIHRoZSBnaXZlblxuICogZnVuY3Rpb24gb25jZSBhZnRlciB0aGUgdGltZSBnaXZlbiBoYXMgcGFzc2VkIHNpbmNlXG4gKiBpdCB3YXMgbGFzdCBjYWxsZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0aGUgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciB0aGUgdGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHRpbWUgdGhlIHRpbWUgdG8gd2FpdFxuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZm4sIHRpbWUpIHtcbiAgdmFyIHRpbWVvdXRJZDtcbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgY2FuY2VsKCk7XG4gICAgdGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICB9LCB0aW1lKTtcbiAgfVxuICB3cmFwcGVyLmNhbmNlbCA9IGNhbmNlbDtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbi8qKlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGNvbXBvc2UgZXZlbnQgaGFuZGxlcnMuXG4gKiBUaGV5IGFyZSBleGVjdXRlZCBpbiBvcmRlciB1bnRpbCBvbmUgb2YgdGhlbSBzZXRzXG4gKiBgZXZlbnQucHJldmVudERvd25zaGlmdERlZmF1bHQgPSB0cnVlYC5cbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZucyB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgZXZlbnQgaGFuZGxlciB0byBhZGQgdG8gYW4gZWxlbWVudFxuICovXG5mdW5jdGlvbiBjYWxsQWxsRXZlbnRIYW5kbGVycygpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBmbnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBmbnNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zID4gMSA/IF9sZW4zIC0gMSA6IDApLCBfa2V5MyA9IDE7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuICAgIHJldHVybiBmbnMuc29tZShmdW5jdGlvbiAoZm4pIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICBmbi5hcHBseSh2b2lkIDAsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RG93bnNoaWZ0RGVmYXVsdCB8fCBldmVudC5oYXNPd25Qcm9wZXJ0eSgnbmF0aXZlRXZlbnQnKSAmJiBldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RG93bnNoaWZ0RGVmYXVsdDtcbiAgICB9KTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVJlZnMoKSB7XG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVmcyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgIHJlZnNbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZWZzLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVmKG5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZ2VuZXJhdGVzIGEgdW5pcXVlIElEIGZvciBhbiBpbnN0YW5jZSBvZiBEb3duc2hpZnRcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaXF1ZSBJRFxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuICByZXR1cm4gU3RyaW5nKGlkQ291bnRlcisrKTtcbn1cblxuLyoqXG4gKiBSZXNldHMgaWRDb3VudGVyIHRvIDAuIFVzZWQgZm9yIFNTUi5cbiAqL1xuZnVuY3Rpb24gcmVzZXRJZENvdW50ZXIoKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIGlmICgndXNlSWQnIGluIFJlYWN0KSB7XG4gICAgY29uc29sZS53YXJuKFwiSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIHJlc2V0SWRDb3VudGVyIHdoZW4gdXNpbmcgUmVhY3QgMTgrXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZENvdW50ZXIgPSAwO1xufVxuXG4vKipcbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHN0YXR1cyBtZXNzYWdlLiBPbmx5IGFkZGVkIHdoZW4gbWVudSBpcyBvcGVuLlxuICogV2lsbCBzcGVjaWZ5IGlmIHRoZXJlIGFyZSByZXN1bHRzIGluIHRoZSBsaXN0LCBhbmQgaWYgc28sIGhvdyBtYW55LFxuICogYW5kIHdoYXQga2V5cyBhcmUgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtIHRoZSBkb3duc2hpZnQgc3RhdGUgYW5kIG90aGVyIHJlbGV2YW50IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIGExMXkgc3RhdHVzIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0QTExeVN0YXR1c01lc3NhZ2UkMShfcmVmMikge1xuICB2YXIgaXNPcGVuID0gX3JlZjIuaXNPcGVuLFxuICAgIHJlc3VsdENvdW50ID0gX3JlZjIucmVzdWx0Q291bnQsXG4gICAgcHJldmlvdXNSZXN1bHRDb3VudCA9IF9yZWYyLnByZXZpb3VzUmVzdWx0Q291bnQ7XG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmICghcmVzdWx0Q291bnQpIHtcbiAgICByZXR1cm4gJ05vIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS4nO1xuICB9XG4gIGlmIChyZXN1bHRDb3VudCAhPT0gcHJldmlvdXNSZXN1bHRDb3VudCkge1xuICAgIHJldHVybiByZXN1bHRDb3VudCArIFwiIHJlc3VsdFwiICsgKHJlc3VsdENvdW50ID09PSAxID8gJyBpcycgOiAncyBhcmUnKSArIFwiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIFByZXNzIEVudGVyIGtleSB0byBzZWxlY3QuXCI7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCBpZiBpdCdzIGFuIGFycmF5LCByZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBhcnJheVxuICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGFyZ3VtZW50XG4gKiBAcGFyYW0geyp9IGFyZyB0aGUgbWF5YmUtYXJyYXlcbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIHRoZSB2YWx1ZSBpZiBhcmcgaXMgZmFsc2V5IG5vdCBkZWZpbmVkXG4gKiBAcmV0dXJuIHsqfSB0aGUgYXJnIG9yIGl0J3MgZmlyc3QgaXRlbVxuICovXG5mdW5jdGlvbiB1bndyYXBBcnJheShhcmcsIGRlZmF1bHRWYWx1ZSkge1xuICBhcmcgPSBBcnJheS5pc0FycmF5KGFyZykgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL2FyZ1swXSA6IGFyZztcbiAgaWYgKCFhcmcgJiYgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXJnO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnQgKFApcmVhY3QgZWxlbWVudFxuICogQHJldHVybiB7Qm9vbGVhbn0gd2hldGhlciBpdCdzIGEgRE9NIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaXNET01FbGVtZW50KGVsZW1lbnQpIHtcblxuICAvLyB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIHJlYWN0XG4gIHJldHVybiB0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudCAoUClyZWFjdCBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwcm9wc1xuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50UHJvcHMoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5wcm9wcztcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXMuIFVzZWZ1bFxuICogdG8gYmUgdXNlZCBhcyBhIGRlZmF1bHQgaW4gZGVzdHJ1Y3R1cmluZyBvciBvYmplY3QgcGFyYW1zLlxuICogQHBhcmFtIHtTdHJpbmd9IGZuTmFtZSB0aGUgZnVuY3Rpb24gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lIHRoZSBwcm9wIG5hbWVcbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRQcm9wKGZuTmFtZSwgcHJvcE5hbWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5lcnJvcihcIlRoZSBwcm9wZXJ0eSBcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBpcyByZXF1aXJlZCBpbiBcXFwiXCIgKyBmbk5hbWUgKyBcIlxcXCJcIik7XG59XG52YXIgc3RhdGVLZXlzID0gWydoaWdobGlnaHRlZEluZGV4JywgJ2lucHV0VmFsdWUnLCAnaXNPcGVuJywgJ3NlbGVjdGVkSXRlbScsICd0eXBlJ107XG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSB0aGUgc3RhdGUgb2JqZWN0XG4gKiBAcmV0dXJuIHtPYmplY3R9IHN0YXRlIHRoYXQgaXMgcmVsZXZhbnQgdG8gZG93bnNoaWZ0XG4gKi9cbmZ1bmN0aW9uIHBpY2tTdGF0ZShzdGF0ZSkge1xuICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgIHN0YXRlID0ge307XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBzdGF0ZUtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIGlmIChzdGF0ZS5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgcmVzdWx0W2tdID0gc3RhdGVba107XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgcGVyZm9ybSBhIHNoYWxsb3cgbWVyZ2Ugb2YgdGhlIGdpdmVuIHN0YXRlIG9iamVjdFxuICogd2l0aCB0aGUgc3RhdGUgY29taW5nIGZyb20gcHJvcHNcbiAqIChmb3IgdGhlIGNvbnRyb2xsZWQgY29tcG9uZW50IHNjZW5hcmlvKVxuICogVGhpcyBpcyB1c2VkIGluIHN0YXRlIHVwZGF0ZXIgZnVuY3Rpb25zIHNvIHRoZXkncmUgcmVmZXJlbmNpbmdcbiAqIHRoZSByaWdodCBzdGF0ZSByZWdhcmRsZXNzIG9mIHdoZXJlIGl0IGNvbWVzIGZyb20uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIFRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50L2hvb2suXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgVGhlIHByb3BzIHRoYXQgbWF5IGNvbnRhaW4gY29udHJvbGxlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgbWVyZ2VkIGNvbnRyb2xsZWQgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXRlKHN0YXRlLCBwcm9wcykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc3RhdGUpLnJlZHVjZShmdW5jdGlvbiAocHJldlN0YXRlLCBrZXkpIHtcbiAgICBwcmV2U3RhdGVba2V5XSA9IGlzQ29udHJvbGxlZFByb3AocHJvcHMsIGtleSkgPyBwcm9wc1trZXldIDogc3RhdGVba2V5XTtcbiAgICByZXR1cm4gcHJldlN0YXRlO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgYSBwcm9wIGlzIGEgXCJjb250cm9sbGVkIHByb3BcIiBtZWFuaW5nIGl0IGlzXG4gKiBzdGF0ZSB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBvdXRzaWRlIG9mIHRoaXMgY29tcG9uZW50IHJhdGhlclxuICogdGhhbiB3aXRoaW4gdGhpcyBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBwcm9wcyB0aGF0IG1heSBjb250YWluIGNvbnRyb2xsZWQgdmFsdWVzLlxuICogQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUga2V5IHRvIGNoZWNrXG4gKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIGl0IGlzIGEgY29udHJvbGxlZCBjb250cm9sbGVkIHByb3BcbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sbGVkUHJvcChwcm9wcywga2V5KSB7XG4gIHJldHVybiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgJ2tleScgcHJvcGVydHkgb2YgYSBLZXlib2FyZEV2ZW50IGluIElFL0VkZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCBhIGtleWJvYXJkRXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IGtleWJvYXJkIGtleVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBcnJvd0tleShldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5LFxuICAgIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAoaWUpICovXG4gIGlmIChrZXlDb2RlID49IDM3ICYmIGtleUNvZGUgPD0gNDAgJiYga2V5LmluZGV4T2YoJ0Fycm93JykgIT09IDApIHtcbiAgICByZXR1cm4gXCJBcnJvd1wiICsga2V5O1xuICB9XG4gIHJldHVybiBrZXk7XG59XG5cbi8qKlxuICogU2ltcGxlIGNoZWNrIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb2JqZWN0IGxpdGVyYWxcbiAqIEBwYXJhbSB7Kn0gb2JqIGFueSB0aGluZ3NcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHdoZXRoZXIgaXQncyBvYmplY3QgbGl0ZXJhbFxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5leHQgbm9uLWRpc2FibGVkIGhpZ2hsaWdodGVkSW5kZXggdmFsdWUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBjdXJyZW50IGhpZ2hsaWdodGVkSW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCBoaWdobGlnaHRlZEluZGV4IHRvIHN0YXJ0IHNlYXJjaGluZy5cbiAqIEBwYXJhbSB7dW5rbm93bltdfSBpdGVtcyBUaGUgaXRlbXMgYXJyYXkuXG4gKiBAcGFyYW0geyhpdGVtOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFufSBpc0l0ZW1EaXNhYmxlZCBGdW5jdGlvbiB0aGF0IHRlbGxzIGlmIGFuIGl0ZW0gaXMgZGlzYWJsZWQgb3Igbm90LlxuICogQHBhcmFtIHtib29sZWFuP30gY2lyY3VsYXIgSWYgdGhlIHNlYXJjaCByZWFjaGVzIHRoZSBlbmQsIGlmIGl0IGNhbiBzZWFyY2ggYWdhaW4gc3RhcnRpbmcgZnJvbSB0aGUgb3RoZXIgZW5kLlxuICogQHJldHVybnMge251bWJlcn0gVGhlIG5leHQgaGlnaGxpZ2h0ZWRJbmRleC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGFydCwgb2Zmc2V0LCBpdGVtcywgaXNJdGVtRGlzYWJsZWQsIGNpcmN1bGFyKSB7XG4gIGlmIChjaXJjdWxhciA9PT0gdm9pZCAwKSB7XG4gICAgY2lyY3VsYXIgPSBmYWxzZTtcbiAgfVxuICB2YXIgY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaXRlbXNMYXN0SW5kZXggPSBjb3VudCAtIDE7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInIHx8IHN0YXJ0IDwgMCB8fCBzdGFydCA+IGl0ZW1zTGFzdEluZGV4KSB7XG4gICAgc3RhcnQgPSBvZmZzZXQgPiAwID8gLTEgOiBpdGVtc0xhc3RJbmRleCArIDE7XG4gIH1cbiAgdmFyIGN1cnJlbnQgPSBzdGFydCArIG9mZnNldDtcbiAgaWYgKGN1cnJlbnQgPCAwKSB7XG4gICAgY3VycmVudCA9IGNpcmN1bGFyID8gaXRlbXNMYXN0SW5kZXggOiAwO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPiBpdGVtc0xhc3RJbmRleCkge1xuICAgIGN1cnJlbnQgPSBjaXJjdWxhciA/IDAgOiBpdGVtc0xhc3RJbmRleDtcbiAgfVxuICB2YXIgaGlnaGxpZ2h0ZWRJbmRleCA9IGdldE5vbkRpc2FibGVkSW5kZXgoY3VycmVudCwgb2Zmc2V0IDwgMCwgaXRlbXMsIGlzSXRlbURpc2FibGVkLCBjaXJjdWxhcik7XG4gIGlmIChoaWdobGlnaHRlZEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGFydCA+PSBjb3VudCA/IC0xIDogc3RhcnQ7XG4gIH1cbiAgcmV0dXJuIGhpZ2hsaWdodGVkSW5kZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmV4dCBub24tZGlzYWJsZWQgaGlnaGxpZ2h0ZWRJbmRleCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIGN1cnJlbnQgaGlnaGxpZ2h0ZWRJbmRleC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFja3dhcmRzIElmIHRydWUsIGl0IHdpbGwgc2VhcmNoIGJhY2t3YXJkcyBmcm9tIHRoZSBzdGFydC5cbiAqIEBwYXJhbSB7dW5rbm93bltdfSBpdGVtcyBUaGUgaXRlbXMgYXJyYXkuXG4gKiBAcGFyYW0geyhpdGVtOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFufSBpc0l0ZW1EaXNhYmxlZCBGdW5jdGlvbiB0aGF0IHRlbGxzIGlmIGFuIGl0ZW0gaXMgZGlzYWJsZWQgb3Igbm90LlxuICogQHBhcmFtIHtib29sZWFufSBjaXJjdWxhciBJZiB0aGUgc2VhcmNoIHJlYWNoZXMgdGhlIGVuZCwgaWYgaXQgY2FuIHNlYXJjaCBhZ2FpbiBzdGFydGluZyBmcm9tIHRoZSBvdGhlciBlbmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV4dCBub24tZGlzYWJsZWQgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGdldE5vbkRpc2FibGVkSW5kZXgoc3RhcnQsIGJhY2t3YXJkcywgaXRlbXMsIGlzSXRlbURpc2FibGVkLCBjaXJjdWxhcikge1xuICBpZiAoY2lyY3VsYXIgPT09IHZvaWQgMCkge1xuICAgIGNpcmN1bGFyID0gZmFsc2U7XG4gIH1cbiAgdmFyIGNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAoYmFja3dhcmRzKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSBzdGFydDsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgICAgaWYgKCFpc0l0ZW1EaXNhYmxlZChpdGVtc1tpbmRleF0sIGluZGV4KSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0OyBfaW5kZXggPCBjb3VudDsgX2luZGV4KyspIHtcbiAgICAgIGlmICghaXNJdGVtRGlzYWJsZWQoaXRlbXNbX2luZGV4XSwgX2luZGV4KSkge1xuICAgICAgICByZXR1cm4gX2luZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2lyY3VsYXIpIHtcbiAgICByZXR1cm4gZ2V0Tm9uRGlzYWJsZWRJbmRleChiYWNrd2FyZHMgPyBjb3VudCAtIDEgOiAwLCBiYWNrd2FyZHMsIGl0ZW1zLCBpc0l0ZW1EaXNhYmxlZCk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBldmVudCB0YXJnZXQgaXMgd2l0aGluIHRoZSBkb3duc2hpZnQgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0IFRhcmdldCB0byBjaGVjay5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gZG93bnNoaWZ0RWxlbWVudHMgVGhlIGVsZW1lbnRzIHRoYXQgZm9ybSBkb3duc2hpZnQgKGxpc3QsIHRvZ2dsZSBidXR0b24gZXRjKS5cbiAqIEBwYXJhbSB7V2luZG93fSBlbnZpcm9ubWVudCBUaGUgd2luZG93IGNvbnRleHQgd2hlcmUgZG93bnNoaWZ0IHJlbmRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrQWN0aXZlRWxlbWVudCBXaGV0aGVyIHRvIGFsc28gY2hlY2sgYWN0aXZlRWxlbWVudC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHRhcmdldCBpcyB3aXRoaW4gZG93bnNoaWZ0IGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiB0YXJnZXRXaXRoaW5Eb3duc2hpZnQodGFyZ2V0LCBkb3duc2hpZnRFbGVtZW50cywgZW52aXJvbm1lbnQsIGNoZWNrQWN0aXZlRWxlbWVudCkge1xuICBpZiAoY2hlY2tBY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHtcbiAgICBjaGVja0FjdGl2ZUVsZW1lbnQgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkb3duc2hpZnRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChjb250ZXh0Tm9kZSkge1xuICAgIHJldHVybiBjb250ZXh0Tm9kZSAmJiAoaXNPckNvbnRhaW5zTm9kZShjb250ZXh0Tm9kZSwgdGFyZ2V0LCBlbnZpcm9ubWVudCkgfHwgY2hlY2tBY3RpdmVFbGVtZW50ICYmIGlzT3JDb250YWluc05vZGUoY29udGV4dE5vZGUsIGVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsIGVudmlyb25tZW50KSk7XG4gIH0pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlQ29udHJvbGxlZFVuY2hhbmdlZCA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkID0gZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkKHN0YXRlLCBwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICAgIHZhciB3YXJuaW5nRGVzY3JpcHRpb24gPSBcIlRoaXMgcHJvcCBzaG91bGQgbm90IHN3aXRjaCBmcm9tIGNvbnRyb2xsZWQgdG8gdW5jb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBEb3duc2hpZnQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXRodWIuY29tL2Rvd25zaGlmdC1qcy9kb3duc2hpZnQjY29udHJvbC1wcm9wc1wiO1xuICAgIE9iamVjdC5rZXlzKHN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wS2V5KSB7XG4gICAgICBpZiAocHJldlByb3BzW3Byb3BLZXldICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzW3Byb3BLZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImRvd25zaGlmdDogQSBjb21wb25lbnQgaGFzIGNoYW5nZWQgdGhlIGNvbnRyb2xsZWQgcHJvcCBcXFwiXCIgKyBwcm9wS2V5ICsgXCJcXFwiIHRvIGJlIHVuY29udHJvbGxlZC4gXCIgKyB3YXJuaW5nRGVzY3JpcHRpb24pO1xuICAgICAgfSBlbHNlIGlmIChwcmV2UHJvcHNbcHJvcEtleV0gPT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHNbcHJvcEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBBIGNvbXBvbmVudCBoYXMgY2hhbmdlZCB0aGUgdW5jb250cm9sbGVkIHByb3AgXFxcIlwiICsgcHJvcEtleSArIFwiXFxcIiB0byBiZSBjb250cm9sbGVkLiBcIiArIHdhcm5pbmdEZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59XG5cbnZhciBjbGVhbnVwU3RhdHVzID0gZGVib3VuY2UoZnVuY3Rpb24gKGRvY3VtZW50UHJvcCkge1xuICBnZXRTdGF0dXNEaXYoZG9jdW1lbnRQcm9wKS50ZXh0Q29udGVudCA9ICcnO1xufSwgNTAwKTtcblxuLyoqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RhdHVzIHRoZSBzdGF0dXMgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3R9IGRvY3VtZW50UHJvcCBkb2N1bWVudCBwYXNzZWQgYnkgdGhlIHVzZXIuXG4gKi9cbmZ1bmN0aW9uIHNldFN0YXR1cyhzdGF0dXMsIGRvY3VtZW50UHJvcCkge1xuICB2YXIgZGl2ID0gZ2V0U3RhdHVzRGl2KGRvY3VtZW50UHJvcCk7XG4gIGlmICghc3RhdHVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRpdi50ZXh0Q29udGVudCA9IHN0YXR1cztcbiAgY2xlYW51cFN0YXR1cyhkb2N1bWVudFByb3ApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RhdHVzIG5vZGUgb3IgY3JlYXRlIGl0IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gZG9jdW1lbnRQcm9wIGRvY3VtZW50IHBhc3NlZCBieSB0aGUgdXNlci5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSB0aGUgc3RhdHVzIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c0Rpdihkb2N1bWVudFByb3ApIHtcbiAgaWYgKGRvY3VtZW50UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgZG9jdW1lbnRQcm9wID0gZG9jdW1lbnQ7XG4gIH1cbiAgdmFyIHN0YXR1c0RpdiA9IGRvY3VtZW50UHJvcC5nZXRFbGVtZW50QnlJZCgnYTExeS1zdGF0dXMtbWVzc2FnZScpO1xuICBpZiAoc3RhdHVzRGl2KSB7XG4gICAgcmV0dXJuIHN0YXR1c0RpdjtcbiAgfVxuICBzdGF0dXNEaXYgPSBkb2N1bWVudFByb3AuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHN0YXR1c0Rpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2ExMXktc3RhdHVzLW1lc3NhZ2UnKTtcbiAgc3RhdHVzRGl2LnNldEF0dHJpYnV0ZSgncm9sZScsICdzdGF0dXMnKTtcbiAgc3RhdHVzRGl2LnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ3BvbGl0ZScpO1xuICBzdGF0dXNEaXYuc2V0QXR0cmlidXRlKCdhcmlhLXJlbGV2YW50JywgJ2FkZGl0aW9ucyB0ZXh0Jyk7XG4gIE9iamVjdC5hc3NpZ24oc3RhdHVzRGl2LnN0eWxlLCB7XG4gICAgYm9yZGVyOiAnMCcsXG4gICAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAgIGhlaWdodDogJzFweCcsXG4gICAgbWFyZ2luOiAnLTFweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB3aWR0aDogJzFweCdcbiAgfSk7XG4gIGRvY3VtZW50UHJvcC5ib2R5LmFwcGVuZENoaWxkKHN0YXR1c0Rpdik7XG4gIHJldHVybiBzdGF0dXNEaXY7XG59XG5cbnZhciB1bmtub3duID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX3Vua25vd25fXycgOiAwO1xudmFyIG1vdXNlVXAgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfbW91c2V1cF9fJyA6IDE7XG52YXIgaXRlbU1vdXNlRW50ZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfaXRlbV9tb3VzZWVudGVyX18nIDogMjtcbnZhciBrZXlEb3duQXJyb3dVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2Fycm93X3VwX18nIDogMztcbnZhciBrZXlEb3duQXJyb3dEb3duID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fYXJyb3dfZG93bl9fJyA6IDQ7XG52YXIga2V5RG93bkVzY2FwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2VzY2FwZV9fJyA6IDU7XG52YXIga2V5RG93bkVudGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fZW50ZXJfXycgOiA2O1xudmFyIGtleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25faG9tZV9fJyA6IDc7XG52YXIga2V5RG93bkVuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9rZXlkb3duX2VuZF9fJyA6IDg7XG52YXIgY2xpY2tJdGVtID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2NsaWNrX2l0ZW1fXycgOiA5O1xudmFyIGJsdXJJbnB1dCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9ibHVyX2lucHV0X18nIDogMTA7XG52YXIgY2hhbmdlSW5wdXQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfY2hhbmdlX2lucHV0X18nIDogMTE7XG52YXIga2V5RG93blNwYWNlQnV0dG9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fYXV0b2NvbXBsZXRlX2tleWRvd25fc3BhY2VfYnV0dG9uX18nIDogMTI7XG52YXIgY2xpY2tCdXR0b24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfY2xpY2tfYnV0dG9uX18nIDogMTM7XG52YXIgYmx1ckJ1dHRvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9ibHVyX2J1dHRvbl9fJyA6IDE0O1xudmFyIGNvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2F1dG9jb21wbGV0ZV9jb250cm9sbGVkX3Byb3BfdXBkYXRlZF9zZWxlY3RlZF9pdGVtX18nIDogMTU7XG52YXIgdG91Y2hFbmQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19hdXRvY29tcGxldGVfdG91Y2hlbmRfXycgOiAxNjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMkMyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICB1bmtub3duOiB1bmtub3duLFxuICBtb3VzZVVwOiBtb3VzZVVwLFxuICBpdGVtTW91c2VFbnRlcjogaXRlbU1vdXNlRW50ZXIsXG4gIGtleURvd25BcnJvd1VwOiBrZXlEb3duQXJyb3dVcCxcbiAga2V5RG93bkFycm93RG93bjoga2V5RG93bkFycm93RG93bixcbiAga2V5RG93bkVzY2FwZToga2V5RG93bkVzY2FwZSxcbiAga2V5RG93bkVudGVyOiBrZXlEb3duRW50ZXIsXG4gIGtleURvd25Ib21lOiBrZXlEb3duSG9tZSxcbiAga2V5RG93bkVuZDoga2V5RG93bkVuZCxcbiAgY2xpY2tJdGVtOiBjbGlja0l0ZW0sXG4gIGJsdXJJbnB1dDogYmx1cklucHV0LFxuICBjaGFuZ2VJbnB1dDogY2hhbmdlSW5wdXQsXG4gIGtleURvd25TcGFjZUJ1dHRvbjoga2V5RG93blNwYWNlQnV0dG9uLFxuICBjbGlja0J1dHRvbjogY2xpY2tCdXR0b24sXG4gIGJsdXJCdXR0b246IGJsdXJCdXR0b24sXG4gIGNvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbTogY29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtLFxuICB0b3VjaEVuZDogdG91Y2hFbmRcbn0pO1xuXG52YXIgX2V4Y2x1ZGVkJDQgPSBbXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMyA9IFtcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uQmx1clwiXSxcbiAgX2V4Y2x1ZGVkMyQyID0gW1wib25LZXlEb3duXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbklucHV0XCIsIFwib25DaGFuZ2VUZXh0XCJdLFxuICBfZXhjbHVkZWQ0JDEgPSBbXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDUgPSBbXCJvbk1vdXNlTW92ZVwiLCBcIm9uTW91c2VEb3duXCIsIFwib25DbGlja1wiLCBcIm9uUHJlc3NcIiwgXCJpbmRleFwiLCBcIml0ZW1cIl07XG52YXIgRG93bnNoaWZ0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIERvd25zaGlmdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKERvd25zaGlmdCwgX0NvbXBvbmVudCk7XG4gICAgZnVuY3Rpb24gRG93bnNoaWZ0KF9wcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuICAgICAgX3RoaXMgPSBfQ29tcG9uZW50LmNhbGwodGhpcywgX3Byb3BzKSB8fCB0aGlzO1xuICAgICAgLy8gZmFuY3kgZGVzdHJ1Y3R1cmluZyArIGRlZmF1bHRzICsgYWxpYXNlc1xuICAgICAgLy8gdGhpcyBiYXNpY2FsbHkgc2F5cyBlYWNoIHZhbHVlIG9mIHN0YXRlIHNob3VsZCBlaXRoZXIgYmUgc2V0IHRvXG4gICAgICAvLyB0aGUgaW5pdGlhbCB2YWx1ZSBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBub3QgcHJvdmlkZWRcbiAgICAgIF90aGlzLmlkID0gX3RoaXMucHJvcHMuaWQgfHwgXCJkb3duc2hpZnQtXCIgKyBnZW5lcmF0ZUlkKCk7XG4gICAgICBfdGhpcy5tZW51SWQgPSBfdGhpcy5wcm9wcy5tZW51SWQgfHwgX3RoaXMuaWQgKyBcIi1tZW51XCI7XG4gICAgICBfdGhpcy5sYWJlbElkID0gX3RoaXMucHJvcHMubGFiZWxJZCB8fCBfdGhpcy5pZCArIFwiLWxhYmVsXCI7XG4gICAgICBfdGhpcy5pbnB1dElkID0gX3RoaXMucHJvcHMuaW5wdXRJZCB8fCBfdGhpcy5pZCArIFwiLWlucHV0XCI7XG4gICAgICBfdGhpcy5nZXRJdGVtSWQgPSBfdGhpcy5wcm9wcy5nZXRJdGVtSWQgfHwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pZCArIFwiLWl0ZW0tXCIgKyBpbmRleDtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dCA9IG51bGw7XG4gICAgICBfdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgLy8gaXRlbUNvdW50IGNhbiBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBmcm9tIHdpdGhpbiBkb3duc2hpZnQgKHNvIGl0IGNhbid0IGNvbWUgZnJvbSBhIHByb3ApXG4gICAgICAvLyB0aGlzIGlzIHdoeSB3ZSBzdG9yZSBpdCBhcyBhbiBpbnN0YW5jZSBhbmQgdXNlXG4gICAgICAvLyBnZXRJdGVtQ291bnQgcmF0aGVyIHRoYW4ganVzdCB1c2UgaXRlbXMubGVuZ3RoXG4gICAgICAvLyAodG8gc3VwcG9ydCB3aW5kb3dpbmcgKyBhc3luYylcbiAgICAgIF90aGlzLml0ZW1Db3VudCA9IG51bGw7XG4gICAgICBfdGhpcy5wcmV2aW91c1Jlc3VsdENvdW50ID0gMDtcbiAgICAgIF90aGlzLnRpbWVvdXRJZHMgPSBbXTtcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdGhlIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIHRpbWVcbiAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lIHRoZSB0aW1lIHRvIHdhaXRcbiAgICAgICAqL1xuICAgICAgX3RoaXMuaW50ZXJuYWxTZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCB0aW1lKSB7XG4gICAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLnRpbWVvdXRJZHMgPSBfdGhpcy50aW1lb3V0SWRzLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgIT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZuKCk7XG4gICAgICAgIH0sIHRpbWUpO1xuICAgICAgICBfdGhpcy50aW1lb3V0SWRzLnB1c2goaWQpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldEl0ZW1Db3VudCA9IGZ1bmN0aW9uIChjb3VudCkge1xuICAgICAgICBfdGhpcy5pdGVtQ291bnQgPSBjb3VudDtcbiAgICAgIH07XG4gICAgICBfdGhpcy51bnNldEl0ZW1Db3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuaXRlbUNvdW50ID0gbnVsbDtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pc0l0ZW1EaXNhYmxlZCA9IGZ1bmN0aW9uIChfaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRFbGVtZW50Tm9kZSA9IF90aGlzLmdldEl0ZW1Ob2RlRnJvbUluZGV4KGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50Tm9kZSAmJiBjdXJyZW50RWxlbWVudE5vZGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNldEhpZ2hsaWdodGVkSW5kZXggPSBmdW5jdGlvbiAoaGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KSB7XG4gICAgICAgIGlmIChoaWdobGlnaHRlZEluZGV4ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyU3RhdGVUb1NldCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgb3RoZXJTdGF0ZVRvU2V0ID0ge307XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJTdGF0ZVRvU2V0ID0gcGlja1N0YXRlKG90aGVyU3RhdGVUb1NldCk7XG4gICAgICAgIF90aGlzLmludGVybmFsU2V0U3RhdGUoX2V4dGVuZHMoe1xuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXhcbiAgICAgICAgfSwgb3RoZXJTdGF0ZVRvU2V0KSk7XG4gICAgICB9O1xuICAgICAgX3RoaXMuY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IF90aGlzLnByb3BzLmRlZmF1bHRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGlzT3BlbjogX3RoaXMucHJvcHMuZGVmYXVsdElzT3BlblxuICAgICAgICB9LCBjYik7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2VsZWN0SXRlbSA9IGZ1bmN0aW9uIChpdGVtLCBvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIG90aGVyU3RhdGVUb1NldCA9IHBpY2tTdGF0ZShvdGhlclN0YXRlVG9TZXQpO1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKF9leHRlbmRzKHtcbiAgICAgICAgICBpc09wZW46IF90aGlzLnByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtOiBpdGVtLFxuICAgICAgICAgIGlucHV0VmFsdWU6IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhpdGVtKVxuICAgICAgICB9LCBvdGhlclN0YXRlVG9TZXQpLCBjYik7XG4gICAgICB9O1xuICAgICAgX3RoaXMuc2VsZWN0SXRlbUF0SW5kZXggPSBmdW5jdGlvbiAoaXRlbUluZGV4LCBvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIHZhciBpdGVtID0gX3RoaXMuaXRlbXNbaXRlbUluZGV4XTtcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zZWxlY3RJdGVtKGl0ZW0sIG90aGVyU3RhdGVUb1NldCwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnNlbGVjdEhpZ2hsaWdodGVkSXRlbSA9IGZ1bmN0aW9uIChvdGhlclN0YXRlVG9TZXQsIGNiKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5zZWxlY3RJdGVtQXRJbmRleChfdGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgsIG90aGVyU3RhdGVUb1NldCwgY2IpO1xuICAgICAgfTtcbiAgICAgIC8vIGFueSBwaWVjZSBvZiBvdXIgc3RhdGUgY2FuIGxpdmUgaW4gdHdvIHBsYWNlczpcbiAgICAgIC8vIDEuIFVuY29udHJvbGxlZDogaXQncyBpbnRlcm5hbCAodGhpcy5zdGF0ZSlcbiAgICAgIC8vICAgIFdlIHdpbGwgY2FsbCB0aGlzLnNldFN0YXRlIHRvIHVwZGF0ZSB0aGF0IHN0YXRlXG4gICAgICAvLyAyLiBDb250cm9sbGVkOiBpdCdzIGV4dGVybmFsICh0aGlzLnByb3BzKVxuICAgICAgLy8gICAgV2Ugd2lsbCBjYWxsIHRoaXMucHJvcHMub25TdGF0ZUNoYW5nZSB0byB1cGRhdGUgdGhhdCBzdGF0ZVxuICAgICAgLy9cbiAgICAgIC8vIEluIGFkZGl0aW9uLCB3ZSdsbCBjYWxsIHRoaXMucHJvcHMub25DaGFuZ2UgaWYgdGhlXG4gICAgICAvLyBzZWxlY3RlZEl0ZW0gaXMgY2hhbmdlZC5cbiAgICAgIF90aGlzLmludGVybmFsU2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGVUb1NldCwgY2IpIHtcbiAgICAgICAgdmFyIGlzSXRlbVNlbGVjdGVkLCBvbkNoYW5nZUFyZztcbiAgICAgICAgdmFyIG9uU3RhdGVDaGFuZ2VBcmcgPSB7fTtcbiAgICAgICAgdmFyIGlzU3RhdGVUb1NldEZ1bmN0aW9uID0gdHlwZW9mIHN0YXRlVG9TZXQgPT09ICdmdW5jdGlvbic7XG5cbiAgICAgICAgLy8gd2Ugd2FudCB0byBjYWxsIGBvbklucHV0VmFsdWVDaGFuZ2VgIGJlZm9yZSB0aGUgYHNldFN0YXRlYCBjYWxsXG4gICAgICAgIC8vIHNvIHNvbWVvbmUgY29udHJvbGxpbmcgdGhlIGBpbnB1dFZhbHVlYCBzdGF0ZSBnZXRzIG5vdGlmaWVkIG9mXG4gICAgICAgIC8vIHRoZSBpbnB1dCBjaGFuZ2UgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGhcbiAgICAgICAgLy8gcHJlc2VydmluZyB0aGUgY3Vyc29yIHBvc2l0aW9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Rvd25zaGlmdC1qcy9kb3duc2hpZnQvaXNzdWVzLzIxNyBmb3IgbW9yZSBpbmZvLlxuICAgICAgICBpZiAoIWlzU3RhdGVUb1NldEZ1bmN0aW9uICYmIHN0YXRlVG9TZXQuaGFzT3duUHJvcGVydHkoJ2lucHV0VmFsdWUnKSkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uSW5wdXRWYWx1ZUNoYW5nZShzdGF0ZVRvU2V0LmlucHV0VmFsdWUsIF9leHRlbmRzKHt9LCBfdGhpcy5nZXRTdGF0ZUFuZEhlbHBlcnMoKSwgc3RhdGVUb1NldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICBzdGF0ZSA9IF90aGlzLmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgICB2YXIgbmV3U3RhdGVUb1NldCA9IGlzU3RhdGVUb1NldEZ1bmN0aW9uID8gc3RhdGVUb1NldChzdGF0ZSkgOiBzdGF0ZVRvU2V0O1xuXG4gICAgICAgICAgLy8gWW91ciBvd24gZnVuY3Rpb24gdGhhdCBjb3VsZCBtb2RpZnkgdGhlIHN0YXRlIHRoYXQgd2lsbCBiZSBzZXQuXG4gICAgICAgICAgbmV3U3RhdGVUb1NldCA9IF90aGlzLnByb3BzLnN0YXRlUmVkdWNlcihzdGF0ZSwgbmV3U3RhdGVUb1NldCk7XG5cbiAgICAgICAgICAvLyBjaGVja3MgaWYgYW4gaXRlbSBpcyBzZWxlY3RlZCwgcmVnYXJkbGVzcyBvZiBpZiBpdCdzIGRpZmZlcmVudCBmcm9tXG4gICAgICAgICAgLy8gd2hhdCB3YXMgc2VsZWN0ZWQgYmVmb3JlXG4gICAgICAgICAgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgb25TZWxlY3QgYW5kIG9uQ2hhbmdlIGNhbGxiYWNrcyBzaG91bGQgYmUgY2FsbGVkXG4gICAgICAgICAgaXNJdGVtU2VsZWN0ZWQgPSBuZXdTdGF0ZVRvU2V0Lmhhc093blByb3BlcnR5KCdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAvLyB0aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvYmplY3Qgd2Ugd2FudCB0byBjYWxsIHdpdGggc2V0U3RhdGVcbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0ge307XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBjYWxsIG9uIGNoYW5nZSBpZiB0aGUgb3V0c2lkZSB3b3JsZCBpcyBjb250cm9sbGluZyBhbnkgb2Ygb3VyIHN0YXRlXG4gICAgICAgICAgLy8gYW5kIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgdGhhdCBzdGF0ZS4gT1IgaWYgdGhlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCBhbmQgd2UncmVcbiAgICAgICAgICAvLyB0cnlpbmcgdG8gdXBkYXRlIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICBpZiAoaXNJdGVtU2VsZWN0ZWQgJiYgbmV3U3RhdGVUb1NldC5zZWxlY3RlZEl0ZW0gIT09IHN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgb25DaGFuZ2VBcmcgPSBuZXdTdGF0ZVRvU2V0LnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3U3RhdGVUb1NldC50eXBlID0gbmV3U3RhdGVUb1NldC50eXBlIHx8IHVua25vd247XG4gICAgICAgICAgT2JqZWN0LmtleXMobmV3U3RhdGVUb1NldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAvLyBvblN0YXRlQ2hhbmdlQXJnIHNob3VsZCBvbmx5IGhhdmUgdGhlIHN0YXRlIHRoYXQgaXNcbiAgICAgICAgICAgIC8vIGFjdHVhbGx5IGNoYW5naW5nXG4gICAgICAgICAgICBpZiAoc3RhdGVba2V5XSAhPT0gbmV3U3RhdGVUb1NldFtrZXldKSB7XG4gICAgICAgICAgICAgIG9uU3RhdGVDaGFuZ2VBcmdba2V5XSA9IG5ld1N0YXRlVG9TZXRba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoZSB0eXBlIGlzIHVzZWZ1bCBmb3IgdGhlIG9uU3RhdGVDaGFuZ2VBcmdcbiAgICAgICAgICAgIC8vIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHNldCBpdCBpbiBpbnRlcm5hbCBzdGF0ZS5cbiAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUgZm9yIG5vdy4uLiBOb3QgYWxsIGludGVybmFsU2V0U3RhdGVcbiAgICAgICAgICAgIC8vIGNhbGxzIHN1cHBvcnQgaXQgYW5kIEknbSBub3QgY2VydGFpbiB3ZSB3YW50IHRoZW0gdG8geWV0LlxuICAgICAgICAgICAgLy8gQnV0IGl0IGVuYWJsZXMgdXNlcnMgY29udHJvbGxpbmcgdGhlIGlzT3BlbiBzdGF0ZSB0byBrbm93IHdoZW5cbiAgICAgICAgICAgIC8vIHRoZSBpc09wZW4gc3RhdGUgY2hhbmdlcyBkdWUgdG8gbW91c2V1cCBldmVudHMgd2hpY2ggaXMgcXVpdGUgaGFuZHkuXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAndHlwZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3U3RhdGVUb1NldFtrZXldO1xuICAgICAgICAgICAgLy8gaWYgaXQncyBjb21pbmcgZnJvbSBwcm9wcywgdGhlbiB3ZSBkb24ndCBjYXJlIHRvIHNldCBpdCBpbnRlcm5hbGx5XG4gICAgICAgICAgICBpZiAoIWlzQ29udHJvbGxlZFByb3AoX3RoaXMucHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgbmV4dFN0YXRlW2tleV0gPSBuZXdTdGF0ZVRvU2V0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBpZiBzdGF0ZVRvU2V0IGlzIGEgZnVuY3Rpb24sIHRoZW4gd2Ugd2VyZW4ndCBhYmxlIHRvIGNhbGwgb25JbnB1dFZhbHVlQ2hhbmdlXG4gICAgICAgICAgLy8gZWFybGllciwgc28gd2UnbGwgY2FsbCBpdCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGlucHV0VmFsdWUgc3RhdGUgd2lsbCBiZS5cbiAgICAgICAgICBpZiAoaXNTdGF0ZVRvU2V0RnVuY3Rpb24gJiYgbmV3U3RhdGVUb1NldC5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRWYWx1ZScpKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbklucHV0VmFsdWVDaGFuZ2UobmV3U3RhdGVUb1NldC5pbnB1dFZhbHVlLCBfZXh0ZW5kcyh7fSwgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCksIG5ld1N0YXRlVG9TZXQpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGNhbGwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGlmIGl0J3MgYSBmdW5jdGlvblxuICAgICAgICAgIGNiVG9DYihjYikoKTtcblxuICAgICAgICAgIC8vIG9ubHkgY2FsbCB0aGUgb25TdGF0ZUNoYW5nZSBhbmQgb25DaGFuZ2UgY2FsbGJhY2tzIGlmXG4gICAgICAgICAgLy8gd2UgaGF2ZSByZWxldmFudCBpbmZvcm1hdGlvbiB0byBwYXNzIHRoZW0uXG4gICAgICAgICAgdmFyIGhhc01vcmVTdGF0ZVRoYW5UeXBlID0gT2JqZWN0LmtleXMob25TdGF0ZUNoYW5nZUFyZykubGVuZ3RoID4gMTtcbiAgICAgICAgICBpZiAoaGFzTW9yZVN0YXRlVGhhblR5cGUpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uU3RhdGVDaGFuZ2Uob25TdGF0ZUNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNJdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uU2VsZWN0KHN0YXRlVG9TZXQuc2VsZWN0ZWRJdGVtLCBfdGhpcy5nZXRTdGF0ZUFuZEhlbHBlcnMoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvbkNoYW5nZUFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5vbkNoYW5nZShvbkNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYW5kIHRoZXJlZm9yZSBzdWJqZWN0IHRvIGNoYW5nZVxuICAgICAgICAgIC8vIFdlJ2xsIHRyeSB0byBub3QgYnJlYWsgaXQsIGJ1dCBqdXN0IGJlIHdhcm5lZC5cbiAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZXJBY3Rpb24ob25TdGF0ZUNoYW5nZUFyZywgX3RoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFJPT1RcbiAgICAgIF90aGlzLnJvb3RSZWYgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuX3Jvb3ROb2RlID0gbm9kZTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5nZXRSb290UHJvcHMgPSBmdW5jdGlvbiAoX3RlbXAsIF90ZW1wMikge1xuICAgICAgICB2YXIgX2V4dGVuZHMyO1xuICAgICAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLFxuICAgICAgICAgIF9yZWYkcmVmS2V5ID0gX3JlZi5yZWZLZXksXG4gICAgICAgICAgcmVmS2V5ID0gX3JlZiRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZiRyZWZLZXksXG4gICAgICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCQ0KTtcbiAgICAgICAgdmFyIF9yZWYyID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMixcbiAgICAgICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgICAgIHN1cHByZXNzUmVmRXJyb3IgPSBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkc3VwcHJlc3NSZWZFcnJvO1xuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgaW4gdGhlIHJlbmRlciB0byBrbm93IHdoZXRoZXIgdGhlIHVzZXIgaGFzIGNhbGxlZCBnZXRSb290UHJvcHMuXG4gICAgICAgIC8vIEl0IHVzZXMgdGhhdCB0byBrbm93IHdoZXRoZXIgdG8gYXBwbHkgdGhlIHByb3BzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgX3RoaXMuZ2V0Um9vdFByb3BzLmNhbGxlZCA9IHRydWU7XG4gICAgICAgIF90aGlzLmdldFJvb3RQcm9wcy5yZWZLZXkgPSByZWZLZXk7XG4gICAgICAgIF90aGlzLmdldFJvb3RQcm9wcy5zdXBwcmVzc1JlZkVycm9yID0gc3VwcHJlc3NSZWZFcnJvcjtcbiAgICAgICAgdmFyIF90aGlzJGdldFN0YXRlID0gX3RoaXMuZ2V0U3RhdGUoKSxcbiAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZS5pc09wZW47XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIF90aGlzLnJvb3RSZWYpLCBfZXh0ZW5kczIucm9sZSA9ICdjb21ib2JveCcsIF9leHRlbmRzMlsnYXJpYS1leHBhbmRlZCddID0gaXNPcGVuLCBfZXh0ZW5kczJbJ2FyaWEtaGFzcG9wdXAnXSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLW93bnMnXSA9IGlzT3BlbiA/IF90aGlzLm1lbnVJZCA6IHVuZGVmaW5lZCwgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IF90aGlzLmxhYmVsSWQsIF9leHRlbmRzMiksIHJlc3QpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBST09UXG4gICAgICBfdGhpcy5rZXlEb3duSGFuZGxlcnMgPSB7XG4gICAgICAgIEFycm93RG93bjogZnVuY3Rpb24gQXJyb3dEb3duKGV2ZW50KSB7XG4gICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAodGhpcy5nZXRTdGF0ZSgpLmlzT3Blbikge1xuICAgICAgICAgICAgdmFyIGFtb3VudCA9IGV2ZW50LnNoaWZ0S2V5ID8gNSA6IDE7XG4gICAgICAgICAgICB0aGlzLm1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwge1xuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBpdGVtQ291bnQgPSBfdGhpczIuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90aGlzMiRnZXRTdGF0ZSA9IF90aGlzMi5nZXRTdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzMiRnZXRTdGF0ZS5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgICAgICAgIHZhciBuZXh0SGlnaGxpZ2h0ZWRJbmRleCA9IGdldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgMSwge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgICAgICAgICB9LCBfdGhpczIuaXNJdGVtRGlzYWJsZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIF90aGlzMi5zZXRIaWdobGlnaHRlZEluZGV4KG5leHRIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgQXJyb3dVcDogZnVuY3Rpb24gQXJyb3dVcChldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0U3RhdGUoKS5pc09wZW4pIHtcbiAgICAgICAgICAgIHZhciBhbW91bnQgPSBldmVudC5zaGlmdEtleSA/IC01IDogLTE7XG4gICAgICAgICAgICB0aGlzLm1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwge1xuICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dVcFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgdHlwZToga2V5RG93bkFycm93VXBcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IF90aGlzMy5nZXRJdGVtQ291bnQoKTtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMzJGdldFN0YXRlID0gX3RoaXMzLmdldFN0YXRlKCksXG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMzJGdldFN0YXRlLmhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRIaWdobGlnaHRlZEluZGV4ID0gZ2V0SGlnaGxpZ2h0ZWRJbmRleChoaWdobGlnaHRlZEluZGV4LCAtMSwge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgICAgICAgICB9LCBfdGhpczMuaXNJdGVtRGlzYWJsZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIF90aGlzMy5zZXRIaWdobGlnaHRlZEluZGV4KG5leHRIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBrZXlEb3duQXJyb3dVcFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEVudGVyOiBmdW5jdGlvbiBFbnRlcihldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC53aGljaCA9PT0gMjI5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTIgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTIuaXNPcGVuLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzJGdldFN0YXRlMi5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgIGlmIChpc09wZW4gJiYgaGlnaGxpZ2h0ZWRJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2hpZ2hsaWdodGVkSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGl0ZW1Ob2RlID0gdGhpcy5nZXRJdGVtTm9kZUZyb21JbmRleChoaWdobGlnaHRlZEluZGV4KTtcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbU5vZGUgJiYgaXRlbU5vZGUuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKHtcbiAgICAgICAgICAgICAgdHlwZToga2V5RG93bkVudGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIEVzY2FwZTogZnVuY3Rpb24gRXNjYXBlKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnJlc2V0KF9leHRlbmRzKHtcbiAgICAgICAgICAgIHR5cGU6IGtleURvd25Fc2NhcGVcbiAgICAgICAgICB9LCAhdGhpcy5zdGF0ZS5pc09wZW4gJiYge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEJVVFRPTlxuICAgICAgX3RoaXMuYnV0dG9uS2V5RG93bkhhbmRsZXJzID0gX2V4dGVuZHMoe30sIF90aGlzLmtleURvd25IYW5kbGVycywge1xuICAgICAgICAnICc6IGZ1bmN0aW9uIF8oZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlTWVudSh7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duU3BhY2VCdXR0b25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBfdGhpcy5pbnB1dEtleURvd25IYW5kbGVycyA9IF9leHRlbmRzKHt9LCBfdGhpcy5rZXlEb3duSGFuZGxlcnMsIHtcbiAgICAgICAgSG9tZTogZnVuY3Rpb24gSG9tZShldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTMgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTMuaXNPcGVuO1xuICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgaWYgKGl0ZW1Db3VudCA8PSAwIHx8ICFpc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBnZXQgbmV4dCBub24tZGlzYWJsZWQgc3RhcnRpbmcgZG93bndhcmRzIGZyb20gMCBpZiB0aGF0J3MgZGlzYWJsZWQuXG4gICAgICAgICAgdmFyIG5ld0hpZ2hsaWdodGVkSW5kZXggPSBnZXROb25EaXNhYmxlZEluZGV4KDAsIGZhbHNlLCB7XG4gICAgICAgICAgICBsZW5ndGg6IGl0ZW1Db3VudFxuICAgICAgICAgIH0sIHRoaXMuaXNJdGVtRGlzYWJsZWQpO1xuICAgICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXdIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duSG9tZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBFbmQ6IGZ1bmN0aW9uIEVuZChldmVudCkge1xuICAgICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTQgPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTQuaXNPcGVuO1xuICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMuZ2V0SXRlbUNvdW50KCk7XG4gICAgICAgICAgaWYgKGl0ZW1Db3VudCA8PSAwIHx8ICFpc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBnZXQgbmV4dCBub24tZGlzYWJsZWQgc3RhcnRpbmcgdXB3YXJkcyBmcm9tIGxhc3QgaW5kZXggaWYgdGhhdCdzIGRpc2FibGVkLlxuICAgICAgICAgIHZhciBuZXdIaWdobGlnaHRlZEluZGV4ID0gZ2V0Tm9uRGlzYWJsZWRJbmRleChpdGVtQ291bnQgLSAxLCB0cnVlLCB7XG4gICAgICAgICAgICBsZW5ndGg6IGl0ZW1Db3VudFxuICAgICAgICAgIH0sIHRoaXMuaXNJdGVtRGlzYWJsZWQpO1xuICAgICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXdIaWdobGlnaHRlZEluZGV4LCB7XG4gICAgICAgICAgICB0eXBlOiBrZXlEb3duRW5kXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgX3RoaXMuZ2V0VG9nZ2xlQnV0dG9uUHJvcHMgPSBmdW5jdGlvbiAoX3RlbXAzKSB7XG4gICAgICAgIHZhciBfcmVmMyA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2s7XG4gICAgICAgICAgX3JlZjMub25QcmVzcztcbiAgICAgICAgICB2YXIgb25LZXlEb3duID0gX3JlZjMub25LZXlEb3duLFxuICAgICAgICAgIG9uS2V5VXAgPSBfcmVmMy5vbktleVVwLFxuICAgICAgICAgIG9uQmx1ciA9IF9yZWYzLm9uQmx1cixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZDIkMyk7XG4gICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTUgPSBfdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIGlzT3BlbiA9IF90aGlzJGdldFN0YXRlNS5pc09wZW47XG4gICAgICAgIHZhciBlbmFibGVkRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICBvbkNsaWNrOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBfdGhpcy5idXR0b25IYW5kbGVDbGljayksXG4gICAgICAgICAgb25LZXlEb3duOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbktleURvd24sIF90aGlzLmJ1dHRvbkhhbmRsZUtleURvd24pLFxuICAgICAgICAgIG9uS2V5VXA6IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uS2V5VXAsIF90aGlzLmJ1dHRvbkhhbmRsZUtleVVwKSxcbiAgICAgICAgICBvbkJsdXI6IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uQmx1ciwgX3RoaXMuYnV0dG9uSGFuZGxlQmx1cilcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGV2ZW50SGFuZGxlcnMgPSByZXN0LmRpc2FibGVkID8ge30gOiBlbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICByb2xlOiAnYnV0dG9uJyxcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IGlzT3BlbiA/ICdjbG9zZSBtZW51JyA6ICdvcGVuIG1lbnUnLFxuICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogdHJ1ZSxcbiAgICAgICAgICAnZGF0YS10b2dnbGUnOiB0cnVlXG4gICAgICAgIH0sIGV2ZW50SGFuZGxlcnMsIHJlc3QpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmJ1dHRvbkhhbmRsZUtleVVwID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIC8vIFByZXZlbnQgY2xpY2sgZXZlbnQgZnJvbSBlbWl0dGluZyBpbiBGaXJlZm94XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9O1xuICAgICAgX3RoaXMuYnV0dG9uSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIga2V5ID0gbm9ybWFsaXplQXJyb3dLZXkoZXZlbnQpO1xuICAgICAgICBpZiAoX3RoaXMuYnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0pIHtcbiAgICAgICAgICBfdGhpcy5idXR0b25LZXlEb3duSGFuZGxlcnNba2V5XS5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5idXR0b25IYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBoYW5kbGUgb2RkIGNhc2UgZm9yIFNhZmFyaSBhbmQgRmlyZWZveCB3aGljaFxuICAgICAgICAvLyBkb24ndCBnaXZlIHRoZSBidXR0b24gdGhlIGZvY3VzIHByb3Blcmx5LlxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKGNhbid0IHJlYXNvbmFibHkgdGVzdCB0aGlzKSAqL1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvIHNpbXBsaWZ5IHRlc3RpbmcgY29tcG9uZW50cyB0aGF0IHVzZSBkb3duc2hpZnQsIHdlJ2xsIG5vdCB3cmFwIHRoaXMgaW4gYSBzZXRUaW1lb3V0XG4gICAgICAgIC8vIGlmIHRoZSBOT0RFX0VOViBpcyB0ZXN0LiBXaXRoIHRoZSBwcm9wZXIgYnVpbGQgc3lzdGVtLCB0aGlzIHNob3VsZCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZFxuICAgICAgICAvLyB3aGVuIGJ1aWxkaW5nIGZvciBwcm9kdWN0aW9uIGFuZCBzaG91bGQgdGhlcmVmb3JlIGhhdmUgbm8gaW1wYWN0IG9uIHByb2R1Y3Rpb24gY29kZS5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgICAgICAgICBfdGhpcy50b2dnbGVNZW51KHtcbiAgICAgICAgICAgIHR5cGU6IGNsaWNrQnV0dG9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdG9nZ2xlIG9mIG1lbnUgb2NjdXJzIGFmdGVyIHRoZSBwb3RlbnRpYWwgYmx1ciBldmVudCBpbiBpT1NcbiAgICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvZ2dsZU1lbnUoe1xuICAgICAgICAgICAgICB0eXBlOiBjbGlja0J1dHRvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5idXR0b25IYW5kbGVCbHVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBibHVyVGFyZ2V0ID0gZXZlbnQudGFyZ2V0OyAvLyBTYXZlIGJsdXIgdGFyZ2V0IGZvciBjb21wYXJpc29uIHdpdGggYWN0aXZlRWxlbWVudCBsYXRlclxuICAgICAgICAvLyBOZWVkIHNldFRpbWVvdXQsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIFRhYiwgdGhlIGFjdGl2ZUVsZW1lbnQgaXMgdGhlIG5leHQgZm9jdXNlZCBlbGVtZW50LCBub3QgYm9keSBlbGVtZW50XG4gICAgICAgIF90aGlzLmludGVybmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5pc01vdXNlRG93biAmJiAoX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8IF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgIT09IF90aGlzLmlucHV0SWQpICYmIF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGJsdXJUYXJnZXQgLy8gRG8gbm90aGluZyBpZiB3ZSByZWZvY3VzIHRoZSBzYW1lIGVsZW1lbnQgYWdhaW4gKHRvIHNvbHZlIGlzc3VlIGluIFNhZmFyaSBvbiBpT1MpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBfdGhpcy5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IGJsdXJCdXR0b25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgLy9cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIEJVVFRPTlxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBMQUJFTFxuICAgICAgX3RoaXMuZ2V0TGFiZWxQcm9wcyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICAgIGh0bWxGb3I6IF90aGlzLmlucHV0SWQsXG4gICAgICAgICAgaWQ6IF90aGlzLmxhYmVsSWRcbiAgICAgICAgfSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBMQUJFTFxuICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBJTlBVVFxuICAgICAgX3RoaXMuZ2V0SW5wdXRQcm9wcyA9IGZ1bmN0aW9uIChfdGVtcDQpIHtcbiAgICAgICAgdmFyIF9yZWY0ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgICAgICBvbktleURvd24gPSBfcmVmNC5vbktleURvd24sXG4gICAgICAgICAgb25CbHVyID0gX3JlZjQub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3JlZjQub25DaGFuZ2UsXG4gICAgICAgICAgb25JbnB1dCA9IF9yZWY0Lm9uSW5wdXQ7XG4gICAgICAgICAgX3JlZjQub25DaGFuZ2VUZXh0O1xuICAgICAgICAgIHZhciByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZDMkMik7XG4gICAgICAgIHZhciBvbkNoYW5nZUtleTtcbiAgICAgICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB7fTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL1xuICAgICAgICB7XG4gICAgICAgICAgb25DaGFuZ2VLZXkgPSAnb25DaGFuZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTYgPSBfdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRnZXRTdGF0ZTYuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTYuaXNPcGVuLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRnZXRTdGF0ZTYuaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgICAgaWYgKCFyZXN0LmRpc2FibGVkKSB7XG4gICAgICAgICAgdmFyIF9ldmVudEhhbmRsZXJzO1xuICAgICAgICAgIGV2ZW50SGFuZGxlcnMgPSAoX2V2ZW50SGFuZGxlcnMgPSB7fSwgX2V2ZW50SGFuZGxlcnNbb25DaGFuZ2VLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DaGFuZ2UsIG9uSW5wdXQsIF90aGlzLmlucHV0SGFuZGxlQ2hhbmdlKSwgX2V2ZW50SGFuZGxlcnMub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBfdGhpcy5pbnB1dEhhbmRsZUtleURvd24pLCBfZXZlbnRIYW5kbGVycy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIF90aGlzLmlucHV0SGFuZGxlQmx1ciksIF9ldmVudEhhbmRsZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAgICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogaXNPcGVuICYmIHR5cGVvZiBoaWdobGlnaHRlZEluZGV4ID09PSAnbnVtYmVyJyAmJiBoaWdobGlnaHRlZEluZGV4ID49IDAgPyBfdGhpcy5nZXRJdGVtSWQoaGlnaGxpZ2h0ZWRJbmRleCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBpc09wZW4gPyBfdGhpcy5tZW51SWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogX3RoaXMubGFiZWxJZCxcbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmluZ195b3VyX3NpdGUvVHVybmluZ19vZmZfZm9ybV9hdXRvY29tcGxldGlvblxuICAgICAgICAgIC8vIHJldmVydCBiYWNrIHNpbmNlIGF1dG9jb21wbGV0ZT1cIm5vcGVcIiBpcyBpZ25vcmVkIG9uIGxhdGVzdCBDaHJvbWUgYW5kIE9wZXJhXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBpZDogX3RoaXMuaW5wdXRJZFxuICAgICAgICB9LCBldmVudEhhbmRsZXJzLCByZXN0KTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dEhhbmRsZUtleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgICAgaWYgKGtleSAmJiBfdGhpcy5pbnB1dEtleURvd25IYW5kbGVyc1trZXldKSB7XG4gICAgICAgICAgX3RoaXMuaW5wdXRLZXlEb3duSGFuZGxlcnNba2V5XS5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBfdGhpcy5pbnB1dEhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBjaGFuZ2VJbnB1dCxcbiAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgaW5wdXRWYWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IF90aGlzLnByb3BzLmRlZmF1bHRIaWdobGlnaHRlZEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmlucHV0SGFuZGxlQmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTmVlZCBzZXRUaW1lb3V0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBUYWIsIHRoZSBhY3RpdmVFbGVtZW50IGlzIHRoZSBuZXh0IGZvY3VzZWQgZWxlbWVudCwgbm90IHRoZSBib2R5IGVsZW1lbnRcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZG93bnNoaWZ0QnV0dG9uSXNBY3RpdmUgPSBfdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudCAmJiAhIV90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgISFfdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmRhdGFzZXQgJiYgX3RoaXMucHJvcHMuZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5kYXRhc2V0LnRvZ2dsZSAmJiBfdGhpcy5fcm9vdE5vZGUgJiYgX3RoaXMuX3Jvb3ROb2RlLmNvbnRhaW5zKF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIGlmICghX3RoaXMuaXNNb3VzZURvd24gJiYgIWRvd25zaGlmdEJ1dHRvbklzQWN0aXZlKSB7XG4gICAgICAgICAgICBfdGhpcy5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IGJsdXJJbnB1dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICAvL1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwgSU5QVVRcbiAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTUVOVVxuICAgICAgX3RoaXMubWVudVJlZiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIF90aGlzLl9tZW51Tm9kZSA9IG5vZGU7XG4gICAgICB9O1xuICAgICAgX3RoaXMuZ2V0TWVudVByb3BzID0gZnVuY3Rpb24gKF90ZW1wNSwgX3RlbXA2KSB7XG4gICAgICAgIHZhciBfZXh0ZW5kczM7XG4gICAgICAgIHZhciBfcmVmNSA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsXG4gICAgICAgICAgX3JlZjUkcmVmS2V5ID0gX3JlZjUucmVmS2V5LFxuICAgICAgICAgIHJlZktleSA9IF9yZWY1JHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmNSRyZWZLZXksXG4gICAgICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjUsIF9leGNsdWRlZDQkMSk7XG4gICAgICAgIHZhciBfcmVmNiA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsXG4gICAgICAgICAgX3JlZjYkc3VwcHJlc3NSZWZFcnJvID0gX3JlZjYuc3VwcHJlc3NSZWZFcnJvcixcbiAgICAgICAgICBzdXBwcmVzc1JlZkVycm9yID0gX3JlZjYkc3VwcHJlc3NSZWZFcnJvID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JHN1cHByZXNzUmVmRXJybztcbiAgICAgICAgX3RoaXMuZ2V0TWVudVByb3BzLmNhbGxlZCA9IHRydWU7XG4gICAgICAgIF90aGlzLmdldE1lbnVQcm9wcy5yZWZLZXkgPSByZWZLZXk7XG4gICAgICAgIF90aGlzLmdldE1lbnVQcm9wcy5zdXBwcmVzc1JlZkVycm9yID0gc3VwcHJlc3NSZWZFcnJvcjtcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKChfZXh0ZW5kczMgPSB7fSwgX2V4dGVuZHMzW3JlZktleV0gPSBoYW5kbGVSZWZzKHJlZiwgX3RoaXMubWVudVJlZiksIF9leHRlbmRzMy5yb2xlID0gJ2xpc3Rib3gnLCBfZXh0ZW5kczNbJ2FyaWEtbGFiZWxsZWRieSddID0gcHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSA/IHVuZGVmaW5lZCA6IF90aGlzLmxhYmVsSWQsIF9leHRlbmRzMy5pZCA9IF90aGlzLm1lbnVJZCwgX2V4dGVuZHMzKSwgcHJvcHMpO1xuICAgICAgfTtcbiAgICAgIC8vXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCBNRU5VXG4gICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIElURU1cbiAgICAgIF90aGlzLmdldEl0ZW1Qcm9wcyA9IGZ1bmN0aW9uIChfdGVtcDcpIHtcbiAgICAgICAgdmFyIF9lbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgdmFyIF9yZWY3ID0gX3RlbXA3ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNyxcbiAgICAgICAgICBvbk1vdXNlTW92ZSA9IF9yZWY3Lm9uTW91c2VNb3ZlLFxuICAgICAgICAgIG9uTW91c2VEb3duID0gX3JlZjcub25Nb3VzZURvd24sXG4gICAgICAgICAgb25DbGljayA9IF9yZWY3Lm9uQ2xpY2s7XG4gICAgICAgICAgX3JlZjcub25QcmVzcztcbiAgICAgICAgICB2YXIgaW5kZXggPSBfcmVmNy5pbmRleCxcbiAgICAgICAgICBfcmVmNyRpdGVtID0gX3JlZjcuaXRlbSxcbiAgICAgICAgICBpdGVtID0gX3JlZjckaXRlbSA9PT0gdm9pZCAwID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovdW5kZWZpbmVkIDogcmVxdWlyZWRQcm9wKCdnZXRJdGVtUHJvcHMnLCAnaXRlbScpIDogX3JlZjckaXRlbSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjcsIF9leGNsdWRlZDUpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIF90aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgaW5kZXggPSBfdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLml0ZW1zW2luZGV4XSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9uU2VsZWN0S2V5ID0gJ29uQ2xpY2snO1xuICAgICAgICB2YXIgY3VzdG9tQ2xpY2tIYW5kbGVyID0gb25DbGljaztcbiAgICAgICAgdmFyIGVuYWJsZWRFdmVudEhhbmRsZXJzID0gKF9lbmFibGVkRXZlbnRIYW5kbGVycyA9IHtcbiAgICAgICAgICAvLyBvbk1vdXNlTW92ZSBpcyB1c2VkIG92ZXIgb25Nb3VzZUVudGVyIGhlcmUuIG9uTW91c2VNb3ZlXG4gICAgICAgICAgLy8gaXMgb25seSB0cmlnZ2VyZWQgb24gYWN0dWFsIG1vdXNlIG1vdmVtZW50IHdoaWxlIG9uTW91c2VFbnRlclxuICAgICAgICAgIC8vIGNhbiBmaXJlIG9uIERPTSBjaGFuZ2VzLCBpbnRlcnJ1cHRpbmcga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICAgIG9uTW91c2VNb3ZlOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBfdGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChpbmRleCwge1xuICAgICAgICAgICAgICB0eXBlOiBpdGVtTW91c2VFbnRlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFdlIG5ldmVyIHdhbnQgdG8gbWFudWFsbHkgc2Nyb2xsIHdoZW4gY2hhbmdpbmcgc3RhdGUgYmFzZWRcbiAgICAgICAgICAgIC8vIG9uIGBvbk1vdXNlTW92ZWAgYmVjYXVzZSB3ZSB3aWxsIGJlIG1vdmluZyB0aGUgZWxlbWVudCBvdXRcbiAgICAgICAgICAgIC8vIGZyb20gdW5kZXIgdGhlIHVzZXIgd2hpY2ggaXMgY3VycmVudGx5IHNjcm9sbGluZy9tb3ZpbmcgdGhlXG4gICAgICAgICAgICAvLyBjdXJzb3JcbiAgICAgICAgICAgIF90aGlzLmF2b2lkU2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIF90aGlzLmludGVybmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpcy5hdm9pZFNjcm9sbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvbk1vdXNlRG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25Nb3VzZURvd24sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgYWN0aXZlRWxlbWVudCBmcm9tIGJlaW5nIGNoYW5nZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBpdGVtIHNvIGl0IGNhbiByZW1haW4gd2l0aCB0aGUgY3VycmVudCBhY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhIG1vcmUgY29tbW9uIHVzZSBjYXNlLlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9LCBfZW5hYmxlZEV2ZW50SGFuZGxlcnNbb25TZWxlY3RLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMoY3VzdG9tQ2xpY2tIYW5kbGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuc2VsZWN0SXRlbUF0SW5kZXgoaW5kZXgsIHtcbiAgICAgICAgICAgIHR5cGU6IGNsaWNrSXRlbVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSwgX2VuYWJsZWRFdmVudEhhbmRsZXJzKTtcblxuICAgICAgICAvLyBQYXNzaW5nIGRvd24gdGhlIG9uTW91c2VEb3duIGhhbmRsZXIgdG8gcHJldmVudCByZWRpcmVjdFxuICAgICAgICAvLyBvZiB0aGUgYWN0aXZlRWxlbWVudCBpZiBjbGlja2luZyBvbiBkaXNhYmxlZCBpdGVtc1xuICAgICAgICB2YXIgZXZlbnRIYW5kbGVycyA9IHJlc3QuZGlzYWJsZWQgPyB7XG4gICAgICAgICAgb25Nb3VzZURvd246IGVuYWJsZWRFdmVudEhhbmRsZXJzLm9uTW91c2VEb3duXG4gICAgICAgIH0gOiBlbmFibGVkRXZlbnRIYW5kbGVycztcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgICAgICBpZDogX3RoaXMuZ2V0SXRlbUlkKGluZGV4KSxcbiAgICAgICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IF90aGlzLmdldFN0YXRlKCkuaGlnaGxpZ2h0ZWRJbmRleCA9PT0gaW5kZXhcbiAgICAgICAgfSwgZXZlbnRIYW5kbGVycywgcmVzdCk7XG4gICAgICB9O1xuICAgICAgLy9cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIElURU1cbiAgICAgIF90aGlzLmNsZWFySXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLml0ZW1zID0gW107XG4gICAgICB9O1xuICAgICAgX3RoaXMucmVzZXQgPSBmdW5jdGlvbiAob3RoZXJTdGF0ZVRvU2V0LCBjYikge1xuICAgICAgICBpZiAob3RoZXJTdGF0ZVRvU2V0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSBwaWNrU3RhdGUob3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtID0gX3JlZjguc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBpc09wZW46IF90aGlzLnByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfdGhpcy5wcm9wcy5kZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgICAgIGlucHV0VmFsdWU6IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhzZWxlY3RlZEl0ZW0pXG4gICAgICAgICAgfSwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgfSwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLnRvZ2dsZU1lbnUgPSBmdW5jdGlvbiAob3RoZXJTdGF0ZVRvU2V0LCBjYikge1xuICAgICAgICBpZiAob3RoZXJTdGF0ZVRvU2V0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvdGhlclN0YXRlVG9TZXQgPSBwaWNrU3RhdGUob3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgX3RoaXMuaW50ZXJuYWxTZXRTdGF0ZShmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgICAgICB2YXIgaXNPcGVuID0gX3JlZjkuaXNPcGVuO1xuICAgICAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBpc09wZW46ICFpc09wZW5cbiAgICAgICAgICB9LCBpc09wZW4gJiYge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX3RoaXMucHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXhcbiAgICAgICAgICB9LCBvdGhlclN0YXRlVG9TZXQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGdldFN0YXRlNyA9IF90aGlzLmdldFN0YXRlKCksXG4gICAgICAgICAgICBpc09wZW4gPSBfdGhpcyRnZXRTdGF0ZTcuaXNPcGVuLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleCA9IF90aGlzJGdldFN0YXRlNy5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5nZXRJdGVtQ291bnQoKSA+IDAgJiYgdHlwZW9mIGhpZ2hsaWdodGVkSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIF90aGlzLnNldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2JUb0NiKGNiKSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBfdGhpcy5vcGVuTWVudSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgfSwgY2IpO1xuICAgICAgfTtcbiAgICAgIF90aGlzLmNsb3NlTWVudSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICBfdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW46IGZhbHNlXG4gICAgICAgIH0sIGNiKTtcbiAgICAgIH07XG4gICAgICBfdGhpcy51cGRhdGVTdGF0dXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IF90aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIHZhciBpdGVtID0gX3RoaXMuaXRlbXNbc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleF07XG4gICAgICAgIHZhciByZXN1bHRDb3VudCA9IF90aGlzLmdldEl0ZW1Db3VudCgpO1xuICAgICAgICB2YXIgc3RhdHVzID0gX3RoaXMucHJvcHMuZ2V0QTExeVN0YXR1c01lc3NhZ2UoX2V4dGVuZHMoe1xuICAgICAgICAgIGl0ZW1Ub1N0cmluZzogX3RoaXMucHJvcHMuaXRlbVRvU3RyaW5nLFxuICAgICAgICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IF90aGlzLnByZXZpb3VzUmVzdWx0Q291bnQsXG4gICAgICAgICAgcmVzdWx0Q291bnQ6IHJlc3VsdENvdW50LFxuICAgICAgICAgIGhpZ2hsaWdodGVkSXRlbTogaXRlbVxuICAgICAgICB9LCBzdGF0ZSkpO1xuICAgICAgICBfdGhpcy5wcmV2aW91c1Jlc3VsdENvdW50ID0gcmVzdWx0Q291bnQ7XG4gICAgICAgIHNldFN0YXR1cyhzdGF0dXMsIF90aGlzLnByb3BzLmVudmlyb25tZW50LmRvY3VtZW50KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRwcm9wcy5kZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgX3RoaXMkcHJvcHMkaW5pdGlhbEhpID0gX3RoaXMkcHJvcHMuaW5pdGlhbEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIF9oaWdobGlnaHRlZEluZGV4ID0gX3RoaXMkcHJvcHMkaW5pdGlhbEhpID09PSB2b2lkIDAgPyBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCA6IF90aGlzJHByb3BzJGluaXRpYWxIaSxcbiAgICAgICAgZGVmYXVsdElzT3BlbiA9IF90aGlzJHByb3BzLmRlZmF1bHRJc09wZW4sXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxJcyA9IF90aGlzJHByb3BzLmluaXRpYWxJc09wZW4sXG4gICAgICAgIF9pc09wZW4gPSBfdGhpcyRwcm9wcyRpbml0aWFsSXMgPT09IHZvaWQgMCA/IGRlZmF1bHRJc09wZW4gOiBfdGhpcyRwcm9wcyRpbml0aWFsSXMsXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxJbiA9IF90aGlzJHByb3BzLmluaXRpYWxJbnB1dFZhbHVlLFxuICAgICAgICBfaW5wdXRWYWx1ZSA9IF90aGlzJHByb3BzJGluaXRpYWxJbiA9PT0gdm9pZCAwID8gJycgOiBfdGhpcyRwcm9wcyRpbml0aWFsSW4sXG4gICAgICAgIF90aGlzJHByb3BzJGluaXRpYWxTZSA9IF90aGlzJHByb3BzLmluaXRpYWxTZWxlY3RlZEl0ZW0sXG4gICAgICAgIF9zZWxlY3RlZEl0ZW0gPSBfdGhpcyRwcm9wcyRpbml0aWFsU2UgPT09IHZvaWQgMCA/IG51bGwgOiBfdGhpcyRwcm9wcyRpbml0aWFsU2U7XG4gICAgICB2YXIgX3N0YXRlID0gX3RoaXMuZ2V0U3RhdGUoe1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgaXNPcGVuOiBfaXNPcGVuLFxuICAgICAgICBpbnB1dFZhbHVlOiBfaW5wdXRWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBfc2VsZWN0ZWRJdGVtXG4gICAgICB9KTtcbiAgICAgIGlmIChfc3RhdGUuc2VsZWN0ZWRJdGVtICE9IG51bGwgJiYgX3RoaXMucHJvcHMuaW5pdGlhbElucHV0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBfc3RhdGUuaW5wdXRWYWx1ZSA9IF90aGlzLnByb3BzLml0ZW1Ub1N0cmluZyhfc3RhdGUuc2VsZWN0ZWRJdGVtKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnN0YXRlID0gX3N0YXRlO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICB2YXIgX3Byb3RvID0gRG93bnNoaWZ0LnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgcnVubmluZyB0aW1lb3V0c1xuICAgICAqL1xuICAgIF9wcm90by5pbnRlcm5hbENsZWFyVGltZW91dHMgPSBmdW5jdGlvbiBpbnRlcm5hbENsZWFyVGltZW91dHMoKSB7XG4gICAgICB0aGlzLnRpbWVvdXRJZHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aW1lb3V0SWRzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhdGUgYmFzZWQgb24gaW50ZXJuYWwgc3RhdGUgb3IgcHJvcHNcbiAgICAgKiBJZiBhIHN0YXRlIHZhbHVlIGlzIHBhc3NlZCB2aWEgcHJvcHMsIHRoZW4gdGhhdFxuICAgICAqIGlzIHRoZSB2YWx1ZSBnaXZlbiwgb3RoZXJ3aXNlIGl0J3MgcmV0cmlldmVkIGZyb21cbiAgICAgKiBzdGF0ZVRvTWVyZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVRvTWVyZ2UgZGVmYXVsdHMgdG8gdGhpcy5zdGF0ZVxuICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIHN0YXRlXG4gICAgICovO1xuICAgIF9wcm90by5nZXRTdGF0ZSA9IGZ1bmN0aW9uIGdldFN0YXRlJDEoc3RhdGVUb01lcmdlKSB7XG4gICAgICBpZiAoc3RhdGVUb01lcmdlID09PSB2b2lkIDApIHtcbiAgICAgICAgc3RhdGVUb01lcmdlID0gdGhpcy5zdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRTdGF0ZShzdGF0ZVRvTWVyZ2UsIHRoaXMucHJvcHMpO1xuICAgIH07XG4gICAgX3Byb3RvLmdldEl0ZW1Db3VudCA9IGZ1bmN0aW9uIGdldEl0ZW1Db3VudCgpIHtcbiAgICAgIC8vIHRoaW5ncyByZWFkIGJldHRlciB0aGlzIHdheS4gVGhleSdyZSBpbiBwcmlvcml0eSBvcmRlcjpcbiAgICAgIC8vIDEuIGB0aGlzLml0ZW1Db3VudGBcbiAgICAgIC8vIDIuIGB0aGlzLnByb3BzLml0ZW1Db3VudGBcbiAgICAgIC8vIDMuIGB0aGlzLml0ZW1zLmxlbmd0aGBcbiAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIGlmICh0aGlzLml0ZW1Db3VudCAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW1Db3VudCA9IHRoaXMuaXRlbUNvdW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLml0ZW1Db3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1Db3VudDtcbiAgICB9O1xuICAgIF9wcm90by5nZXRJdGVtTm9kZUZyb21JbmRleCA9IGZ1bmN0aW9uIGdldEl0ZW1Ob2RlRnJvbUluZGV4KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5lbnZpcm9ubWVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldEl0ZW1JZChpbmRleCkpO1xuICAgIH07XG4gICAgX3Byb3RvLnNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3ID0gZnVuY3Rpb24gc2Nyb2xsSGlnaGxpZ2h0ZWRJdGVtSW50b1ZpZXcoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAge1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0SXRlbU5vZGVGcm9tSW5kZXgodGhpcy5nZXRTdGF0ZSgpLmhpZ2hsaWdodGVkSW5kZXgpO1xuICAgICAgICB0aGlzLnByb3BzLnNjcm9sbEludG9WaWV3KG5vZGUsIHRoaXMuX21lbnVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF9wcm90by5tb3ZlSGlnaGxpZ2h0ZWRJbmRleCA9IGZ1bmN0aW9uIG1vdmVIaWdobGlnaHRlZEluZGV4KGFtb3VudCwgb3RoZXJTdGF0ZVRvU2V0KSB7XG4gICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5nZXRJdGVtQ291bnQoKTtcbiAgICAgIHZhciBfdGhpcyRnZXRTdGF0ZTggPSB0aGlzLmdldFN0YXRlKCksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcyRnZXRTdGF0ZTguaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIHZhciBuZXh0SGlnaGxpZ2h0ZWRJbmRleCA9IGdldEhpZ2hsaWdodGVkSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCwgYW1vdW50LCB7XG4gICAgICAgICAgbGVuZ3RoOiBpdGVtQ291bnRcbiAgICAgICAgfSwgdGhpcy5pc0l0ZW1EaXNhYmxlZCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXh0SGlnaGxpZ2h0ZWRJbmRleCwgb3RoZXJTdGF0ZVRvU2V0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIF9wcm90by5nZXRTdGF0ZUFuZEhlbHBlcnMgPSBmdW5jdGlvbiBnZXRTdGF0ZUFuZEhlbHBlcnMoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0U3RhdGU5ID0gdGhpcy5nZXRTdGF0ZSgpLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4ID0gX3RoaXMkZ2V0U3RhdGU5LmhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIGlucHV0VmFsdWUgPSBfdGhpcyRnZXRTdGF0ZTkuaW5wdXRWYWx1ZSxcbiAgICAgICAgc2VsZWN0ZWRJdGVtID0gX3RoaXMkZ2V0U3RhdGU5LnNlbGVjdGVkSXRlbSxcbiAgICAgICAgaXNPcGVuID0gX3RoaXMkZ2V0U3RhdGU5LmlzT3BlbjtcbiAgICAgIHZhciBpdGVtVG9TdHJpbmcgPSB0aGlzLnByb3BzLml0ZW1Ub1N0cmluZztcbiAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICB2YXIgZ2V0Um9vdFByb3BzID0gdGhpcy5nZXRSb290UHJvcHMsXG4gICAgICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdGhpcy5nZXRUb2dnbGVCdXR0b25Qcm9wcyxcbiAgICAgICAgZ2V0TGFiZWxQcm9wcyA9IHRoaXMuZ2V0TGFiZWxQcm9wcyxcbiAgICAgICAgZ2V0TWVudVByb3BzID0gdGhpcy5nZXRNZW51UHJvcHMsXG4gICAgICAgIGdldElucHV0UHJvcHMgPSB0aGlzLmdldElucHV0UHJvcHMsXG4gICAgICAgIGdldEl0ZW1Qcm9wcyA9IHRoaXMuZ2V0SXRlbVByb3BzLFxuICAgICAgICBvcGVuTWVudSA9IHRoaXMub3Blbk1lbnUsXG4gICAgICAgIGNsb3NlTWVudSA9IHRoaXMuY2xvc2VNZW51LFxuICAgICAgICB0b2dnbGVNZW51ID0gdGhpcy50b2dnbGVNZW51LFxuICAgICAgICBzZWxlY3RJdGVtID0gdGhpcy5zZWxlY3RJdGVtLFxuICAgICAgICBzZWxlY3RJdGVtQXRJbmRleCA9IHRoaXMuc2VsZWN0SXRlbUF0SW5kZXgsXG4gICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtLFxuICAgICAgICBzZXRIaWdobGlnaHRlZEluZGV4ID0gdGhpcy5zZXRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICBjbGVhclNlbGVjdGlvbiA9IHRoaXMuY2xlYXJTZWxlY3Rpb24sXG4gICAgICAgIGNsZWFySXRlbXMgPSB0aGlzLmNsZWFySXRlbXMsXG4gICAgICAgIHJlc2V0ID0gdGhpcy5yZXNldCxcbiAgICAgICAgc2V0SXRlbUNvdW50ID0gdGhpcy5zZXRJdGVtQ291bnQsXG4gICAgICAgIHVuc2V0SXRlbUNvdW50ID0gdGhpcy51bnNldEl0ZW1Db3VudCxcbiAgICAgICAgc2V0U3RhdGUgPSB0aGlzLmludGVybmFsU2V0U3RhdGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAvLyBwcm9wIGdldHRlcnNcbiAgICAgICAgZ2V0Um9vdFByb3BzOiBnZXRSb290UHJvcHMsXG4gICAgICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzOiBnZXRUb2dnbGVCdXR0b25Qcm9wcyxcbiAgICAgICAgZ2V0TGFiZWxQcm9wczogZ2V0TGFiZWxQcm9wcyxcbiAgICAgICAgZ2V0TWVudVByb3BzOiBnZXRNZW51UHJvcHMsXG4gICAgICAgIGdldElucHV0UHJvcHM6IGdldElucHV0UHJvcHMsXG4gICAgICAgIGdldEl0ZW1Qcm9wczogZ2V0SXRlbVByb3BzLFxuICAgICAgICAvLyBhY3Rpb25zXG4gICAgICAgIHJlc2V0OiByZXNldCxcbiAgICAgICAgb3Blbk1lbnU6IG9wZW5NZW51LFxuICAgICAgICBjbG9zZU1lbnU6IGNsb3NlTWVudSxcbiAgICAgICAgdG9nZ2xlTWVudTogdG9nZ2xlTWVudSxcbiAgICAgICAgc2VsZWN0SXRlbTogc2VsZWN0SXRlbSxcbiAgICAgICAgc2VsZWN0SXRlbUF0SW5kZXg6IHNlbGVjdEl0ZW1BdEluZGV4LFxuICAgICAgICBzZWxlY3RIaWdobGlnaHRlZEl0ZW06IHNlbGVjdEhpZ2hsaWdodGVkSXRlbSxcbiAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleDogc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgY2xlYXJTZWxlY3Rpb246IGNsZWFyU2VsZWN0aW9uLFxuICAgICAgICBjbGVhckl0ZW1zOiBjbGVhckl0ZW1zLFxuICAgICAgICBzZXRJdGVtQ291bnQ6IHNldEl0ZW1Db3VudCxcbiAgICAgICAgdW5zZXRJdGVtQ291bnQ6IHVuc2V0SXRlbUNvdW50LFxuICAgICAgICBzZXRTdGF0ZTogc2V0U3RhdGUsXG4gICAgICAgIC8vIHByb3BzXG4gICAgICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nLFxuICAgICAgICAvLyBkZXJpdmVkXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gc3RhdGVcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgaXNPcGVuOiBpc09wZW4sXG4gICAgICAgIHNlbGVjdGVkSXRlbTogc2VsZWN0ZWRJdGVtXG4gICAgICB9O1xuICAgIH07XG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWZhbHNlICYmIHRoaXMuZ2V0TWVudVByb3BzLmNhbGxlZCAmJiAhdGhpcy5nZXRNZW51UHJvcHMuc3VwcHJlc3NSZWZFcnJvcikge1xuICAgICAgICB2YWxpZGF0ZUdldE1lbnVQcm9wc0NhbGxlZENvcnJlY3RseSh0aGlzLl9tZW51Tm9kZSwgdGhpcy5nZXRNZW51UHJvcHMpO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKHJlYWN0LW5hdGl2ZSkgKi9cbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcy5pc01vdXNlRG93biBoZWxwcyB1cyB0cmFjayB3aGV0aGVyIHRoZSBtb3VzZSBpcyBjdXJyZW50bHkgaGVsZCBkb3duLlxuICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhbiBpdGVtIGluIHRoZSBsaXN0LCBidXQgaG9sZHMgdGhlIG1vdXNlXG4gICAgICAgIC8vIGRvd24gbG9uZyBlbm91Z2ggZm9yIHRoZSBsaXN0IHRvIGRpc2FwcGVhciAoYmVjYXVzZSB0aGUgYmx1ciBldmVudCBmaXJlcyBvbiB0aGUgaW5wdXQpXG4gICAgICAgIC8vIHRoaXMuaXNNb3VzZURvd24gaXMgdXNlZCBpbiB0aGUgYmx1ciBoYW5kbGVyIG9uIHRoZSBpbnB1dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYmx1ciBldmVudCBzaG91bGRcbiAgICAgICAgLy8gdHJpZ2dlciBoaWRpbmcgdGhlIG1lbnUuXG4gICAgICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIF90aGlzNC5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdXNlVXAgPSBmdW5jdGlvbiBvbk1vdXNlVXAoZXZlbnQpIHtcbiAgICAgICAgICBfdGhpczQuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgb3IgdGhlIGFjdGl2ZUVsZW1lbnQgaXMgd2l0aGluIGEgZG93bnNoaWZ0IG5vZGVcbiAgICAgICAgICAvLyB0aGVuIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgZG93bnNoaWZ0XG4gICAgICAgICAgdmFyIGNvbnRleHRXaXRoaW5Eb3duc2hpZnQgPSB0YXJnZXRXaXRoaW5Eb3duc2hpZnQoZXZlbnQudGFyZ2V0LCBbX3RoaXM0Ll9yb290Tm9kZSwgX3RoaXM0Ll9tZW51Tm9kZV0sIF90aGlzNC5wcm9wcy5lbnZpcm9ubWVudCk7XG4gICAgICAgICAgaWYgKCFjb250ZXh0V2l0aGluRG93bnNoaWZ0ICYmIF90aGlzNC5nZXRTdGF0ZSgpLmlzT3Blbikge1xuICAgICAgICAgICAgX3RoaXM0LnJlc2V0KHtcbiAgICAgICAgICAgICAgdHlwZTogbW91c2VVcFxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnByb3BzLm9uT3V0ZXJDbGljayhfdGhpczQuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBUb3VjaGluZyBhbiBlbGVtZW50IGluIGlPUyBnaXZlcyBmb2N1cyBhbmQgaG92ZXIgc3RhdGVzLCBidXQgdG91Y2hpbmcgb3V0IG9mXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IHdpbGwgcmVtb3ZlIGhvdmVyLCBhbmQgcGVyc2lzdCB0aGUgZm9jdXMgc3RhdGUsIHJlc3VsdGluZyBpbiB0aGVcbiAgICAgICAgLy8gYmx1ciBldmVudCBub3QgYmVpbmcgdHJpZ2dlcmVkLlxuICAgICAgICAvLyB0aGlzLmlzVG91Y2hNb3ZlIGhlbHBzIHVzIHRyYWNrIHdoZXRoZXIgdGhlIHVzZXIgaXMgdGFwcGluZyBvciBzd2lwaW5nIG9uIGEgdG91Y2ggc2NyZWVuLlxuICAgICAgICAvLyBJZiB0aGUgdXNlciB0YXBzIG91dHNpZGUgb2YgRG93bnNoaWZ0LCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSByZXNldCxcbiAgICAgICAgLy8gYnV0IG5vdCBpZiB0aGUgdXNlciBpcyBzd2lwaW5nXG4gICAgICAgIHZhciBvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiBvblRvdWNoU3RhcnQoKSB7XG4gICAgICAgICAgX3RoaXM0LmlzVG91Y2hNb3ZlID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoTW92ZSA9IGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCkge1xuICAgICAgICAgIF90aGlzNC5pc1RvdWNoTW92ZSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZChldmVudCkge1xuICAgICAgICAgIHZhciBjb250ZXh0V2l0aGluRG93bnNoaWZ0ID0gdGFyZ2V0V2l0aGluRG93bnNoaWZ0KGV2ZW50LnRhcmdldCwgW190aGlzNC5fcm9vdE5vZGUsIF90aGlzNC5fbWVudU5vZGVdLCBfdGhpczQucHJvcHMuZW52aXJvbm1lbnQsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoIV90aGlzNC5pc1RvdWNoTW92ZSAmJiAhY29udGV4dFdpdGhpbkRvd25zaGlmdCAmJiBfdGhpczQuZ2V0U3RhdGUoKS5pc09wZW4pIHtcbiAgICAgICAgICAgIF90aGlzNC5yZXNldCh7XG4gICAgICAgICAgICAgIHR5cGU6IHRvdWNoRW5kXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczQucHJvcHMub25PdXRlckNsaWNrKF90aGlzNC5nZXRTdGF0ZUFuZEhlbHBlcnMoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBlbnZpcm9ubWVudCA9IHRoaXMucHJvcHMuZW52aXJvbm1lbnQ7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgZW52aXJvbm1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgIHRoaXMuY2xlYW51cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQuaW50ZXJuYWxDbGVhclRpbWVvdXRzKCk7XG4gICAgICAgICAgX3RoaXM0LnVwZGF0ZVN0YXR1cy5jYW5jZWwoKTtcbiAgICAgICAgICBlbnZpcm9ubWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgb25Ub3VjaE1vdmUpO1xuICAgICAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBfcHJvdG8uc2hvdWxkU2Nyb2xsID0gZnVuY3Rpb24gc2hvdWxkU2Nyb2xsKHByZXZTdGF0ZSwgcHJldlByb3BzKSB7XG4gICAgICB2YXIgX3JlZjEwID0gdGhpcy5wcm9wcy5oaWdobGlnaHRlZEluZGV4ID09PSB1bmRlZmluZWQgPyB0aGlzLmdldFN0YXRlKCkgOiB0aGlzLnByb3BzLFxuICAgICAgICBjdXJyZW50SGlnaGxpZ2h0ZWRJbmRleCA9IF9yZWYxMC5oaWdobGlnaHRlZEluZGV4O1xuICAgICAgdmFyIF9yZWYxMSA9IHByZXZQcm9wcy5oaWdobGlnaHRlZEluZGV4ID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBwcmV2UHJvcHMsXG4gICAgICAgIHByZXZIaWdobGlnaHRlZEluZGV4ID0gX3JlZjExLmhpZ2hsaWdodGVkSW5kZXg7XG4gICAgICB2YXIgc2Nyb2xsV2hlbk9wZW4gPSBjdXJyZW50SGlnaGxpZ2h0ZWRJbmRleCAmJiB0aGlzLmdldFN0YXRlKCkuaXNPcGVuICYmICFwcmV2U3RhdGUuaXNPcGVuO1xuICAgICAgdmFyIHNjcm9sbFdoZW5OYXZpZ2F0aW5nID0gY3VycmVudEhpZ2hsaWdodGVkSW5kZXggIT09IHByZXZIaWdobGlnaHRlZEluZGV4O1xuICAgICAgcmV0dXJuIHNjcm9sbFdoZW5PcGVuIHx8IHNjcm9sbFdoZW5OYXZpZ2F0aW5nO1xuICAgIH07XG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkKHRoaXMuc3RhdGUsIHByZXZQcm9wcywgdGhpcy5wcm9wcyk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAgICBpZiAodGhpcy5nZXRNZW51UHJvcHMuY2FsbGVkICYmICF0aGlzLmdldE1lbnVQcm9wcy5zdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgICAgdmFsaWRhdGVHZXRNZW51UHJvcHNDYWxsZWRDb3JyZWN0bHkodGhpcy5fbWVudU5vZGUsIHRoaXMuZ2V0TWVudVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29udHJvbGxlZFByb3AodGhpcy5wcm9wcywgJ3NlbGVjdGVkSXRlbScpICYmIHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtQ2hhbmdlZChwcmV2UHJvcHMuc2VsZWN0ZWRJdGVtLCB0aGlzLnByb3BzLnNlbGVjdGVkSXRlbSkpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNldFN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBjb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgaW5wdXRWYWx1ZTogdGhpcy5wcm9wcy5pdGVtVG9TdHJpbmcodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmF2b2lkU2Nyb2xsaW5nICYmIHRoaXMuc2hvdWxkU2Nyb2xsKHByZXZTdGF0ZSwgcHJldlByb3BzKSkge1xuICAgICAgICB0aGlzLnNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3KCk7XG4gICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlIChyZWFjdC1uYXRpdmUpICovXG4gICAgICB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYW51cCgpOyAvLyBhdm9pZHMgbWVtb3J5IGxlYWtcbiAgICB9O1xuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB1bndyYXBBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuLCBub29wKTtcbiAgICAgIC8vIGJlY2F1c2UgdGhlIGl0ZW1zIGFyZSByZXJlbmRlcmVkIGV2ZXJ5IHRpbWUgd2UgY2FsbCB0aGUgY2hpbGRyZW5cbiAgICAgIC8vIHdlIGNsZWFyIHRoaXMgb3V0IGVhY2ggcmVuZGVyIGFuZCBpdCB3aWxsIGJlIHBvcHVsYXRlZCBhZ2FpbiBhc1xuICAgICAgLy8gZ2V0SXRlbVByb3BzIGlzIGNhbGxlZC5cbiAgICAgIHRoaXMuY2xlYXJJdGVtcygpO1xuICAgICAgLy8gd2UgcmVzZXQgdGhpcyBzbyB3ZSBrbm93IHdoZXRoZXIgdGhlIHVzZXIgY2FsbHMgZ2V0Um9vdFByb3BzIGR1cmluZ1xuICAgICAgLy8gdGhpcyByZW5kZXIuIElmIHRoZXkgZG8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLFxuICAgICAgLy8gaWYgdGhleSBkb24ndCB0aGVuIHdlIG5lZWQgdG8gY2xvbmUgdGhlIGVsZW1lbnQgdGhleSByZXR1cm4gYW5kXG4gICAgICAvLyBhcHBseSB0aGUgcHJvcHMgZm9yIHRoZW0uXG4gICAgICB0aGlzLmdldFJvb3RQcm9wcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0Um9vdFByb3BzLnJlZktleSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZ2V0Um9vdFByb3BzLnN1cHByZXNzUmVmRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAvLyB3ZSBkbyBzb21ldGhpbmcgc2ltaWxhciBmb3IgZ2V0TWVudVByb3BzXG4gICAgICB0aGlzLmdldE1lbnVQcm9wcy5jYWxsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ2V0TWVudVByb3BzLnJlZktleSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZ2V0TWVudVByb3BzLnN1cHByZXNzUmVmRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAvLyB3ZSBkbyBzb21ldGhpbmcgc2ltaWxhciBmb3IgZ2V0TGFiZWxQcm9wc1xuICAgICAgdGhpcy5nZXRMYWJlbFByb3BzLmNhbGxlZCA9IGZhbHNlO1xuICAgICAgLy8gYW5kIHNvbWV0aGluZyBzaW1pbGFyIGZvciBnZXRJbnB1dFByb3BzXG4gICAgICB0aGlzLmdldElucHV0UHJvcHMuY2FsbGVkID0gZmFsc2U7XG4gICAgICB2YXIgZWxlbWVudCA9IHVud3JhcEFycmF5KGNoaWxkcmVuKHRoaXMuZ2V0U3RhdGVBbmRIZWxwZXJzKCkpKTtcbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdldFJvb3RQcm9wcy5jYWxsZWQgfHwgdGhpcy5wcm9wcy5zdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLmdldFJvb3RQcm9wcy5zdXBwcmVzc1JlZkVycm9yICYmICF0aGlzLnByb3BzLnN1cHByZXNzUmVmRXJyb3IpIHtcbiAgICAgICAgICB2YWxpZGF0ZUdldFJvb3RQcm9wc0NhbGxlZENvcnJlY3RseShlbGVtZW50LCB0aGlzLmdldFJvb3RQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9IGVsc2UgaWYgKGlzRE9NRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAvLyB0aGV5IGRpZG4ndCBhcHBseSB0aGUgcm9vdCBwcm9wcywgYnV0IHdlIGNhbiBjbG9uZVxuICAgICAgICAvLyB0aGlzIGFuZCBhcHBseSB0aGUgcHJvcHMgb3Vyc2VsdmVzXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGVsZW1lbnQsIHRoaXMuZ2V0Um9vdFByb3BzKGdldEVsZW1lbnRQcm9wcyhlbGVtZW50KSkpO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gdGhleSBkaWRuJ3QgYXBwbHkgdGhlIHJvb3QgcHJvcHMsIGJ1dCB0aGV5IG5lZWQgdG9cbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNhbid0IHF1ZXJ5IGFyb3VuZCB0aGUgYXV0b2NvbXBsZXRlXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb3duc2hpZnQ6IElmIHlvdSByZXR1cm4gYSBub24tRE9NIGVsZW1lbnQsIHlvdSBtdXN0IGFwcGx5IHRoZSBnZXRSb290UHJvcHMgZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gRG93bnNoaWZ0O1xuICB9KENvbXBvbmVudCk7XG4gIERvd25zaGlmdC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg6IG51bGwsXG4gICAgZGVmYXVsdElzT3BlbjogZmFsc2UsXG4gICAgZ2V0QTExeVN0YXR1c01lc3NhZ2U6IGdldEExMXlTdGF0dXNNZXNzYWdlJDEsXG4gICAgaXRlbVRvU3RyaW5nOiBmdW5jdGlvbiBpdGVtVG9TdHJpbmcoaSkge1xuICAgICAgaWYgKGkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc1BsYWluT2JqZWN0KGkpICYmICFpLmhhc093blByb3BlcnR5KCd0b1N0cmluZycpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybignZG93bnNoaWZ0OiBBbiBvYmplY3Qgd2FzIHBhc3NlZCB0byB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgaXRlbVRvU3RyaW5nYC4gWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBpdGVtVG9TdHJpbmdgIGltcGxlbWVudGF0aW9uLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGBpdGVtVG9TdHJpbmdgIEFQSSBkb2N1bWVudGF0aW9uLicsICdUaGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZDonLCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcoaSk7XG4gICAgfSxcbiAgICBvblN0YXRlQ2hhbmdlOiBub29wLFxuICAgIG9uSW5wdXRWYWx1ZUNoYW5nZTogbm9vcCxcbiAgICBvblVzZXJBY3Rpb246IG5vb3AsXG4gICAgb25DaGFuZ2U6IG5vb3AsXG4gICAgb25TZWxlY3Q6IG5vb3AsXG4gICAgb25PdXRlckNsaWNrOiBub29wLFxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZWQ6IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUNoYW5nZWQocHJldkl0ZW0sIGl0ZW0pIHtcbiAgICAgIHJldHVybiBwcmV2SXRlbSAhPT0gaXRlbTtcbiAgICB9LFxuICAgIGVudmlyb25tZW50OiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAoc3NyKSAqL1xuICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8ge30gOiB3aW5kb3csXG4gICAgc3RhdGVSZWR1Y2VyOiBmdW5jdGlvbiBzdGF0ZVJlZHVjZXIoc3RhdGUsIHN0YXRlVG9TZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZVRvU2V0O1xuICAgIH0sXG4gICAgc3VwcHJlc3NSZWZFcnJvcjogZmFsc2UsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3XG4gIH07XG4gIERvd25zaGlmdC5zdGF0ZUNoYW5nZVR5cGVzID0gc3RhdGVDaGFuZ2VUeXBlcyQzO1xuICByZXR1cm4gRG93bnNoaWZ0O1xufSgpO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRG93bnNoaWZ0LnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuICBkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgZGVmYXVsdElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGluaXRpYWxIaWdobGlnaHRlZEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpbml0aWFsU2VsZWN0ZWRJdGVtOiBQcm9wVHlwZXMuYW55LFxuICBpbml0aWFsSW5wdXRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGdldEExMXlTdGF0dXNNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXRlbVRvU3RyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbklucHV0VmFsdWVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblVzZXJBY3Rpb246IFByb3BUeXBlcy5mdW5jLFxuICBvbk91dGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RhdGVSZWR1Y2VyOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXRlbUNvdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZW52aXJvbm1lbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGRvY3VtZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY3JlYXRlRWxlbWVudDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGdldEVsZW1lbnRCeUlkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgYWN0aXZlRWxlbWVudDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgYm9keTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBOb2RlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pLFxuICBzdXBwcmVzc1JlZkVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2Nyb2xsSW50b1ZpZXc6IFByb3BUeXBlcy5mdW5jLFxuICAvLyB0aGluZ3Mgd2Uga2VlcCBpbiBzdGF0ZSBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHNcbiAgLy8gYnV0IGNhbiBhY2NlcHQgYXMgcHJvcHMgZm9yIGNvbnRyb2xsZWQgY29tcG9uZW50c1xuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlcyAqL1xuICBzZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1lbnVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ2V0SXRlbUlkOiBQcm9wVHlwZXMuZnVuY1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0L25vLXVudXNlZC1wcm9wLXR5cGVzICovXG59IDogdm9pZCAwO1xudmFyIERvd25zaGlmdCQxID0gRG93bnNoaWZ0O1xuZnVuY3Rpb24gdmFsaWRhdGVHZXRNZW51UHJvcHNDYWxsZWRDb3JyZWN0bHkobm9kZSwgX3JlZjEyKSB7XG4gIHZhciByZWZLZXkgPSBfcmVmMTIucmVmS2V5O1xuICBpZiAoIW5vZGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoXCJkb3duc2hpZnQ6IFRoZSByZWYgcHJvcCBcXFwiXCIgKyByZWZLZXkgKyBcIlxcXCIgZnJvbSBnZXRNZW51UHJvcHMgd2FzIG5vdCBhcHBsaWVkIGNvcnJlY3RseSBvbiB5b3VyIG1lbnUgZWxlbWVudC5cIik7XG4gIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlR2V0Um9vdFByb3BzQ2FsbGVkQ29ycmVjdGx5KGVsZW1lbnQsIF9yZWYxMykge1xuICB2YXIgcmVmS2V5ID0gX3JlZjEzLnJlZktleTtcbiAgdmFyIHJlZktleVNwZWNpZmllZCA9IHJlZktleSAhPT0gJ3JlZic7XG4gIHZhciBpc0NvbXBvc2l0ZSA9ICFpc0RPTUVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpc0NvbXBvc2l0ZSAmJiAhcmVmS2V5U3BlY2lmaWVkICYmICFpc0ZvcndhcmRSZWYoZWxlbWVudCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ2Rvd25zaGlmdDogWW91IHJldHVybmVkIGEgbm9uLURPTSBlbGVtZW50LiBZb3UgbXVzdCBzcGVjaWZ5IGEgcmVmS2V5IGluIGdldFJvb3RQcm9wcycpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2l0ZSAmJiByZWZLZXlTcGVjaWZpZWQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoXCJkb3duc2hpZnQ6IFlvdSByZXR1cm5lZCBhIERPTSBlbGVtZW50LiBZb3Ugc2hvdWxkIG5vdCBzcGVjaWZ5IGEgcmVmS2V5IGluIGdldFJvb3RQcm9wcy4gWW91IHNwZWNpZmllZCBcXFwiXCIgKyByZWZLZXkgKyBcIlxcXCJcIik7XG4gIH1cbiAgaWYgKCFpc0ZvcndhcmRSZWYoZWxlbWVudCkgJiYgIWdldEVsZW1lbnRQcm9wcyhlbGVtZW50KVtyZWZLZXldKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBZb3UgbXVzdCBhcHBseSB0aGUgcmVmIHByb3AgXFxcIlwiICsgcmVmS2V5ICsgXCJcXFwiIGZyb20gZ2V0Um9vdFByb3BzIG9udG8geW91ciByb290IGVsZW1lbnQuXCIpO1xuICB9XG59XG5cbnZhciBfZXhjbHVkZWQkMyA9IFtcImlzSW5pdGlhbE1vdW50XCIsIFwiaGlnaGxpZ2h0ZWRJbmRleFwiLCBcIml0ZW1zXCIsIFwiZW52aXJvbm1lbnRcIl07XG52YXIgZHJvcGRvd25EZWZhdWx0U3RhdGVWYWx1ZXMgPSB7XG4gIGhpZ2hsaWdodGVkSW5kZXg6IC0xLFxuICBpc09wZW46IGZhbHNlLFxuICBzZWxlY3RlZEl0ZW06IG51bGwsXG4gIGlucHV0VmFsdWU6ICcnXG59O1xuZnVuY3Rpb24gY2FsbE9uQ2hhbmdlUHJvcHMoYWN0aW9uLCBzdGF0ZSwgbmV3U3RhdGUpIHtcbiAgdmFyIHByb3BzID0gYWN0aW9uLnByb3BzLFxuICAgIHR5cGUgPSBhY3Rpb24udHlwZTtcbiAgdmFyIGNoYW5nZXMgPSB7fTtcbiAgT2JqZWN0LmtleXMoc3RhdGUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGludm9rZU9uQ2hhbmdlSGFuZGxlcihrZXksIGFjdGlvbiwgc3RhdGUsIG5ld1N0YXRlKTtcbiAgICBpZiAobmV3U3RhdGVba2V5XSAhPT0gc3RhdGVba2V5XSkge1xuICAgICAgY2hhbmdlc1trZXldID0gbmV3U3RhdGVba2V5XTtcbiAgICB9XG4gIH0pO1xuICBpZiAocHJvcHMub25TdGF0ZUNoYW5nZSAmJiBPYmplY3Qua2V5cyhjaGFuZ2VzKS5sZW5ndGgpIHtcbiAgICBwcm9wcy5vblN0YXRlQ2hhbmdlKF9leHRlbmRzKHtcbiAgICAgIHR5cGU6IHR5cGVcbiAgICB9LCBjaGFuZ2VzKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGludm9rZU9uQ2hhbmdlSGFuZGxlcihrZXksIGFjdGlvbiwgc3RhdGUsIG5ld1N0YXRlKSB7XG4gIHZhciBwcm9wcyA9IGFjdGlvbi5wcm9wcyxcbiAgICB0eXBlID0gYWN0aW9uLnR5cGU7XG4gIHZhciBoYW5kbGVyID0gXCJvblwiICsgY2FwaXRhbGl6ZVN0cmluZyhrZXkpICsgXCJDaGFuZ2VcIjtcbiAgaWYgKHByb3BzW2hhbmRsZXJdICYmIG5ld1N0YXRlW2tleV0gIT09IHVuZGVmaW5lZCAmJiBuZXdTdGF0ZVtrZXldICE9PSBzdGF0ZVtrZXldKSB7XG4gICAgcHJvcHNbaGFuZGxlcl0oX2V4dGVuZHMoe1xuICAgICAgdHlwZTogdHlwZVxuICAgIH0sIG5ld1N0YXRlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IHN0YXRlIHJlZHVjZXIgdGhhdCByZXR1cm5zIHRoZSBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzIHN0YXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGEgYWN0aW9uIHdpdGggY2hhbmdlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIHN0YXRlUmVkdWNlcihzLCBhKSB7XG4gIHJldHVybiBhLmNoYW5nZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG1lc3NhZ2UgdG8gYmUgYWRkZWQgdG8gYXJpYS1saXZlIHJlZ2lvbiB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdGlvblBhcmFtZXRlcnMgUGFyYW1ldGVycyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhMTF5IG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGdldEExMXlTZWxlY3Rpb25NZXNzYWdlKHNlbGVjdGlvblBhcmFtZXRlcnMpIHtcbiAgdmFyIHNlbGVjdGVkSXRlbSA9IHNlbGVjdGlvblBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtLFxuICAgIGl0ZW1Ub1N0cmluZ0xvY2FsID0gc2VsZWN0aW9uUGFyYW1ldGVycy5pdGVtVG9TdHJpbmc7XG4gIHJldHVybiBzZWxlY3RlZEl0ZW0gPyBpdGVtVG9TdHJpbmdMb2NhbChzZWxlY3RlZEl0ZW0pICsgXCIgaGFzIGJlZW4gc2VsZWN0ZWQuXCIgOiAnJztcbn1cblxuLyoqXG4gKiBEZWJvdW5jZWQgY2FsbCBmb3IgdXBkYXRpbmcgdGhlIGExMXkgbWVzc2FnZS5cbiAqL1xudmFyIHVwZGF0ZUExMXlTdGF0dXMgPSBkZWJvdW5jZShmdW5jdGlvbiAoZ2V0QTExeU1lc3NhZ2UsIGRvY3VtZW50KSB7XG4gIHNldFN0YXR1cyhnZXRBMTF5TWVzc2FnZSgpLCBkb2N1bWVudCk7XG59LCAyMDApO1xuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gdXNlTGF5b3V0RWZmZWN0IDogdXNlRWZmZWN0O1xuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxudmFyIHVzZUVsZW1lbnRJZHMgPSAndXNlSWQnIGluIFJlYWN0IC8vIEF2b2lkIGNvbmRpdGlvbmFsIHVzZUlkIGNhbGxcbj8gZnVuY3Rpb24gdXNlRWxlbWVudElkcyhfcmVmKSB7XG4gIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgbGFiZWxJZCA9IF9yZWYubGFiZWxJZCxcbiAgICBtZW51SWQgPSBfcmVmLm1lbnVJZCxcbiAgICBnZXRJdGVtSWQgPSBfcmVmLmdldEl0ZW1JZCxcbiAgICB0b2dnbGVCdXR0b25JZCA9IF9yZWYudG9nZ2xlQnV0dG9uSWQsXG4gICAgaW5wdXRJZCA9IF9yZWYuaW5wdXRJZDtcbiAgLy8gQXZvaWQgY29uZGl0aW9uYWwgdXNlSWQgY2FsbFxuICB2YXIgcmVhY3RJZCA9IFwiZG93bnNoaWZ0LVwiICsgUmVhY3QudXNlSWQoKTtcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gcmVhY3RJZDtcbiAgfVxuICB2YXIgZWxlbWVudElkc1JlZiA9IHVzZVJlZih7XG4gICAgbGFiZWxJZDogbGFiZWxJZCB8fCBpZCArIFwiLWxhYmVsXCIsXG4gICAgbWVudUlkOiBtZW51SWQgfHwgaWQgKyBcIi1tZW51XCIsXG4gICAgZ2V0SXRlbUlkOiBnZXRJdGVtSWQgfHwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaWQgKyBcIi1pdGVtLVwiICsgaW5kZXg7XG4gICAgfSxcbiAgICB0b2dnbGVCdXR0b25JZDogdG9nZ2xlQnV0dG9uSWQgfHwgaWQgKyBcIi10b2dnbGUtYnV0dG9uXCIsXG4gICAgaW5wdXRJZDogaW5wdXRJZCB8fCBpZCArIFwiLWlucHV0XCJcbiAgfSk7XG4gIHJldHVybiBlbGVtZW50SWRzUmVmLmN1cnJlbnQ7XG59IDogZnVuY3Rpb24gdXNlRWxlbWVudElkcyhfcmVmMikge1xuICB2YXIgX3JlZjIkaWQgPSBfcmVmMi5pZCxcbiAgICBpZCA9IF9yZWYyJGlkID09PSB2b2lkIDAgPyBcImRvd25zaGlmdC1cIiArIGdlbmVyYXRlSWQoKSA6IF9yZWYyJGlkLFxuICAgIGxhYmVsSWQgPSBfcmVmMi5sYWJlbElkLFxuICAgIG1lbnVJZCA9IF9yZWYyLm1lbnVJZCxcbiAgICBnZXRJdGVtSWQgPSBfcmVmMi5nZXRJdGVtSWQsXG4gICAgdG9nZ2xlQnV0dG9uSWQgPSBfcmVmMi50b2dnbGVCdXR0b25JZCxcbiAgICBpbnB1dElkID0gX3JlZjIuaW5wdXRJZDtcbiAgdmFyIGVsZW1lbnRJZHNSZWYgPSB1c2VSZWYoe1xuICAgIGxhYmVsSWQ6IGxhYmVsSWQgfHwgaWQgKyBcIi1sYWJlbFwiLFxuICAgIG1lbnVJZDogbWVudUlkIHx8IGlkICsgXCItbWVudVwiLFxuICAgIGdldEl0ZW1JZDogZ2V0SXRlbUlkIHx8IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGlkICsgXCItaXRlbS1cIiArIGluZGV4O1xuICAgIH0sXG4gICAgdG9nZ2xlQnV0dG9uSWQ6IHRvZ2dsZUJ1dHRvbklkIHx8IGlkICsgXCItdG9nZ2xlLWJ1dHRvblwiLFxuICAgIGlucHV0SWQ6IGlucHV0SWQgfHwgaWQgKyBcIi1pbnB1dFwiXG4gIH0pO1xuICByZXR1cm4gZWxlbWVudElkc1JlZi5jdXJyZW50O1xufTtcbmZ1bmN0aW9uIGdldEl0ZW1BbmRJbmRleChpdGVtUHJvcCwgaW5kZXhQcm9wLCBpdGVtcywgZXJyb3JNZXNzYWdlKSB7XG4gIHZhciBpdGVtLCBpbmRleDtcbiAgaWYgKGl0ZW1Qcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5kZXhQcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBpdGVtID0gaXRlbXNbaW5kZXhQcm9wXTtcbiAgICBpbmRleCA9IGluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICBpbmRleCA9IGluZGV4UHJvcCA9PT0gdW5kZWZpbmVkID8gaXRlbXMuaW5kZXhPZihpdGVtUHJvcCkgOiBpbmRleFByb3A7XG4gICAgaXRlbSA9IGl0ZW1Qcm9wO1xuICB9XG4gIHJldHVybiBbaXRlbSwgaW5kZXhdO1xufVxuZnVuY3Rpb24gaXRlbVRvU3RyaW5nKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gPyBTdHJpbmcoaXRlbSkgOiAnJztcbn1cbmZ1bmN0aW9uIGlzQWNjZXB0ZWRDaGFyYWN0ZXJLZXkoa2V5KSB7XG4gIHJldHVybiAvXlxcU3sxfSQvLnRlc3Qoa2V5KTtcbn1cbmZ1bmN0aW9uIGNhcGl0YWxpemVTdHJpbmcoc3RyaW5nKSB7XG4gIHJldHVybiBcIlwiICsgc3RyaW5nLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG5mdW5jdGlvbiB1c2VMYXRlc3RSZWYodmFsKSB7XG4gIHZhciByZWYgPSB1c2VSZWYodmFsKTtcbiAgLy8gdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgXCJjb25jdXJyZW50IG1vZGUgc2FmZVwiIGJlY2F1c2Ugd2UncmUgbWFuaXB1bGF0aW5nXG4gIC8vIHRoZSB2YWx1ZSBkdXJpbmcgcmVuZGVyIChzbyBpdCdzIG5vdCBpZGVtcG90ZW50KS4gSG93ZXZlciwgdGhlIHBsYWNlcyB0aGlzXG4gIC8vIGhvb2sgaXMgdXNlZCBpcyB0byBzdXBwb3J0IG1lbW9pemluZyBjYWxsYmFja3Mgd2hpY2ggd2lsbCBiZSBjYWxsZWRcbiAgLy8gKmR1cmluZyogcmVuZGVyLCBzbyB3ZSBuZWVkIHRoZSBsYXRlc3QgdmFsdWVzICpkdXJpbmcqIHJlbmRlci5cbiAgLy8gSWYgbm90IGZvciB0aGlzLCB0aGVuIHdlJ2QgcHJvYmFibHkgd2FudCB0byB1c2UgdXNlTGF5b3V0RWZmZWN0IGluc3RlYWQuXG4gIHJlZi5jdXJyZW50ID0gdmFsO1xuICByZXR1cm4gcmVmO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjb250cm9sbGVkIHN0YXRlIHVzaW5nIGEgdGhlIHByZXZpb3VzIHN0YXRlLCBwcm9wcyxcbiAqIHR3byByZWR1Y2Vycywgb25lIGZyb20gZG93bnNoaWZ0IGFuZCBhbiBvcHRpb25hbCBvbmUgZnJvbSB0aGUgdXNlci5cbiAqIEFsc28gY2FsbHMgdGhlIG9uQ2hhbmdlIGhhbmRsZXJzIGZvciBzdGF0ZSB2YWx1ZXMgdGhhdCBoYXZlIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUVuaGFuY2VkUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGVSZWYgPSB1c2VSZWYoKTtcbiAgdmFyIGFjdGlvblJlZiA9IHVzZVJlZigpO1xuICB2YXIgZW5oYW5jZWRSZWR1Y2VyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBhY3Rpb25SZWYuY3VycmVudCA9IGFjdGlvbjtcbiAgICBzdGF0ZSA9IGdldFN0YXRlKHN0YXRlLCBhY3Rpb24ucHJvcHMpO1xuICAgIHZhciBjaGFuZ2VzID0gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICB2YXIgbmV3U3RhdGUgPSBhY3Rpb24ucHJvcHMuc3RhdGVSZWR1Y2VyKHN0YXRlLCBfZXh0ZW5kcyh7fSwgYWN0aW9uLCB7XG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzXG4gICAgfSkpO1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfSwgW3JlZHVjZXJdKTtcbiAgdmFyIF91c2VSZWR1Y2VyID0gdXNlUmVkdWNlcihlbmhhbmNlZFJlZHVjZXIsIGluaXRpYWxTdGF0ZSksXG4gICAgc3RhdGUgPSBfdXNlUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VSZWR1Y2VyWzFdO1xuICB2YXIgcHJvcHNSZWYgPSB1c2VMYXRlc3RSZWYocHJvcHMpO1xuICB2YXIgZGlzcGF0Y2hXaXRoUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKF9leHRlbmRzKHtcbiAgICAgIHByb3BzOiBwcm9wc1JlZi5jdXJyZW50XG4gICAgfSwgYWN0aW9uKSk7XG4gIH0sIFtwcm9wc1JlZl0pO1xuICB2YXIgYWN0aW9uID0gYWN0aW9uUmVmLmN1cnJlbnQ7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFjdGlvbiAmJiBwcmV2U3RhdGVSZWYuY3VycmVudCAmJiBwcmV2U3RhdGVSZWYuY3VycmVudCAhPT0gc3RhdGUpIHtcbiAgICAgIGNhbGxPbkNoYW5nZVByb3BzKGFjdGlvbiwgZ2V0U3RhdGUocHJldlN0YXRlUmVmLmN1cnJlbnQsIGFjdGlvbi5wcm9wcyksIHN0YXRlKTtcbiAgICB9XG4gICAgcHJldlN0YXRlUmVmLmN1cnJlbnQgPSBzdGF0ZTtcbiAgfSwgW3N0YXRlLCBwcm9wcywgYWN0aW9uXSk7XG4gIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoV2l0aFByb3BzXTtcbn1cblxuLyoqXG4gKiBXcmFwcyB0aGUgdXNlRW5oYW5jZWRSZWR1Y2VyIGFuZCBhcHBsaWVzIHRoZSBjb250cm9sbGVkIHByb3AgdmFsdWVzIGJlZm9yZVxuICogcmV0dXJuaW5nIHRoZSBuZXcgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRSZWR1Y2VyJDEocmVkdWNlciwgaW5pdGlhbFN0YXRlLCBwcm9wcykge1xuICB2YXIgX3VzZUVuaGFuY2VkUmVkdWNlciA9IHVzZUVuaGFuY2VkUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VFbmhhbmNlZFJlZHVjZXJbMF0sXG4gICAgZGlzcGF0Y2ggPSBfdXNlRW5oYW5jZWRSZWR1Y2VyWzFdO1xuICByZXR1cm4gW2dldFN0YXRlKHN0YXRlLCBwcm9wcyksIGRpc3BhdGNoXTtcbn1cbnZhciBkZWZhdWx0UHJvcHMkMyA9IHtcbiAgaXRlbVRvU3RyaW5nOiBpdGVtVG9TdHJpbmcsXG4gIHN0YXRlUmVkdWNlcjogc3RhdGVSZWR1Y2VyLFxuICBnZXRBMTF5U2VsZWN0aW9uTWVzc2FnZTogZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2UsXG4gIHNjcm9sbEludG9WaWV3OiBzY3JvbGxJbnRvVmlldyxcbiAgZW52aXJvbm1lbnQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IChzc3IpICovXG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8ge30gOiB3aW5kb3dcbn07XG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgcHJvcEtleSwgZGVmYXVsdFN0YXRlVmFsdWVzKSB7XG4gIGlmIChkZWZhdWx0U3RhdGVWYWx1ZXMgPT09IHZvaWQgMCkge1xuICAgIGRlZmF1bHRTdGF0ZVZhbHVlcyA9IGRyb3Bkb3duRGVmYXVsdFN0YXRlVmFsdWVzO1xuICB9XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wc1tcImRlZmF1bHRcIiArIGNhcGl0YWxpemVTdHJpbmcocHJvcEtleSldO1xuICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIHJldHVybiBkZWZhdWx0U3RhdGVWYWx1ZXNbcHJvcEtleV07XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsVmFsdWUkMShwcm9wcywgcHJvcEtleSwgZGVmYXVsdFN0YXRlVmFsdWVzKSB7XG4gIGlmIChkZWZhdWx0U3RhdGVWYWx1ZXMgPT09IHZvaWQgMCkge1xuICAgIGRlZmF1bHRTdGF0ZVZhbHVlcyA9IGRyb3Bkb3duRGVmYXVsdFN0YXRlVmFsdWVzO1xuICB9XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHNbXCJpbml0aWFsXCIgKyBjYXBpdGFsaXplU3RyaW5nKHByb3BLZXkpXTtcbiAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgfVxuICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsIHByb3BLZXksIGRlZmF1bHRTdGF0ZVZhbHVlcyk7XG59XG5mdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUkMihwcm9wcykge1xuICB2YXIgc2VsZWN0ZWRJdGVtID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgdmFyIGlzT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gIHZhciBoaWdobGlnaHRlZEluZGV4ID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdoaWdobGlnaHRlZEluZGV4Jyk7XG4gIHZhciBpbnB1dFZhbHVlID0gZ2V0SW5pdGlhbFZhbHVlJDEocHJvcHMsICdpbnB1dFZhbHVlJyk7XG4gIHJldHVybiB7XG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCA8IDAgJiYgc2VsZWN0ZWRJdGVtICYmIGlzT3BlbiA/IHByb3BzLml0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRJdGVtKSA6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgaXNPcGVuOiBpc09wZW4sXG4gICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIG9mZnNldCkge1xuICB2YXIgaXRlbXMgPSBwcm9wcy5pdGVtcyxcbiAgICBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCA9IHByb3BzLmluaXRpYWxIaWdobGlnaHRlZEluZGV4LFxuICAgIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4ID0gcHJvcHMuZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXg7XG4gIHZhciBzZWxlY3RlZEl0ZW0gPSBzdGF0ZS5zZWxlY3RlZEl0ZW0sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCA9IHN0YXRlLmhpZ2hsaWdodGVkSW5kZXg7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCB3aWxsIGdpdmUgdmFsdWUgdG8gaGlnaGxpZ2h0ZWRJbmRleCBvbiBpbml0aWFsIHN0YXRlIG9ubHkuXG4gIGlmIChpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIGhpZ2hsaWdodGVkSW5kZXggPT09IGluaXRpYWxIaWdobGlnaHRlZEluZGV4KSB7XG4gICAgcmV0dXJuIGluaXRpYWxIaWdobGlnaHRlZEluZGV4O1xuICB9XG4gIGlmIChkZWZhdWx0SGlnaGxpZ2h0ZWRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4O1xuICB9XG4gIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbXMuaW5kZXhPZihzZWxlY3RlZEl0ZW0pO1xuICB9XG4gIGlmIChvZmZzZXQgPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIG9mZnNldCA8IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMDtcbn1cblxuLyoqXG4gKiBSZXVzZSB0aGUgbW92ZW1lbnQgdHJhY2tpbmcgb2YgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzT3BlbiBXaGV0aGVyIHRoZSBkcm9wZG93biBpcyBvcGVuIG9yIG5vdC5cbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZG93bnNoaWZ0RWxlbWVudFJlZnMgRG93bnNoaWZ0IGVsZW1lbnQgcmVmcyB0byB0cmFjayBtb3ZlbWVudCAodG9nZ2xlQnV0dG9uLCBtZW51IGV0Yy4pXG4gKiBAcGFyYW0ge09iamVjdH0gZW52aXJvbm1lbnQgRW52aXJvbm1lbnQgd2hlcmUgY29tcG9uZW50L2hvb2sgZXhpc3RzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlQmx1ciBIYW5kbGVyIG9uIGJsdXIgZnJvbSBtb3VzZSBvciB0b3VjaC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlZiBjb250YWluaW5nIHdoZXRoZXIgbW91c2VEb3duIG9yIHRvdWNoTW92ZSBldmVudCBpcyBoYXBwZW5pbmdcbiAqL1xuZnVuY3Rpb24gdXNlTW91c2VBbmRUb3VjaFRyYWNrZXIoaXNPcGVuLCBkb3duc2hpZnRFbGVtZW50UmVmcywgZW52aXJvbm1lbnQsIGhhbmRsZUJsdXIpIHtcbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZVJlZih7XG4gICAgaXNNb3VzZURvd246IGZhbHNlLFxuICAgIGlzVG91Y2hNb3ZlOiBmYWxzZVxuICB9KTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoKGVudmlyb25tZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIHNhbWUgc3RyYXRlZ3kgZm9yIGNoZWNraW5nIGlmIGEgY2xpY2sgb2NjdXJyZWQgaW5zaWRlIG9yIG91dHNpZGUgZG93bnNoaWZ0XG4gICAgLy8gYXMgaW4gZG93bnNoaWZ0LmpzLlxuICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIH07XG4gICAgdmFyIG9uTW91c2VVcCA9IGZ1bmN0aW9uIG9uTW91c2VVcChldmVudCkge1xuICAgICAgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGlmIChpc09wZW4gJiYgIXRhcmdldFdpdGhpbkRvd25zaGlmdChldmVudC50YXJnZXQsIGRvd25zaGlmdEVsZW1lbnRSZWZzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHJldHVybiByZWYuY3VycmVudDtcbiAgICAgIH0pLCBlbnZpcm9ubWVudCkpIHtcbiAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIG9uVG91Y2hTdGFydCgpIHtcbiAgICAgIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzVG91Y2hNb3ZlID0gZmFsc2U7XG4gICAgfTtcbiAgICB2YXIgb25Ub3VjaE1vdmUgPSBmdW5jdGlvbiBvblRvdWNoTW92ZSgpIHtcbiAgICAgIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzVG91Y2hNb3ZlID0gdHJ1ZTtcbiAgICB9O1xuICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gb25Ub3VjaEVuZChldmVudCkge1xuICAgICAgaWYgKGlzT3BlbiAmJiAhbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLmN1cnJlbnQuaXNUb3VjaE1vdmUgJiYgIXRhcmdldFdpdGhpbkRvd25zaGlmdChldmVudC50YXJnZXQsIGRvd25zaGlmdEVsZW1lbnRSZWZzLm1hcChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHJldHVybiByZWYuY3VycmVudDtcbiAgICAgIH0pLCBlbnZpcm9ubWVudCwgZmFsc2UpKSB7XG4gICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGVudmlyb25tZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICBlbnZpcm9ubWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBvblRvdWNoTW92ZSk7XG4gICAgZW52aXJvbm1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgZW52aXJvbm1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBlbnZpcm9ubWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG9uVG91Y2hNb3ZlKTtcbiAgICAgIGVudmlyb25tZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtpc09wZW4sIGVudmlyb25tZW50XSk7XG4gIHJldHVybiBtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWY7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlciA9IGZ1bmN0aW9uIHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlcigpIHtcbiAgcmV0dXJuIG5vb3A7XG59O1xuLyoqXG4gKiBDdXN0b20gaG9vayB0aGF0IGNoZWNrcyBpZiBnZXR0ZXIgcHJvcHMgYXJlIGNhbGxlZCBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtICB7Li4uYW55fSBwcm9wS2V5cyBHZXR0ZXIgcHJvcCBuYW1lcyB0byBiZSBoYW5kbGVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBTZXR0ZXIgZnVuY3Rpb24gY2FsbGVkIGluc2lkZSBnZXR0ZXIgcHJvcHMgdG8gc2V0IGNhbGwgaW5mb3JtYXRpb24uXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIgPSBmdW5jdGlvbiB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIoKSB7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wS2V5cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHByb3BLZXlzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICB2YXIgZ2V0dGVyUHJvcHNDYWxsZWRSZWYgPSB1c2VSZWYocHJvcEtleXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3BLZXkpIHtcbiAgICAgIGFjY1twcm9wS2V5XSA9IHt9O1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSkpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBPYmplY3Qua2V5cyhnZXR0ZXJQcm9wc0NhbGxlZFJlZi5jdXJyZW50KS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wS2V5KSB7XG4gICAgICAgIHZhciBwcm9wQ2FsbEluZm8gPSBnZXR0ZXJQcm9wc0NhbGxlZFJlZi5jdXJyZW50W3Byb3BLZXldO1xuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGlmICghT2JqZWN0LmtleXMocHJvcENhbGxJbmZvKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBZb3UgZm9yZ290IHRvIGNhbGwgdGhlIFwiICsgcHJvcEtleSArIFwiIGdldHRlciBmdW5jdGlvbiBvbiB5b3VyIGNvbXBvbmVudCAvIGVsZW1lbnQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VwcHJlc3NSZWZFcnJvciA9IHByb3BDYWxsSW5mby5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgICAgIHJlZktleSA9IHByb3BDYWxsSW5mby5yZWZLZXksXG4gICAgICAgICAgZWxlbWVudFJlZiA9IHByb3BDYWxsSW5mby5lbGVtZW50UmVmO1xuICAgICAgICBpZiAoKCFlbGVtZW50UmVmIHx8ICFlbGVtZW50UmVmLmN1cnJlbnQpICYmICFzdXBwcmVzc1JlZkVycm9yKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZG93bnNoaWZ0OiBUaGUgcmVmIHByb3AgXFxcIlwiICsgcmVmS2V5ICsgXCJcXFwiIGZyb20gXCIgKyBwcm9wS2V5ICsgXCIgd2FzIG5vdCBhcHBsaWVkIGNvcnJlY3RseSBvbiB5b3VyIGVsZW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB2YXIgc2V0R2V0dGVyUHJvcENhbGxJbmZvID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb3BLZXksIHN1cHByZXNzUmVmRXJyb3IsIHJlZktleSwgZWxlbWVudFJlZikge1xuICAgICAgZ2V0dGVyUHJvcHNDYWxsZWRSZWYuY3VycmVudFtwcm9wS2V5XSA9IHtcbiAgICAgICAgc3VwcHJlc3NSZWZFcnJvcjogc3VwcHJlc3NSZWZFcnJvcixcbiAgICAgICAgcmVmS2V5OiByZWZLZXksXG4gICAgICAgIGVsZW1lbnRSZWY6IGVsZW1lbnRSZWZcbiAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBzZXRHZXR0ZXJQcm9wQ2FsbEluZm87XG4gIH07XG59XG5mdW5jdGlvbiB1c2VBMTF5TWVzc2FnZVNldHRlcihnZXRBMTF5TWVzc2FnZSwgZGVwZW5kZW5jeUFycmF5LCBfcmVmMykge1xuICB2YXIgaXNJbml0aWFsTW91bnQgPSBfcmVmMy5pc0luaXRpYWxNb3VudCxcbiAgICBoaWdobGlnaHRlZEluZGV4ID0gX3JlZjMuaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpdGVtcyA9IF9yZWYzLml0ZW1zLFxuICAgIGVudmlyb25tZW50ID0gX3JlZjMuZW52aXJvbm1lbnQsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYzLCBfZXhjbHVkZWQkMyk7XG4gIC8vIFNldHMgYTExeSBzdGF0dXMgbWVzc2FnZSBvbiBjaGFuZ2VzIGluIHN0YXRlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChpc0luaXRpYWxNb3VudCB8fCBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGVBMTF5U3RhdHVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRBMTF5TWVzc2FnZShfZXh0ZW5kcyh7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgICAgIGhpZ2hsaWdodGVkSXRlbTogaXRlbXNbaGlnaGxpZ2h0ZWRJbmRleF0sXG4gICAgICAgIHJlc3VsdENvdW50OiBpdGVtcy5sZW5ndGhcbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9LCBlbnZpcm9ubWVudC5kb2N1bWVudCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBkZXBlbmRlbmN5QXJyYXkpO1xufVxuZnVuY3Rpb24gdXNlU2Nyb2xsSW50b1ZpZXcoX3JlZjQpIHtcbiAgdmFyIGhpZ2hsaWdodGVkSW5kZXggPSBfcmVmNC5oaWdobGlnaHRlZEluZGV4LFxuICAgIGlzT3BlbiA9IF9yZWY0LmlzT3BlbixcbiAgICBpdGVtUmVmcyA9IF9yZWY0Lml0ZW1SZWZzLFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4ID0gX3JlZjQuZ2V0SXRlbU5vZGVGcm9tSW5kZXgsXG4gICAgbWVudUVsZW1lbnQgPSBfcmVmNC5tZW51RWxlbWVudCxcbiAgICBzY3JvbGxJbnRvVmlld1Byb3AgPSBfcmVmNC5zY3JvbGxJbnRvVmlldztcbiAgLy8gdXNlZCBub3QgdG8gc2Nyb2xsIG9uIGhpZ2hsaWdodCBieSBtb3VzZS5cbiAgdmFyIHNob3VsZFNjcm9sbFJlZiA9IHVzZVJlZih0cnVlKTtcbiAgLy8gU2Nyb2xsIG9uIGhpZ2hsaWdodGVkIGl0ZW0gaWYgY2hhbmdlIGNvbWVzIGZyb20ga2V5Ym9hcmQuXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChoaWdobGlnaHRlZEluZGV4IDwgMCB8fCAhaXNPcGVuIHx8ICFPYmplY3Qua2V5cyhpdGVtUmVmcy5jdXJyZW50KS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNob3VsZFNjcm9sbFJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2hvdWxkU2Nyb2xsUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY3JvbGxJbnRvVmlld1Byb3AoZ2V0SXRlbU5vZGVGcm9tSW5kZXgoaGlnaGxpZ2h0ZWRJbmRleCksIG1lbnVFbGVtZW50KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbaGlnaGxpZ2h0ZWRJbmRleF0pO1xuICByZXR1cm4gc2hvdWxkU2Nyb2xsUmVmO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHVzZUNvbnRyb2xQcm9wc1ZhbGlkYXRvciA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yID0gZnVuY3Rpb24gdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yKF9yZWY1KSB7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50ID0gX3JlZjUuaXNJbml0aWFsTW91bnQsXG4gICAgICBwcm9wcyA9IF9yZWY1LnByb3BzLFxuICAgICAgc3RhdGUgPSBfcmVmNS5zdGF0ZTtcbiAgICAvLyB1c2VkIGZvciBjaGVja2luZyB3aGVuIHByb3BzIGFyZSBtb3ZpbmcgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZC5cbiAgICB2YXIgcHJldlByb3BzUmVmID0gdXNlUmVmKHByb3BzKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlzSW5pdGlhbE1vdW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQ29udHJvbGxlZFVuY2hhbmdlZChzdGF0ZSwgcHJldlByb3BzUmVmLmN1cnJlbnQsIHByb3BzKTtcbiAgICAgIHByZXZQcm9wc1JlZi5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3N0YXRlLCBwcm9wcywgaXNJbml0aWFsTW91bnRdKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHNlbGVjdGlvbiBvbiBFbnRlciAvIEFsdCArIEFycm93VXAuIENsb3NlcyB0aGUgbWVudSBhbmQgcmVzZXRzIHRoZSBoaWdobGlnaHRlZCBpbmRleCwgdW5sZXNzIHRoZXJlIGlzIGEgaGlnaGxpZ2h0ZWQuXG4gKiBJbiB0aGF0IGNhc2UsIHNlbGVjdHMgdGhlIGl0ZW0gYW5kIHJlc2V0cyB0byBkZWZhdWx0cyBmb3Igb3BlbiBzdGF0ZSBhbmQgaGlnaGxpZ2h0ZWQgaWRleC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBUaGUgdXNlQ29tYm9ib3ggcHJvcHMuXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaGxpZ2h0ZWRJbmRleCBUaGUgaW5kZXggZnJvbSB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlucHV0VmFsdWUgQWxzbyByZXR1cm4gdGhlIGlucHV0IHZhbHVlIGZvciBzdGF0ZS5cbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGZvciB0aGUgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldENoYW5nZXNPblNlbGVjdGlvbihwcm9wcywgaGlnaGxpZ2h0ZWRJbmRleCwgaW5wdXRWYWx1ZSkge1xuICB2YXIgX3Byb3BzJGl0ZW1zO1xuICBpZiAoaW5wdXRWYWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5wdXRWYWx1ZSA9IHRydWU7XG4gIH1cbiAgdmFyIHNob3VsZFNlbGVjdCA9ICgoX3Byb3BzJGl0ZW1zID0gcHJvcHMuaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkaXRlbXMubGVuZ3RoKSAmJiBoaWdobGlnaHRlZEluZGV4ID49IDA7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBoaWdobGlnaHRlZEluZGV4OiAtMVxuICB9LCBzaG91bGRTZWxlY3QgJiYgX2V4dGVuZHMoe1xuICAgIHNlbGVjdGVkSXRlbTogcHJvcHMuaXRlbXNbaGlnaGxpZ2h0ZWRJbmRleF0sXG4gICAgaXNPcGVuOiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgJ2lzT3BlbicpLFxuICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpXG4gIH0sIGlucHV0VmFsdWUgJiYge1xuICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhwcm9wcy5pdGVtc1toaWdobGlnaHRlZEluZGV4XSlcbiAgfSkpO1xufVxuXG4vLyBTaGFyZWQgYmV0d2VlbiBhbGwgZXhwb3J0cy5cbnZhciBjb21tb25Qcm9wVHlwZXMgPSB7XG4gIGVudmlyb25tZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFkZEV2ZW50TGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBkb2N1bWVudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNyZWF0ZUVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBnZXRFbGVtZW50QnlJZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGFjdGl2ZUVsZW1lbnQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICAgIGJvZHk6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgTm9kZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICB9KSxcbiAgaXRlbVRvU3RyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgc3RhdGVSZWR1Y2VyOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuLy8gU2hhcmVkIGJldHdlZW4gdXNlU2VsZWN0LCB1c2VDb21ib2JveCwgRG93bnNoaWZ0LlxudmFyIGNvbW1vbkRyb3Bkb3duUHJvcFR5cGVzID0gX2V4dGVuZHMoe30sIGNvbW1vblByb3BUeXBlcywge1xuICBnZXRBMTF5U3RhdHVzTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGhpZ2hsaWdodGVkSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRlZmF1bHRIaWdobGlnaHRlZEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpbml0aWFsSGlnaGxpZ2h0ZWRJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGVmYXVsdElzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGluaXRpYWxJc09wZW46IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGluaXRpYWxTZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGRlZmF1bHRTZWxlY3RlZEl0ZW06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYWJlbElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtZW51SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGdldEl0ZW1JZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRvZ2dsZUJ1dHRvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvblNlbGVjdGVkSXRlbUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSGlnaGxpZ2h0ZWRJbmRleENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbklzT3BlbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjcm9sbEludG9WaWV3OiBQcm9wVHlwZXMuZnVuY1xufSk7XG5cbmZ1bmN0aW9uIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcykge1xuICB2YXIgdHlwZSA9IGFjdGlvbi50eXBlLFxuICAgIHByb3BzID0gYWN0aW9uLnByb3BzO1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLkl0ZW1Nb3VzZU1vdmU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBhY3Rpb24uZGlzYWJsZWQgPyAtMSA6IGFjdGlvbi5pbmRleFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5NZW51TW91c2VMZWF2ZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLlRvZ2dsZUJ1dHRvbkNsaWNrOlxuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5GdW5jdGlvblRvZ2dsZU1lbnU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46ICFzdGF0ZS5pc09wZW4sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHN0YXRlLmlzT3BlbiA/IC0xIDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIDApXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBzdGF0ZUNoYW5nZVR5cGVzLkZ1bmN0aW9uT3Blbk1lbnU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAwKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugc3RhdGVDaGFuZ2VUeXBlcy5GdW5jdGlvbkNsb3NlTWVudTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGlzT3BlbjogZmFsc2VcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogYWN0aW9uLmhpZ2hsaWdodGVkSW5kZXhcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25TZXRJbnB1dFZhbHVlOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHN0YXRlQ2hhbmdlVHlwZXMuRnVuY3Rpb25SZXNldDpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIHNlbGVjdGVkSXRlbTogZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsICdzZWxlY3RlZEl0ZW0nKSxcbiAgICAgICAgaW5wdXRWYWx1ZTogZ2V0RGVmYXVsdFZhbHVlJDEocHJvcHMsICdpbnB1dFZhbHVlJylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIGNhbGxlZCB3aXRob3V0IHByb3BlciBhY3Rpb24gdHlwZS4nKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG5mdW5jdGlvbiBnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleShfYSkge1xuICAgIHZhciBrZXlzU29GYXIgPSBfYS5rZXlzU29GYXIsIGhpZ2hsaWdodGVkSW5kZXggPSBfYS5oaWdobGlnaHRlZEluZGV4LCBpdGVtcyA9IF9hLml0ZW1zLCBpdGVtVG9TdHJpbmcgPSBfYS5pdGVtVG9TdHJpbmcsIGlzSXRlbURpc2FibGVkID0gX2EuaXNJdGVtRGlzYWJsZWQ7XG4gICAgdmFyIGxvd2VyQ2FzZWRLZXlzU29GYXIgPSBrZXlzU29GYXIudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNlYXJjaCBxdWVyeSBpbiBwcm9ncmVzcywgd2UgYWxzbyBjb25zaWRlciB0aGUgY3VycmVudCBoaWdobGlnaHRlZCBpdGVtLlxuICAgICAgICB2YXIgb2Zmc2V0SW5kZXggPSAoaW5kZXggKyBoaWdobGlnaHRlZEluZGV4ICsgKGtleXNTb0Zhci5sZW5ndGggPCAyID8gMSA6IDApKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tvZmZzZXRJbmRleF07XG4gICAgICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGl0ZW1Ub1N0cmluZyhpdGVtKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobG93ZXJDYXNlZEtleXNTb0ZhcikgJiZcbiAgICAgICAgICAgICFpc0l0ZW1EaXNhYmxlZChpdGVtLCBvZmZzZXRJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXRJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGlnaGxpZ2h0ZWRJbmRleDtcbn1cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbnZhciBwcm9wVHlwZXMkMiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25Ecm9wZG93blByb3BUeXBlcyksIHsgaXRlbXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLCBpc0l0ZW1EaXNhYmxlZDogUHJvcFR5cGVzLmZ1bmMsIGdldEExMXlTZWxlY3Rpb25NZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyB9KTtcbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igc3RhdHVzIG1lc3NhZ2UuIE9ubHkgYWRkZWQgd2hlbiBtZW51IGlzIG9wZW4uXG4gKiBXaWxsIHNwZWNpZnQgaWYgdGhlcmUgYXJlIHJlc3VsdHMgaW4gdGhlIGxpc3QsIGFuZCBpZiBzbywgaG93IG1hbnksXG4gKiBhbmQgd2hhdCBrZXlzIGFyZSByZWxldmFudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW0gdGhlIGRvd25zaGlmdCBzdGF0ZSBhbmQgb3RoZXIgcmVsZXZhbnQgcHJvcGVydGllc1xuICogQHJldHVybiB7U3RyaW5nfSB0aGUgYTExeSBzdGF0dXMgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRBMTF5U3RhdHVzTWVzc2FnZShfYSkge1xuICAgIHZhciBpc09wZW4gPSBfYS5pc09wZW4sIHJlc3VsdENvdW50ID0gX2EucmVzdWx0Q291bnQsIHByZXZpb3VzUmVzdWx0Q291bnQgPSBfYS5wcmV2aW91c1Jlc3VsdENvdW50O1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKCFyZXN1bHRDb3VudCkge1xuICAgICAgICByZXR1cm4gJ05vIHJlc3VsdHMgYXJlIGF2YWlsYWJsZS4nO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Q291bnQgIT09IHByZXZpb3VzUmVzdWx0Q291bnQpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdENvdW50LCBcIiByZXN1bHRcIikuY29uY2F0KHJlc3VsdENvdW50ID09PSAxID8gJyBpcycgOiAncyBhcmUnLCBcIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiBQcmVzcyBFbnRlciBvciBTcGFjZSBCYXIga2V5cyB0byBzZWxlY3QuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG52YXIgZGVmYXVsdFByb3BzJDIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdFByb3BzJDMpLCB7IGdldEExMXlTdGF0dXNNZXNzYWdlOiBnZXRBMTF5U3RhdHVzTWVzc2FnZSwgaXNJdGVtRGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gfSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlUHJvcFR5cGVzJDIgPSBub29wO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMkMiA9IGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsZXIpIHtcbiAgICAgICAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcyQyLCBvcHRpb25zLCAncHJvcCcsIGNhbGxlci5uYW1lKTtcbiAgICB9O1xufVxuXG52YXIgVG9nZ2xlQnV0dG9uQ2xpY2skMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9jbGlja19fJyA6IDA7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93RG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX2Fycm93X2Rvd25fXycgOiAxO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25BcnJvd1VwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25fYXJyb3dfdXBfXycgOiAyO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fa2V5ZG93bl9jaGFyYWN0ZXJfXycgOiAzO1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fa2V5ZG93bl9lc2NhcGVfXycgOiA0O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25faG9tZV9fJyA6IDU7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkVuZCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX2VuZF9fJyA6IDY7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93bkVudGVyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2tleWRvd25fZW50ZXJfXycgOiA3O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25TcGFjZUJ1dHRvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3NwYWNlX2J1dHRvbl9fJyA6IDg7XG52YXIgVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3BhZ2VfdXBfXycgOiA5O1xudmFyIFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3RvZ2dsZWJ1dHRvbl9rZXlkb3duX3BhZ2VfZG93bl9fJyA6IDEwO1xudmFyIFRvZ2dsZUJ1dHRvbkJsdXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX190b2dnbGVidXR0b25fYmx1cl9fJyA6IDExO1xudmFyIE1lbnVNb3VzZUxlYXZlJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19tZW51X21vdXNlX2xlYXZlX18nIDogMTI7XG52YXIgSXRlbU1vdXNlTW92ZSQxID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9tb3VzZV9tb3ZlX18nIDogMTM7XG52YXIgSXRlbUNsaWNrJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pdGVtX2NsaWNrX18nIDogMTQ7XG52YXIgRnVuY3Rpb25Ub2dnbGVNZW51JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl90b2dnbGVfbWVudV9fJyA6IDE1O1xudmFyIEZ1bmN0aW9uT3Blbk1lbnUkMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX29wZW5fbWVudV9fJyA6IDE2O1xudmFyIEZ1bmN0aW9uQ2xvc2VNZW51JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9jbG9zZV9tZW51X18nIDogMTc7XG52YXIgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaGlnaGxpZ2h0ZWRfaW5kZXhfXycgOiAxODtcbnZhciBGdW5jdGlvblNlbGVjdEl0ZW0kMSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX3NlbGVjdF9pdGVtX18nIDogMTk7XG52YXIgRnVuY3Rpb25TZXRJbnB1dFZhbHVlJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaW5wdXRfdmFsdWVfXycgOiAyMDtcbnZhciBGdW5jdGlvblJlc2V0JDIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZXNldF9fJyA6IDIxO1xuXG52YXIgc3RhdGVDaGFuZ2VUeXBlcyQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIFRvZ2dsZUJ1dHRvbkNsaWNrOiBUb2dnbGVCdXR0b25DbGljayQxLFxuICBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duOiBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duLFxuICBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dVcDogVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXAsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXI6IFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGU6IFRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lOiBUb2dnbGVCdXR0b25LZXlEb3duSG9tZSxcbiAgVG9nZ2xlQnV0dG9uS2V5RG93bkVuZDogVG9nZ2xlQnV0dG9uS2V5RG93bkVuZCxcbiAgVG9nZ2xlQnV0dG9uS2V5RG93bkVudGVyOiBUb2dnbGVCdXR0b25LZXlEb3duRW50ZXIsXG4gIFRvZ2dsZUJ1dHRvbktleURvd25TcGFjZUJ1dHRvbjogVG9nZ2xlQnV0dG9uS2V5RG93blNwYWNlQnV0dG9uLFxuICBUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwOiBUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwLFxuICBUb2dnbGVCdXR0b25LZXlEb3duUGFnZURvd246IFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93bixcbiAgVG9nZ2xlQnV0dG9uQmx1cjogVG9nZ2xlQnV0dG9uQmx1cixcbiAgTWVudU1vdXNlTGVhdmU6IE1lbnVNb3VzZUxlYXZlJDEsXG4gIEl0ZW1Nb3VzZU1vdmU6IEl0ZW1Nb3VzZU1vdmUkMSxcbiAgSXRlbUNsaWNrOiBJdGVtQ2xpY2skMSxcbiAgRnVuY3Rpb25Ub2dnbGVNZW51OiBGdW5jdGlvblRvZ2dsZU1lbnUkMSxcbiAgRnVuY3Rpb25PcGVuTWVudTogRnVuY3Rpb25PcGVuTWVudSQxLFxuICBGdW5jdGlvbkNsb3NlTWVudTogRnVuY3Rpb25DbG9zZU1lbnUkMSxcbiAgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OiBGdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXgkMSxcbiAgRnVuY3Rpb25TZWxlY3RJdGVtOiBGdW5jdGlvblNlbGVjdEl0ZW0kMSxcbiAgRnVuY3Rpb25TZXRJbnB1dFZhbHVlOiBGdW5jdGlvblNldElucHV0VmFsdWUkMSxcbiAgRnVuY3Rpb25SZXNldDogRnVuY3Rpb25SZXNldCQyXG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZnVuY3Rpb24gZG93bnNoaWZ0U2VsZWN0UmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHZhciBfcHJvcHMkaXRlbXM7XG4gIHZhciB0eXBlID0gYWN0aW9uLnR5cGUsXG4gICAgcHJvcHMgPSBhY3Rpb24ucHJvcHMsXG4gICAgYWx0S2V5ID0gYWN0aW9uLmFsdEtleTtcbiAgdmFyIGNoYW5nZXM7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgSXRlbUNsaWNrJDE6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW2FjdGlvbi5pbmRleF1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXI6XG4gICAgICB7XG4gICAgICAgIHZhciBsb3dlcmNhc2VkS2V5ID0gYWN0aW9uLmtleTtcbiAgICAgICAgdmFyIGlucHV0VmFsdWUgPSBcIlwiICsgc3RhdGUuaW5wdXRWYWx1ZSArIGxvd2VyY2FzZWRLZXk7XG4gICAgICAgIHZhciBwcmV2SGlnaGxpZ2h0ZWRJbmRleCA9ICFzdGF0ZS5pc09wZW4gJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID8gcHJvcHMuaXRlbXMuaW5kZXhPZihzdGF0ZS5zZWxlY3RlZEl0ZW0pIDogc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkSW5kZXggPSBnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleSh7XG4gICAgICAgICAga2V5c1NvRmFyOiBpbnB1dFZhbHVlLFxuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHByZXZIaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGl0ZW1zOiBwcm9wcy5pdGVtcyxcbiAgICAgICAgICBpdGVtVG9TdHJpbmc6IHByb3BzLml0ZW1Ub1N0cmluZyxcbiAgICAgICAgICBpc0l0ZW1EaXNhYmxlZDogcHJvcHMuaXNJdGVtRGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBoaWdobGlnaHRlZEluZGV4LFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duQXJyb3dEb3duOlxuICAgICAge1xuICAgICAgICB2YXIgX2hpZ2hsaWdodGVkSW5kZXggPSBzdGF0ZS5pc09wZW4gPyBnZXRIaWdobGlnaHRlZEluZGV4KHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsIDEsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZCkgOiBhbHRLZXkgJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID09IG51bGwgPyAtMSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAxKTtcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBfaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICAgICAgICBpc09wZW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXA6XG4gICAgICBpZiAoc3RhdGUuaXNPcGVuICYmIGFsdEtleSkge1xuICAgICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX2hpZ2hsaWdodGVkSW5kZXgyID0gc3RhdGUuaXNPcGVuID8gZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAtMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAtMSk7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogX2hpZ2hsaWdodGVkSW5kZXgyLFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gb25seSB0cmlnZ2VyZWQgd2hlbiBtZW51IGlzIG9wZW4uXG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duRW50ZXI6XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b246XG4gICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCBmYWxzZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25Ib21lOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0Tm9uRGlzYWJsZWRJbmRleCgwLCBmYWxzZSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKSxcbiAgICAgICAgaXNPcGVuOiB0cnVlXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25LZXlEb3duRW5kOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0Tm9uRGlzYWJsZWRJbmRleChwcm9wcy5pdGVtcy5sZW5ndGggLSAxLCB0cnVlLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQpLFxuICAgICAgICBpc09wZW46IHRydWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRvZ2dsZUJ1dHRvbktleURvd25QYWdlVXA6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXRIaWdobGlnaHRlZEluZGV4KHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsIC0xMCwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VEb3duOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAxMCwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVG9nZ2xlQnV0dG9uS2V5RG93bkVzY2FwZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUb2dnbGVCdXR0b25CbHVyOlxuICAgICAgY2hhbmdlcyA9IF9leHRlbmRzKHtcbiAgICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogLTFcbiAgICAgIH0sIHN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPj0gMCAmJiAoKF9wcm9wcyRpdGVtcyA9IHByb3BzLml0ZW1zKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJGl0ZW1zLmxlbmd0aCkgJiYge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW3N0YXRlLmhpZ2hsaWdodGVkSW5kZXhdXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRnVuY3Rpb25TZWxlY3RJdGVtJDE6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGFjdGlvbi5zZWxlY3RlZEl0ZW1cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcyQyKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG52YXIgX2V4Y2x1ZGVkJDIgPSBbXCJvbk1vdXNlTGVhdmVcIiwgXCJyZWZLZXlcIiwgXCJvbktleURvd25cIiwgXCJvbkJsdXJcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMiA9IFtcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwib25LZXlEb3duXCIsIFwicmVmS2V5XCIsIFwicmVmXCJdLFxuICBfZXhjbHVkZWQzJDEgPSBbXCJpdGVtXCIsIFwiaW5kZXhcIiwgXCJvbk1vdXNlTW92ZVwiLCBcIm9uQ2xpY2tcIiwgXCJvblByZXNzXCIsIFwicmVmS2V5XCIsIFwiZGlzYWJsZWRcIiwgXCJyZWZcIl07XG51c2VTZWxlY3Quc3RhdGVDaGFuZ2VUeXBlcyA9IHN0YXRlQ2hhbmdlVHlwZXMkMjtcbmZ1bmN0aW9uIHVzZVNlbGVjdCh1c2VyUHJvcHMpIHtcbiAgaWYgKHVzZXJQcm9wcyA9PT0gdm9pZCAwKSB7XG4gICAgdXNlclByb3BzID0ge307XG4gIH1cbiAgdmFsaWRhdGVQcm9wVHlwZXMkMih1c2VyUHJvcHMsIHVzZVNlbGVjdCk7XG4gIC8vIFByb3BzIGRlZmF1bHRzIGFuZCBkZXN0cnVjdHVyaW5nLlxuICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFByb3BzJDIsIHVzZXJQcm9wcyk7XG4gIHZhciBpdGVtcyA9IHByb3BzLml0ZW1zLFxuICAgIHNjcm9sbEludG9WaWV3ID0gcHJvcHMuc2Nyb2xsSW50b1ZpZXcsXG4gICAgZW52aXJvbm1lbnQgPSBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmcgPSBwcm9wcy5pdGVtVG9TdHJpbmcsXG4gICAgZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5U2VsZWN0aW9uTWVzc2FnZSxcbiAgICBnZXRBMTF5U3RhdHVzTWVzc2FnZSA9IHByb3BzLmdldEExMXlTdGF0dXNNZXNzYWdlO1xuICAvLyBJbml0aWFsIHN0YXRlIGRlcGVuZGluZyBvbiBjb250cm9sbGVkIHByb3BzLlxuICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlJDIocHJvcHMpO1xuICB2YXIgX3VzZUNvbnRyb2xsZWRSZWR1Y2VyID0gdXNlQ29udHJvbGxlZFJlZHVjZXIkMShkb3duc2hpZnRTZWxlY3RSZWR1Y2VyLCBpbml0aWFsU3RhdGUsIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VDb250cm9sbGVkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VDb250cm9sbGVkUmVkdWNlclsxXTtcbiAgdmFyIGlzT3BlbiA9IHN0YXRlLmlzT3BlbixcbiAgICBoaWdobGlnaHRlZEluZGV4ID0gc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBzZWxlY3RlZEl0ZW0gPSBzdGF0ZS5zZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZSA9IHN0YXRlLmlucHV0VmFsdWU7XG5cbiAgLy8gRWxlbWVudCBlZnMuXG4gIHZhciB0b2dnbGVCdXR0b25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBtZW51UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgaXRlbVJlZnMgPSB1c2VSZWYoe30pO1xuICAvLyB1c2VkIHRvIGtlZXAgdGhlIGlucHV0VmFsdWUgY2xlYXJUaW1lb3V0IG9iamVjdCBiZXR3ZWVuIHJlbmRlcnMuXG4gIHZhciBjbGVhclRpbWVvdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gIC8vIHByZXZlbnQgaWQgcmUtZ2VuZXJhdGlvbiBiZXR3ZWVuIHJlbmRlcnMuXG4gIHZhciBlbGVtZW50SWRzID0gdXNlRWxlbWVudElkcyhwcm9wcyk7XG4gIC8vIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBpdGVtcyB3ZSBoYWQgb24gcHJldmlvdXMgY3ljbGUuXG4gIHZhciBwcmV2aW91c1Jlc3VsdENvdW50UmVmID0gdXNlUmVmKCk7XG4gIHZhciBpc0luaXRpYWxNb3VudFJlZiA9IHVzZVJlZih0cnVlKTtcbiAgLy8gdXRpbGl0eSBjYWxsYmFjayB0byBnZXQgaXRlbSBlbGVtZW50LlxuICB2YXIgbGF0ZXN0ID0gdXNlTGF0ZXN0UmVmKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgcHJvcHM6IHByb3BzXG4gIH0pO1xuXG4gIC8vIFNvbWUgdXRpbHMuXG4gIHZhciBnZXRJdGVtTm9kZUZyb21JbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV07XG4gIH0sIFtlbGVtZW50SWRzXSk7XG5cbiAgLy8gRWZmZWN0cy5cbiAgLy8gU2V0cyBhMTF5IHN0YXR1cyBtZXNzYWdlIG9uIGNoYW5nZXMgaW4gc3RhdGUuXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTdGF0dXNNZXNzYWdlLCBbaXNPcGVuLCBoaWdobGlnaHRlZEluZGV4LCBpbnB1dFZhbHVlLCBpdGVtc10sIF9leHRlbmRzKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcmV2aW91c1Jlc3VsdENvdW50OiBwcmV2aW91c1Jlc3VsdENvdW50UmVmLmN1cnJlbnQsXG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW1Ub1N0cmluZ1xuICB9LCBzdGF0ZSkpO1xuICAvLyBTZXRzIGExMXkgc3RhdHVzIG1lc3NhZ2Ugb24gY2hhbmdlcyBpbiBzZWxlY3RlZEl0ZW0uXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTZWxlY3Rpb25NZXNzYWdlLCBbc2VsZWN0ZWRJdGVtXSwgX2V4dGVuZHMoe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IHByZXZpb3VzUmVzdWx0Q291bnRSZWYuY3VycmVudCxcbiAgICBpdGVtczogaXRlbXMsXG4gICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nXG4gIH0sIHN0YXRlKSk7XG4gIC8vIFNjcm9sbCBvbiBoaWdobGlnaHRlZCBpdGVtIGlmIGNoYW5nZSBjb21lcyBmcm9tIGtleWJvYXJkLlxuICB2YXIgc2hvdWxkU2Nyb2xsUmVmID0gdXNlU2Nyb2xsSW50b1ZpZXcoe1xuICAgIG1lbnVFbGVtZW50OiBtZW51UmVmLmN1cnJlbnQsXG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpc09wZW46IGlzT3BlbixcbiAgICBpdGVtUmVmczogaXRlbVJlZnMsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4OiBnZXRJdGVtTm9kZUZyb21JbmRleFxuICB9KTtcblxuICAvLyBTZXRzIGNsZWFudXAgZm9yIHRoZSBrZXlzU29GYXIgY2FsbGJhY2ssIGRlYm91bmRlZCBhZnRlciA1MDBtcy5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBpbml0IHRoZSBjbGVhbiBmdW5jdGlvbiBoZXJlIGFzIHdlIG5lZWQgYWNjZXNzIHRvIGRpc3BhdGNoLlxuICAgIGNsZWFyVGltZW91dFJlZi5jdXJyZW50ID0gZGVib3VuY2UoZnVuY3Rpb24gKG91dGVyRGlzcGF0Y2gpIHtcbiAgICAgIG91dGVyRGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBGdW5jdGlvblNldElucHV0VmFsdWUkMSxcbiAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgIH0pO1xuICAgIH0sIDUwMCk7XG5cbiAgICAvLyBDYW5jZWwgYW55IHBlbmRpbmcgZGVib3VuY2VkIGNhbGxzIG9uIG1vdW50XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dFJlZi5jdXJyZW50LmNhbmNlbCgpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBJbnZva2VzIHRoZSBrZXlzU29GYXIgY2FsbGJhY2sgc2V0IHVwIGFib3ZlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXRSZWYuY3VycmVudChkaXNwYXRjaCk7XG4gIH0sIFtkaXNwYXRjaCwgaW5wdXRWYWx1ZV0pO1xuICB1c2VDb250cm9sUHJvcHNWYWxpZGF0b3Ioe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBzdGF0ZTogc3RhdGVcbiAgfSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJldmlvdXNSZXN1bHRDb3VudFJlZi5jdXJyZW50ID0gaXRlbXMubGVuZ3RoO1xuICB9KTtcbiAgLy8gRm9jdXMgdGhlIHRvZ2dsZSBidXR0b24gb24gZmlyc3QgcmVuZGVyIGlmIHJlcXVpcmVkLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmb2N1c09uT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gICAgaWYgKGZvY3VzT25PcGVuICYmIHRvZ2dsZUJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICB0b2dnbGVCdXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcbiAgLy8gQWRkIG1vdXNlL3RvdWNoIGV2ZW50cyB0byBkb2N1bWVudC5cbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZU1vdXNlQW5kVG91Y2hUcmFja2VyKGlzT3BlbiwgW21lbnVSZWYsIHRvZ2dsZUJ1dHRvblJlZl0sIGVudmlyb25tZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQmx1clxuICAgIH0pO1xuICB9KTtcbiAgdmFyIHNldEdldHRlclByb3BDYWxsSW5mbyA9IHVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlcignZ2V0TWVudVByb3BzJywgJ2dldFRvZ2dsZUJ1dHRvblByb3BzJyk7XG4gIC8vIE1ha2UgaW5pdGlhbCByZWYgZmFsc2UuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIC8vIFJlc2V0IGl0ZW1SZWZzIG9uIGNsb3NlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBpdGVtUmVmcy5jdXJyZW50ID0ge307XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gRXZlbnQgaGFuZGxlciBmdW5jdGlvbnMuXG4gIHZhciB0b2dnbGVCdXR0b25LZXlEb3duSGFuZGxlcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dEb3duOiBmdW5jdGlvbiBBcnJvd0Rvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25BcnJvd0Rvd24sXG4gICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXlcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgQXJyb3dVcDogZnVuY3Rpb24gQXJyb3dVcChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93VXAsXG4gICAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXlcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgSG9tZTogZnVuY3Rpb24gSG9tZShldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93bkhvbWVcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRW5kOiBmdW5jdGlvbiBFbmQoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25FbmRcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRXNjYXBlOiBmdW5jdGlvbiBFc2NhcGUoKSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duRXNjYXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBFbnRlcjogZnVuY3Rpb24gRW50ZXIoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IGxhdGVzdC5jdXJyZW50LnN0YXRlLmlzT3BlbiA/IFRvZ2dsZUJ1dHRvbktleURvd25FbnRlciA6IFRvZ2dsZUJ1dHRvbkNsaWNrJDFcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgUGFnZVVwOiBmdW5jdGlvbiBQYWdlVXAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGxhdGVzdC5jdXJyZW50LnN0YXRlLmlzT3Blbikge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VVcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUGFnZURvd246IGZ1bmN0aW9uIFBhZ2VEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25QYWdlRG93blxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJyAnOiBmdW5jdGlvbiBfKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuaXNPcGVuKSB7XG4gICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2skMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFN0YXRlLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duQ2hhcmFjdGVyLFxuICAgICAgICAgICAga2V5OiAnICdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0XSk7XG5cbiAgLy8gQWN0aW9uIGZ1bmN0aW9ucy5cbiAgdmFyIHRvZ2dsZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25Ub2dnbGVNZW51JDFcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBjbG9zZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25DbG9zZU1lbnUkMVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIG9wZW5NZW51ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uT3Blbk1lbnUkMVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldEhpZ2hsaWdodGVkSW5kZXggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3SGlnaGxpZ2h0ZWRJbmRleCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCQxLFxuICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbmV3SGlnaGxpZ2h0ZWRJbmRleFxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZWxlY3RJdGVtJDEsXG4gICAgICBzZWxlY3RlZEl0ZW06IG5ld1NlbGVjdGVkSXRlbVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHJlc2V0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uUmVzZXQkMlxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldElucHV0VmFsdWUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3SW5wdXRWYWx1ZSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSQxLFxuICAgICAgaW5wdXRWYWx1ZTogbmV3SW5wdXRWYWx1ZVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgLy8gR2V0dGVyIGZ1bmN0aW9ucy5cbiAgdmFyIGdldExhYmVsUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobGFiZWxQcm9wcykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBpZDogZWxlbWVudElkcy5sYWJlbElkLFxuICAgICAgaHRtbEZvcjogZWxlbWVudElkcy50b2dnbGVCdXR0b25JZFxuICAgIH0sIGxhYmVsUHJvcHMpO1xuICB9LCBbZWxlbWVudElkc10pO1xuICB2YXIgZ2V0TWVudVByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wLCBfdGVtcDIpIHtcbiAgICB2YXIgX2V4dGVuZHMyO1xuICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsXG4gICAgICBvbk1vdXNlTGVhdmUgPSBfcmVmLm9uTW91c2VMZWF2ZSxcbiAgICAgIF9yZWYkcmVmS2V5ID0gX3JlZi5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmJHJlZktleTtcbiAgICAgIF9yZWYub25LZXlEb3duO1xuICAgICAgX3JlZi5vbkJsdXI7XG4gICAgICB2YXIgcmVmID0gX3JlZi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkJDIpO1xuICAgIHZhciBfcmVmMiA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWYyJHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdXBwcmVzc1JlZkVycm87XG4gICAgdmFyIG1lbnVIYW5kbGVNb3VzZUxlYXZlID0gZnVuY3Rpb24gbWVudUhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IE1lbnVNb3VzZUxlYXZlJDFcbiAgICAgIH0pO1xuICAgIH07XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRNZW51UHJvcHMnLCBzdXBwcmVzc1JlZkVycm9yLCByZWZLZXksIG1lbnVSZWYpO1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChtZW51Tm9kZSkge1xuICAgICAgbWVudVJlZi5jdXJyZW50ID0gbWVudU5vZGU7XG4gICAgfSksIF9leHRlbmRzMi5pZCA9IGVsZW1lbnRJZHMubWVudUlkLCBfZXh0ZW5kczIucm9sZSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogXCJcIiArIGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHMyLm9uTW91c2VMZWF2ZSA9IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uTW91c2VMZWF2ZSwgbWVudUhhbmRsZU1vdXNlTGVhdmUpLCBfZXh0ZW5kczIpLCByZXN0KTtcbiAgfSwgW2Rpc3BhdGNoLCBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8sIGVsZW1lbnRJZHNdKTtcbiAgdmFyIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wMywgX3RlbXA0KSB7XG4gICAgdmFyIF9leHRlbmRzMztcbiAgICB2YXIgX3JlZjMgPSBfdGVtcDMgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAzLFxuICAgICAgb25CbHVyID0gX3JlZjMub25CbHVyLFxuICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2s7XG4gICAgICBfcmVmMy5vblByZXNzO1xuICAgICAgdmFyIG9uS2V5RG93biA9IF9yZWYzLm9uS2V5RG93bixcbiAgICAgIF9yZWYzJHJlZktleSA9IF9yZWYzLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYzJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmMyRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmMy5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZDIkMik7XG4gICAgdmFyIF9yZWY0ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgIF9yZWY0JHN1cHByZXNzUmVmRXJybyA9IF9yZWY0LnN1cHByZXNzUmVmRXJyb3IsXG4gICAgICBzdXBwcmVzc1JlZkVycm9yID0gX3JlZjQkc3VwcHJlc3NSZWZFcnJvID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JHN1cHByZXNzUmVmRXJybztcbiAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiB0b2dnbGVCdXR0b25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2skMVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQmx1ciA9IGZ1bmN0aW9uIHRvZ2dsZUJ1dHRvbkhhbmRsZUJsdXIoKSB7XG4gICAgICBpZiAobGF0ZXN0U3RhdGUuaXNPcGVuICYmICFtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWYuY3VycmVudC5pc01vdXNlRG93bikge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQmx1clxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciB0b2dnbGVCdXR0b25IYW5kbGVLZXlEb3duID0gZnVuY3Rpb24gdG9nZ2xlQnV0dG9uSGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgdG9nZ2xlQnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0pIHtcbiAgICAgICAgdG9nZ2xlQnV0dG9uS2V5RG93bkhhbmRsZXJzW2tleV0oZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0FjY2VwdGVkQ2hhcmFjdGVyS2V5KGtleSkpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IFRvZ2dsZUJ1dHRvbktleURvd25DaGFyYWN0ZXIsXG4gICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgdG9nZ2xlUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1tyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uICh0b2dnbGVCdXR0b25Ob2RlKSB7XG4gICAgICB0b2dnbGVCdXR0b25SZWYuY3VycmVudCA9IHRvZ2dsZUJ1dHRvbk5vZGU7XG4gICAgfSksIF9leHRlbmRzM1snYXJpYS1hY3RpdmVkZXNjZW5kYW50J10gPSBsYXRlc3RTdGF0ZS5pc09wZW4gJiYgbGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCA+IC0xID8gZWxlbWVudElkcy5nZXRJdGVtSWQobGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCkgOiAnJywgX2V4dGVuZHMzWydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHMzWydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4sIF9leHRlbmRzM1snYXJpYS1oYXNwb3B1cCddID0gJ2xpc3Rib3gnLCBfZXh0ZW5kczNbJ2FyaWEtbGFiZWxsZWRieSddID0gcmVzdCAmJiByZXN0WydhcmlhLWxhYmVsJ10gPyB1bmRlZmluZWQgOiBcIlwiICsgZWxlbWVudElkcy5sYWJlbElkLCBfZXh0ZW5kczMuaWQgPSBlbGVtZW50SWRzLnRvZ2dsZUJ1dHRvbklkLCBfZXh0ZW5kczMucm9sZSA9ICdjb21ib2JveCcsIF9leHRlbmRzMy50YWJJbmRleCA9IDAsIF9leHRlbmRzMy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIHRvZ2dsZUJ1dHRvbkhhbmRsZUJsdXIpLCBfZXh0ZW5kczMpLCByZXN0KTtcbiAgICBpZiAoIXJlc3QuZGlzYWJsZWQpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAocmVhY3QtbmF0aXZlKSAqL1xuICAgICAge1xuICAgICAgICB0b2dnbGVQcm9wcy5vbkNsaWNrID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2spO1xuICAgICAgICB0b2dnbGVQcm9wcy5vbktleURvd24gPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbktleURvd24sIHRvZ2dsZUJ1dHRvbkhhbmRsZUtleURvd24pO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8oJ2dldFRvZ2dsZUJ1dHRvblByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCB0b2dnbGVCdXR0b25SZWYpO1xuICAgIHJldHVybiB0b2dnbGVQcm9wcztcbiAgfSwgW2xhdGVzdCwgZWxlbWVudElkcywgc2V0R2V0dGVyUHJvcENhbGxJbmZvLCBkaXNwYXRjaCwgbW91c2VBbmRUb3VjaFRyYWNrZXJzUmVmLCB0b2dnbGVCdXR0b25LZXlEb3duSGFuZGxlcnNdKTtcbiAgdmFyIGdldEl0ZW1Qcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcDUpIHtcbiAgICB2YXIgX2V4dGVuZHM0O1xuICAgIHZhciBfcmVmNSA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsXG4gICAgICBpdGVtUHJvcCA9IF9yZWY1Lml0ZW0sXG4gICAgICBpbmRleFByb3AgPSBfcmVmNS5pbmRleCxcbiAgICAgIG9uTW91c2VNb3ZlID0gX3JlZjUub25Nb3VzZU1vdmUsXG4gICAgICBvbkNsaWNrID0gX3JlZjUub25DbGljaztcbiAgICAgIF9yZWY1Lm9uUHJlc3M7XG4gICAgICB2YXIgX3JlZjUkcmVmS2V5ID0gX3JlZjUucmVmS2V5LFxuICAgICAgcmVmS2V5ID0gX3JlZjUkcmVmS2V5ID09PSB2b2lkIDAgPyAncmVmJyA6IF9yZWY1JHJlZktleSxcbiAgICAgIGRpc2FibGVkUHJvcCA9IF9yZWY1LmRpc2FibGVkLFxuICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY1LCBfZXhjbHVkZWQzJDEpO1xuICAgIGlmIChkaXNhYmxlZFByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKCdQYXNzaW5nIFwiZGlzYWJsZWRcIiBhcyBhbiBhcmd1bWVudCB0byBnZXRJdGVtUHJvcHMgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLiBQbGVhc2UgdXNlIHRoZSBpc0l0ZW1EaXNhYmxlZCBwcm9wIGZyb20gdXNlU2VsZWN0LicpO1xuICAgIH1cbiAgICB2YXIgX2xhdGVzdCRjdXJyZW50ID0gbGF0ZXN0LmN1cnJlbnQsXG4gICAgICBsYXRlc3RTdGF0ZSA9IF9sYXRlc3QkY3VycmVudC5zdGF0ZSxcbiAgICAgIGxhdGVzdFByb3BzID0gX2xhdGVzdCRjdXJyZW50LnByb3BzO1xuICAgIHZhciBfZ2V0SXRlbUFuZEluZGV4ID0gZ2V0SXRlbUFuZEluZGV4KGl0ZW1Qcm9wLCBpbmRleFByb3AsIGxhdGVzdFByb3BzLml0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRJdGVtUHJvcHMhJyksXG4gICAgICBpdGVtID0gX2dldEl0ZW1BbmRJbmRleFswXSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgZGlzYWJsZWQgPSBsYXRlc3RQcm9wcy5pc0l0ZW1EaXNhYmxlZChpdGVtLCBpbmRleCk7XG4gICAgdmFyIGl0ZW1IYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBpdGVtSGFuZGxlTW91c2VNb3ZlKCkge1xuICAgICAgaWYgKGluZGV4ID09PSBsYXRlc3RTdGF0ZS5oaWdobGlnaHRlZEluZGV4KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNob3VsZFNjcm9sbFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IEl0ZW1Nb3VzZU1vdmUkMSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGl0ZW1IYW5kbGVDbGljayA9IGZ1bmN0aW9uIGl0ZW1IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogSXRlbUNsaWNrJDEsXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbVByb3BzID0gX2V4dGVuZHMoKF9leHRlbmRzNCA9IHt9LCBfZXh0ZW5kczRbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoaXRlbU5vZGUpIHtcbiAgICAgIGlmIChpdGVtTm9kZSkge1xuICAgICAgICBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV0gPSBpdGVtTm9kZTtcbiAgICAgIH1cbiAgICB9KSwgX2V4dGVuZHM0WydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZCwgX2V4dGVuZHM0WydhcmlhLXNlbGVjdGVkJ10gPSBcIlwiICsgKGl0ZW0gPT09IGxhdGVzdFN0YXRlLnNlbGVjdGVkSXRlbSksIF9leHRlbmRzNC5pZCA9IGVsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KSwgX2V4dGVuZHM0LnJvbGUgPSAnb3B0aW9uJywgX2V4dGVuZHM0KSwgcmVzdCk7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKHJlYWN0LW5hdGl2ZSkgKi9cbiAgICAgIHtcbiAgICAgICAgaXRlbVByb3BzLm9uQ2xpY2sgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBpdGVtSGFuZGxlQ2xpY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBpdGVtUHJvcHMub25Nb3VzZU1vdmUgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgaXRlbUhhbmRsZU1vdXNlTW92ZSk7XG4gICAgcmV0dXJuIGl0ZW1Qcm9wcztcbiAgfSwgW2xhdGVzdCwgZWxlbWVudElkcywgc2hvdWxkU2Nyb2xsUmVmLCBkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIC8vIHByb3AgZ2V0dGVycy5cbiAgICBnZXRUb2dnbGVCdXR0b25Qcm9wczogZ2V0VG9nZ2xlQnV0dG9uUHJvcHMsXG4gICAgZ2V0TGFiZWxQcm9wczogZ2V0TGFiZWxQcm9wcyxcbiAgICBnZXRNZW51UHJvcHM6IGdldE1lbnVQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHM6IGdldEl0ZW1Qcm9wcyxcbiAgICAvLyBhY3Rpb25zLlxuICAgIHRvZ2dsZU1lbnU6IHRvZ2dsZU1lbnUsXG4gICAgb3Blbk1lbnU6IG9wZW5NZW51LFxuICAgIGNsb3NlTWVudTogY2xvc2VNZW51LFxuICAgIHNldEhpZ2hsaWdodGVkSW5kZXg6IHNldEhpZ2hsaWdodGVkSW5kZXgsXG4gICAgc2VsZWN0SXRlbTogc2VsZWN0SXRlbSxcbiAgICByZXNldDogcmVzZXQsXG4gICAgc2V0SW5wdXRWYWx1ZTogc2V0SW5wdXRWYWx1ZSxcbiAgICAvLyBzdGF0ZS5cbiAgICBoaWdobGlnaHRlZEluZGV4OiBoaWdobGlnaHRlZEluZGV4LFxuICAgIGlzT3BlbjogaXNPcGVuLFxuICAgIHNlbGVjdGVkSXRlbTogc2VsZWN0ZWRJdGVtLFxuICAgIGlucHV0VmFsdWU6IGlucHV0VmFsdWVcbiAgfTtcbn1cblxudmFyIElucHV0S2V5RG93bkFycm93RG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fYXJyb3dfZG93bl9fJyA6IDA7XG52YXIgSW5wdXRLZXlEb3duQXJyb3dVcCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fYXJyb3dfdXBfXycgOiAxO1xudmFyIElucHV0S2V5RG93bkVzY2FwZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fZXNjYXBlX18nIDogMjtcbnZhciBJbnB1dEtleURvd25Ib21lID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfa2V5ZG93bl9ob21lX18nIDogMztcbnZhciBJbnB1dEtleURvd25FbmQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pbnB1dF9rZXlkb3duX2VuZF9fJyA6IDQ7XG52YXIgSW5wdXRLZXlEb3duUGFnZVVwID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfa2V5ZG93bl9wYWdlX3VwX18nIDogNTtcbnZhciBJbnB1dEtleURvd25QYWdlRG93biA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fcGFnZV9kb3duX18nIDogNjtcbnZhciBJbnB1dEtleURvd25FbnRlciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2lucHV0X2tleWRvd25fZW50ZXJfXycgOiA3O1xudmFyIElucHV0Q2hhbmdlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfY2hhbmdlX18nIDogODtcbnZhciBJbnB1dEJsdXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19pbnB1dF9ibHVyX18nIDogOTtcbnZhciBJbnB1dENsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faW5wdXRfY2xpY2tfXycgOiAxMDtcbnZhciBNZW51TW91c2VMZWF2ZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX21lbnVfbW91c2VfbGVhdmVfXycgOiAxMTtcbnZhciBJdGVtTW91c2VNb3ZlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9tb3VzZV9tb3ZlX18nIDogMTI7XG52YXIgSXRlbUNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19faXRlbV9jbGlja19fJyA6IDEzO1xudmFyIFRvZ2dsZUJ1dHRvbkNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fdG9nZ2xlYnV0dG9uX2NsaWNrX18nIDogMTQ7XG52YXIgRnVuY3Rpb25Ub2dnbGVNZW51ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fdG9nZ2xlX21lbnVfXycgOiAxNTtcbnZhciBGdW5jdGlvbk9wZW5NZW51ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fb3Blbl9tZW51X18nIDogMTY7XG52YXIgRnVuY3Rpb25DbG9zZU1lbnUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9jbG9zZV9tZW51X18nIDogMTc7XG52YXIgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2V0X2hpZ2hsaWdodGVkX2luZGV4X18nIDogMTg7XG52YXIgRnVuY3Rpb25TZWxlY3RJdGVtID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2VsZWN0X2l0ZW1fXycgOiAxOTtcbnZhciBGdW5jdGlvblNldElucHV0VmFsdWUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9zZXRfaW5wdXRfdmFsdWVfXycgOiAyMDtcbnZhciBGdW5jdGlvblJlc2V0JDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZXNldF9fJyA6IDIxO1xudmFyIENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2NvbnRyb2xsZWRfcHJvcF91cGRhdGVkX3NlbGVjdGVkX2l0ZW1fXycgOiAyMjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBJbnB1dEtleURvd25BcnJvd0Rvd246IElucHV0S2V5RG93bkFycm93RG93bixcbiAgSW5wdXRLZXlEb3duQXJyb3dVcDogSW5wdXRLZXlEb3duQXJyb3dVcCxcbiAgSW5wdXRLZXlEb3duRXNjYXBlOiBJbnB1dEtleURvd25Fc2NhcGUsXG4gIElucHV0S2V5RG93bkhvbWU6IElucHV0S2V5RG93bkhvbWUsXG4gIElucHV0S2V5RG93bkVuZDogSW5wdXRLZXlEb3duRW5kLFxuICBJbnB1dEtleURvd25QYWdlVXA6IElucHV0S2V5RG93blBhZ2VVcCxcbiAgSW5wdXRLZXlEb3duUGFnZURvd246IElucHV0S2V5RG93blBhZ2VEb3duLFxuICBJbnB1dEtleURvd25FbnRlcjogSW5wdXRLZXlEb3duRW50ZXIsXG4gIElucHV0Q2hhbmdlOiBJbnB1dENoYW5nZSxcbiAgSW5wdXRCbHVyOiBJbnB1dEJsdXIsXG4gIElucHV0Q2xpY2s6IElucHV0Q2xpY2ssXG4gIE1lbnVNb3VzZUxlYXZlOiBNZW51TW91c2VMZWF2ZSxcbiAgSXRlbU1vdXNlTW92ZTogSXRlbU1vdXNlTW92ZSxcbiAgSXRlbUNsaWNrOiBJdGVtQ2xpY2ssXG4gIFRvZ2dsZUJ1dHRvbkNsaWNrOiBUb2dnbGVCdXR0b25DbGljayxcbiAgRnVuY3Rpb25Ub2dnbGVNZW51OiBGdW5jdGlvblRvZ2dsZU1lbnUsXG4gIEZ1bmN0aW9uT3Blbk1lbnU6IEZ1bmN0aW9uT3Blbk1lbnUsXG4gIEZ1bmN0aW9uQ2xvc2VNZW51OiBGdW5jdGlvbkNsb3NlTWVudSxcbiAgRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4OiBGdW5jdGlvblNldEhpZ2hsaWdodGVkSW5kZXgsXG4gIEZ1bmN0aW9uU2VsZWN0SXRlbTogRnVuY3Rpb25TZWxlY3RJdGVtLFxuICBGdW5jdGlvblNldElucHV0VmFsdWU6IEZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSxcbiAgRnVuY3Rpb25SZXNldDogRnVuY3Rpb25SZXNldCQxLFxuICBDb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW06IENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbVxufSk7XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSQxKHByb3BzKSB7XG4gIHZhciBpbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGUkMihwcm9wcyk7XG4gIHZhciBzZWxlY3RlZEl0ZW0gPSBpbml0aWFsU3RhdGUuc2VsZWN0ZWRJdGVtO1xuICB2YXIgaW5wdXRWYWx1ZSA9IGluaXRpYWxTdGF0ZS5pbnB1dFZhbHVlO1xuICBpZiAoaW5wdXRWYWx1ZSA9PT0gJycgJiYgc2VsZWN0ZWRJdGVtICYmIHByb3BzLmRlZmF1bHRJbnB1dFZhbHVlID09PSB1bmRlZmluZWQgJiYgcHJvcHMuaW5pdGlhbElucHV0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pbnB1dFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnB1dFZhbHVlID0gcHJvcHMuaXRlbVRvU3RyaW5nKHNlbGVjdGVkSXRlbSk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBpbml0aWFsU3RhdGUsIHtcbiAgICBpbnB1dFZhbHVlOiBpbnB1dFZhbHVlXG4gIH0pO1xufVxudmFyIHByb3BUeXBlcyQxID0gX2V4dGVuZHMoe30sIGNvbW1vbkRyb3Bkb3duUHJvcFR5cGVzLCB7XG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgaXNJdGVtRGlzYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBzZWxlY3RlZEl0ZW1DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ2V0QTExeVNlbGVjdGlvbk1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBpbnB1dFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkZWZhdWx0SW5wdXRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5pdGlhbElucHV0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uSW5wdXRWYWx1ZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn0pO1xuXG4vKipcbiAqIFRoZSB1c2VDb21ib2JveCB2ZXJzaW9uIG9mIHVzZUNvbnRyb2xsZWRSZWR1Y2VyLCB3aGljaCBhbHNvXG4gKiBjaGVja3MgaWYgdGhlIGNvbnRyb2xsZWQgcHJvcCBzZWxlY3RlZEl0ZW0gY2hhbmdlZCBiZXR3ZWVuXG4gKiByZW5kZXJzLiBJZiBzbywgaXQgd2lsbCBhbHNvIHVwZGF0ZSBpbnB1dFZhbHVlIHdpdGggaXRzXG4gKiBzdHJpbmcgZXF1aXZhbGVudC4gSXQgdXNlcyB0aGUgY29tbW9uIHVzZUVuaGFuY2VkUmVkdWNlciB0b1xuICogY29tcHV0ZSB0aGUgcmVzdCBvZiB0aGUgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBSZWR1Y2VyIGZ1bmN0aW9uIGZyb20gZG93bnNoaWZ0LlxuICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxTdGF0ZSBJbml0aWFsIHN0YXRlIG9mIHRoZSBob29rLlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIFRoZSBob29rIHByb3BzLlxuICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHRoZSBzdGF0ZSBhbmQgYW4gYWN0aW9uIGRpc3BhdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnRyb2xsZWRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgcHJvcHMpIHtcbiAgdmFyIHByZXZpb3VzU2VsZWN0ZWRJdGVtUmVmID0gdXNlUmVmKCk7XG4gIHZhciBfdXNlRW5oYW5jZWRSZWR1Y2VyID0gdXNlRW5oYW5jZWRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSwgcHJvcHMpLFxuICAgIHN0YXRlID0gX3VzZUVuaGFuY2VkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VFbmhhbmNlZFJlZHVjZXJbMV07XG5cbiAgLy8gVG9EbzogaWYgbmVlZGVkLCBtYWtlIHNhbWUgYXBwcm9hY2ggYXMgc2VsZWN0ZWRJdGVtQ2hhbmdlZCBmcm9tIERvd25zaGlmdC5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZFByb3AocHJvcHMsICdzZWxlY3RlZEl0ZW0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWRJdGVtQ2hhbmdlZChwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50LCBwcm9wcy5zZWxlY3RlZEl0ZW0pKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IENvbnRyb2xsZWRQcm9wVXBkYXRlZFNlbGVjdGVkSXRlbSxcbiAgICAgICAgaW5wdXRWYWx1ZTogcHJvcHMuaXRlbVRvU3RyaW5nKHByb3BzLnNlbGVjdGVkSXRlbSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50ID0gc3RhdGUuc2VsZWN0ZWRJdGVtID09PSBwcmV2aW91c1NlbGVjdGVkSXRlbVJlZi5jdXJyZW50ID8gcHJvcHMuc2VsZWN0ZWRJdGVtIDogc3RhdGUuc2VsZWN0ZWRJdGVtO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3N0YXRlLnNlbGVjdGVkSXRlbSwgcHJvcHMuc2VsZWN0ZWRJdGVtXSk7XG4gIHJldHVybiBbZ2V0U3RhdGUoc3RhdGUsIHByb3BzKSwgZGlzcGF0Y2hdO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xudmFyIHZhbGlkYXRlUHJvcFR5cGVzJDEgPSBub29wO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlUHJvcFR5cGVzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhvcHRpb25zLCBjYWxsZXIpIHtcbiAgICBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzJDEsIG9wdGlvbnMsICdwcm9wJywgY2FsbGVyLm5hbWUpO1xuICB9O1xufVxudmFyIGRlZmF1bHRQcm9wcyQxID0gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQzLCB7XG4gIHNlbGVjdGVkSXRlbUNoYW5nZWQ6IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUNoYW5nZWQocHJldkl0ZW0sIGl0ZW0pIHtcbiAgICByZXR1cm4gcHJldkl0ZW0gIT09IGl0ZW07XG4gIH0sXG4gIGdldEExMXlTdGF0dXNNZXNzYWdlOiBnZXRBMTF5U3RhdHVzTWVzc2FnZSQxLFxuICBpc0l0ZW1EaXNhYmxlZDogZnVuY3Rpb24gaXNJdGVtRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59KTtcblxuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZnVuY3Rpb24gZG93bnNoaWZ0VXNlQ29tYm9ib3hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgdmFyIF9wcm9wcyRpdGVtcztcbiAgdmFyIHR5cGUgPSBhY3Rpb24udHlwZSxcbiAgICBwcm9wcyA9IGFjdGlvbi5wcm9wcyxcbiAgICBhbHRLZXkgPSBhY3Rpb24uYWx0S2V5O1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBJdGVtQ2xpY2s6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyksXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCAnaGlnaGxpZ2h0ZWRJbmRleCcpLFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHByb3BzLml0ZW1zW2FjdGlvbi5pbmRleF0sXG4gICAgICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhwcm9wcy5pdGVtc1thY3Rpb24uaW5kZXhdKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgSW5wdXRLZXlEb3duQXJyb3dEb3duOlxuICAgICAgaWYgKHN0YXRlLmlzT3Blbikge1xuICAgICAgICBjaGFuZ2VzID0ge1xuICAgICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkLCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBhbHRLZXkgJiYgc3RhdGUuc2VsZWN0ZWRJdGVtID09IG51bGwgPyAtMSA6IGdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4ocHJvcHMsIHN0YXRlLCAxKSxcbiAgICAgICAgICBpc09wZW46IHByb3BzLml0ZW1zLmxlbmd0aCA+PSAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkFycm93VXA6XG4gICAgICBpZiAoc3RhdGUuaXNPcGVuKSB7XG4gICAgICAgIGlmIChhbHRLZXkpIHtcbiAgICAgICAgICBjaGFuZ2VzID0gZ2V0Q2hhbmdlc09uU2VsZWN0aW9uKHByb3BzLCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VzID0ge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleChzdGF0ZS5oaWdobGlnaHRlZEluZGV4LCAtMSwgcHJvcHMuaXRlbXMsIHByb3BzLmlzSXRlbURpc2FibGVkLCB0cnVlKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIC0xKSxcbiAgICAgICAgICBpc09wZW46IHByb3BzLml0ZW1zLmxlbmd0aCA+PSAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkVudGVyOlxuICAgICAgY2hhbmdlcyA9IGdldENoYW5nZXNPblNlbGVjdGlvbihwcm9wcywgc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkVzY2FwZTpcbiAgICAgIGNoYW5nZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9LCAhc3RhdGUuaXNPcGVuICYmIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLFxuICAgICAgICBpbnB1dFZhbHVlOiAnJ1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93blBhZ2VVcDpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgLTEwLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQsIHRydWUpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBJbnB1dEtleURvd25QYWdlRG93bjpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IGdldEhpZ2hsaWdodGVkSW5kZXgoc3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCwgMTAsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZCwgdHJ1ZSlcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0S2V5RG93bkhvbWU6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXROb25EaXNhYmxlZEluZGV4KDAsIGZhbHNlLCBwcm9wcy5pdGVtcywgcHJvcHMuaXNJdGVtRGlzYWJsZWQpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBJbnB1dEtleURvd25FbmQ6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXROb25EaXNhYmxlZEluZGV4KHByb3BzLml0ZW1zLmxlbmd0aCAtIDEsIHRydWUsIHByb3BzLml0ZW1zLCBwcm9wcy5pc0l0ZW1EaXNhYmxlZClcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Qmx1cjpcbiAgICAgIGNoYW5nZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG4gICAgICB9LCBzdGF0ZS5oaWdobGlnaHRlZEluZGV4ID49IDAgJiYgKChfcHJvcHMkaXRlbXMgPSBwcm9wcy5pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyRpdGVtcy5sZW5ndGgpICYmIGFjdGlvbi5zZWxlY3RJdGVtICYmIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiBwcm9wcy5pdGVtc1tzdGF0ZS5oaWdobGlnaHRlZEluZGV4XSxcbiAgICAgICAgaW5wdXRWYWx1ZTogcHJvcHMuaXRlbVRvU3RyaW5nKHByb3BzLml0ZW1zW3N0YXRlLmhpZ2hsaWdodGVkSW5kZXhdKVxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Q2hhbmdlOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBoaWdobGlnaHRlZEluZGV4OiBnZXREZWZhdWx0VmFsdWUkMShwcm9wcywgJ2hpZ2hsaWdodGVkSW5kZXgnKSxcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIElucHV0Q2xpY2s6XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBpc09wZW46ICFzdGF0ZS5pc09wZW4sXG4gICAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IHN0YXRlLmlzT3BlbiA/IC0xIDogZ2V0SGlnaGxpZ2h0ZWRJbmRleE9uT3Blbihwcm9wcywgc3RhdGUsIDApXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGdW5jdGlvblNlbGVjdEl0ZW06XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW06IGFjdGlvbi5zZWxlY3RlZEl0ZW0sXG4gICAgICAgIGlucHV0VmFsdWU6IHByb3BzLml0ZW1Ub1N0cmluZyhhY3Rpb24uc2VsZWN0ZWRJdGVtKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgaW5wdXRWYWx1ZTogYWN0aW9uLmlucHV0VmFsdWVcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRvd25zaGlmdENvbW1vblJlZHVjZXIoc3RhdGUsIGFjdGlvbiwgc3RhdGVDaGFuZ2VUeXBlcyQxKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBjaGFuZ2VzKTtcbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG52YXIgX2V4Y2x1ZGVkJDEgPSBbXCJvbk1vdXNlTGVhdmVcIiwgXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDIkMSA9IFtcIml0ZW1cIiwgXCJpbmRleFwiLCBcInJlZktleVwiLCBcInJlZlwiLCBcIm9uTW91c2VNb3ZlXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbkNsaWNrXCIsIFwib25QcmVzc1wiLCBcImRpc2FibGVkXCJdLFxuICBfZXhjbHVkZWQzID0gW1wib25DbGlja1wiLCBcIm9uUHJlc3NcIiwgXCJyZWZLZXlcIiwgXCJyZWZcIl0sXG4gIF9leGNsdWRlZDQgPSBbXCJvbktleURvd25cIiwgXCJvbkNoYW5nZVwiLCBcIm9uSW5wdXRcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVRleHRcIiwgXCJvbkNsaWNrXCIsIFwicmVmS2V5XCIsIFwicmVmXCJdO1xudXNlQ29tYm9ib3guc3RhdGVDaGFuZ2VUeXBlcyA9IHN0YXRlQ2hhbmdlVHlwZXMkMTtcbmZ1bmN0aW9uIHVzZUNvbWJvYm94KHVzZXJQcm9wcykge1xuICBpZiAodXNlclByb3BzID09PSB2b2lkIDApIHtcbiAgICB1c2VyUHJvcHMgPSB7fTtcbiAgfVxuICB2YWxpZGF0ZVByb3BUeXBlcyQxKHVzZXJQcm9wcywgdXNlQ29tYm9ib3gpO1xuICAvLyBQcm9wcyBkZWZhdWx0cyBhbmQgZGVzdHJ1Y3R1cmluZy5cbiAgdmFyIHByb3BzID0gX2V4dGVuZHMoe30sIGRlZmF1bHRQcm9wcyQxLCB1c2VyUHJvcHMpO1xuICB2YXIgaXRlbXMgPSBwcm9wcy5pdGVtcyxcbiAgICBzY3JvbGxJbnRvVmlldyA9IHByb3BzLnNjcm9sbEludG9WaWV3LFxuICAgIGVudmlyb25tZW50ID0gcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgZ2V0QTExeVN0YXR1c01lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5U3RhdHVzTWVzc2FnZSxcbiAgICBnZXRBMTF5U2VsZWN0aW9uTWVzc2FnZSA9IHByb3BzLmdldEExMXlTZWxlY3Rpb25NZXNzYWdlLFxuICAgIGl0ZW1Ub1N0cmluZyA9IHByb3BzLml0ZW1Ub1N0cmluZztcbiAgLy8gSW5pdGlhbCBzdGF0ZSBkZXBlbmRpbmcgb24gY29udHJvbGxlZCBwcm9wcy5cbiAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSQxKHByb3BzKTtcbiAgdmFyIF91c2VDb250cm9sbGVkUmVkdWNlciA9IHVzZUNvbnRyb2xsZWRSZWR1Y2VyKGRvd25zaGlmdFVzZUNvbWJvYm94UmVkdWNlciwgaW5pdGlhbFN0YXRlLCBwcm9wcyksXG4gICAgc3RhdGUgPSBfdXNlQ29udHJvbGxlZFJlZHVjZXJbMF0sXG4gICAgZGlzcGF0Y2ggPSBfdXNlQ29udHJvbGxlZFJlZHVjZXJbMV07XG4gIHZhciBpc09wZW4gPSBzdGF0ZS5pc09wZW4sXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCA9IHN0YXRlLmhpZ2hsaWdodGVkSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtID0gc3RhdGUuc2VsZWN0ZWRJdGVtLFxuICAgIGlucHV0VmFsdWUgPSBzdGF0ZS5pbnB1dFZhbHVlO1xuXG4gIC8vIEVsZW1lbnQgcmVmcy5cbiAgdmFyIG1lbnVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBpdGVtUmVmcyA9IHVzZVJlZih7fSk7XG4gIHZhciBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHRvZ2dsZUJ1dHRvblJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICAvLyBwcmV2ZW50IGlkIHJlLWdlbmVyYXRpb24gYmV0d2VlbiByZW5kZXJzLlxuICB2YXIgZWxlbWVudElkcyA9IHVzZUVsZW1lbnRJZHMocHJvcHMpO1xuICAvLyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgaXRlbXMgd2UgaGFkIG9uIHByZXZpb3VzIGN5Y2xlLlxuICB2YXIgcHJldmlvdXNSZXN1bHRDb3VudFJlZiA9IHVzZVJlZigpO1xuICAvLyB1dGlsaXR5IGNhbGxiYWNrIHRvIGdldCBpdGVtIGVsZW1lbnQuXG4gIHZhciBsYXRlc3QgPSB1c2VMYXRlc3RSZWYoe1xuICAgIHN0YXRlOiBzdGF0ZSxcbiAgICBwcm9wczogcHJvcHNcbiAgfSk7XG4gIHZhciBnZXRJdGVtTm9kZUZyb21JbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBpdGVtUmVmcy5jdXJyZW50W2VsZW1lbnRJZHMuZ2V0SXRlbUlkKGluZGV4KV07XG4gIH0sIFtlbGVtZW50SWRzXSk7XG5cbiAgLy8gRWZmZWN0cy5cbiAgLy8gU2V0cyBhMTF5IHN0YXR1cyBtZXNzYWdlIG9uIGNoYW5nZXMgaW4gc3RhdGUuXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTdGF0dXNNZXNzYWdlLCBbaXNPcGVuLCBoaWdobGlnaHRlZEluZGV4LCBpbnB1dFZhbHVlLCBpdGVtc10sIF9leHRlbmRzKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcmV2aW91c1Jlc3VsdENvdW50OiBwcmV2aW91c1Jlc3VsdENvdW50UmVmLmN1cnJlbnQsXG4gICAgaXRlbXM6IGl0ZW1zLFxuICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW1Ub1N0cmluZ1xuICB9LCBzdGF0ZSkpO1xuICAvLyBTZXRzIGExMXkgc3RhdHVzIG1lc3NhZ2Ugb24gY2hhbmdlcyBpbiBzZWxlY3RlZEl0ZW0uXG4gIHVzZUExMXlNZXNzYWdlU2V0dGVyKGdldEExMXlTZWxlY3Rpb25NZXNzYWdlLCBbc2VsZWN0ZWRJdGVtXSwgX2V4dGVuZHMoe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByZXZpb3VzUmVzdWx0Q291bnQ6IHByZXZpb3VzUmVzdWx0Q291bnRSZWYuY3VycmVudCxcbiAgICBpdGVtczogaXRlbXMsXG4gICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nXG4gIH0sIHN0YXRlKSk7XG4gIC8vIFNjcm9sbCBvbiBoaWdobGlnaHRlZCBpdGVtIGlmIGNoYW5nZSBjb21lcyBmcm9tIGtleWJvYXJkLlxuICB2YXIgc2hvdWxkU2Nyb2xsUmVmID0gdXNlU2Nyb2xsSW50b1ZpZXcoe1xuICAgIG1lbnVFbGVtZW50OiBtZW51UmVmLmN1cnJlbnQsXG4gICAgaGlnaGxpZ2h0ZWRJbmRleDogaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpc09wZW46IGlzT3BlbixcbiAgICBpdGVtUmVmczogaXRlbVJlZnMsXG4gICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LFxuICAgIGdldEl0ZW1Ob2RlRnJvbUluZGV4OiBnZXRJdGVtTm9kZUZyb21JbmRleFxuICB9KTtcbiAgdXNlQ29udHJvbFByb3BzVmFsaWRhdG9yKHtcbiAgICBpc0luaXRpYWxNb3VudDogaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCxcbiAgICBwcm9wczogcHJvcHMsXG4gICAgc3RhdGU6IHN0YXRlXG4gIH0pO1xuICAvLyBGb2N1cyB0aGUgaW5wdXQgb24gZmlyc3QgcmVuZGVyIGlmIHJlcXVpcmVkLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmb2N1c09uT3BlbiA9IGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCAnaXNPcGVuJyk7XG4gICAgaWYgKGZvY3VzT25PcGVuICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJldmlvdXNSZXN1bHRDb3VudFJlZi5jdXJyZW50ID0gaXRlbXMubGVuZ3RoO1xuICB9KTtcbiAgLy8gQWRkIG1vdXNlL3RvdWNoIGV2ZW50cyB0byBkb2N1bWVudC5cbiAgdmFyIG1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiA9IHVzZU1vdXNlQW5kVG91Y2hUcmFja2VyKGlzT3BlbiwgW2lucHV0UmVmLCBtZW51UmVmLCB0b2dnbGVCdXR0b25SZWZdLCBlbnZpcm9ubWVudCwgZnVuY3Rpb24gKCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IElucHV0Qmx1cixcbiAgICAgIHNlbGVjdEl0ZW06IGZhbHNlXG4gICAgfSk7XG4gIH0pO1xuICB2YXIgc2V0R2V0dGVyUHJvcENhbGxJbmZvID0gdXNlR2V0dGVyUHJvcHNDYWxsZWRDaGVja2VyKCdnZXRJbnB1dFByb3BzJywgJ2dldE1lbnVQcm9wcycpO1xuICAvLyBNYWtlIGluaXRpYWwgcmVmIGZhbHNlLlxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgfSwgW10pO1xuICAvLyBSZXNldCBpdGVtUmVmcyBvbiBjbG9zZS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2Vudmlyb25tZW50JGRvY3VtZW50O1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBpdGVtUmVmcy5jdXJyZW50ID0ge307XG4gICAgfSBlbHNlIGlmICgoKF9lbnZpcm9ubWVudCRkb2N1bWVudCA9IGVudmlyb25tZW50LmRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2Vudmlyb25tZW50JGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICE9PSBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICB2YXIgX2lucHV0UmVmJGN1cnJlbnQ7XG4gICAgICBpbnB1dFJlZiA9PSBudWxsIHx8IChfaW5wdXRSZWYkY3VycmVudCA9IGlucHV0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXRSZWYkY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2lzT3BlbiwgZW52aXJvbm1lbnRdKTtcblxuICAvKiBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucyAqL1xuICB2YXIgaW5wdXRLZXlEb3duSGFuZGxlcnMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dEb3duOiBmdW5jdGlvbiBBcnJvd0Rvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkFycm93RG93bixcbiAgICAgICAgICBhbHRLZXk6IGV2ZW50LmFsdEtleVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBBcnJvd1VwOiBmdW5jdGlvbiBBcnJvd1VwKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBJbnB1dEtleURvd25BcnJvd1VwLFxuICAgICAgICAgIGFsdEtleTogZXZlbnQuYWx0S2V5XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIEhvbWU6IGZ1bmN0aW9uIEhvbWUoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkhvbWVcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRW5kOiBmdW5jdGlvbiBFbmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVuZFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBFc2NhcGU6IGZ1bmN0aW9uIEVzY2FwZShldmVudCkge1xuICAgICAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICAgICAgaWYgKGxhdGVzdFN0YXRlLmlzT3BlbiB8fCBsYXRlc3RTdGF0ZS5pbnB1dFZhbHVlIHx8IGxhdGVzdFN0YXRlLnNlbGVjdGVkSXRlbSB8fCBsYXRlc3RTdGF0ZS5oaWdobGlnaHRlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVzY2FwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgRW50ZXI6IGZ1bmN0aW9uIEVudGVyKGV2ZW50KSB7XG4gICAgICAgIHZhciBsYXRlc3RTdGF0ZSA9IGxhdGVzdC5jdXJyZW50LnN0YXRlO1xuICAgICAgICAvLyBpZiBjbG9zZWQgb3Igbm8gaGlnaGxpZ2h0ZWQgaW5kZXgsIGRvIG5vdGhpbmcuXG4gICAgICAgIGlmICghbGF0ZXN0U3RhdGUuaXNPcGVuIHx8IGV2ZW50LndoaWNoID09PSAyMjkgLy8gaWYgSU1FIGNvbXBvc2luZywgd2FpdCBmb3IgbmV4dCBFbnRlciBrZXlkb3duIGV2ZW50LlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93bkVudGVyXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIFBhZ2VVcDogZnVuY3Rpb24gUGFnZVVwKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93blBhZ2VVcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgUGFnZURvd246IGZ1bmN0aW9uIFBhZ2VEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChsYXRlc3QuY3VycmVudC5zdGF0ZS5pc09wZW4pIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IElucHV0S2V5RG93blBhZ2VEb3duXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LCBbZGlzcGF0Y2gsIGxhdGVzdF0pO1xuXG4gIC8vIEdldHRlciBwcm9wcy5cbiAgdmFyIGdldExhYmVsUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobGFiZWxQcm9wcykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICBpZDogZWxlbWVudElkcy5sYWJlbElkLFxuICAgICAgaHRtbEZvcjogZWxlbWVudElkcy5pbnB1dElkXG4gICAgfSwgbGFiZWxQcm9wcyk7XG4gIH0sIFtlbGVtZW50SWRzXSk7XG4gIHZhciBnZXRNZW51UHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3RlbXAsIF90ZW1wMikge1xuICAgIHZhciBfZXh0ZW5kczI7XG4gICAgdmFyIF9yZWYgPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcCxcbiAgICAgIG9uTW91c2VMZWF2ZSA9IF9yZWYub25Nb3VzZUxlYXZlLFxuICAgICAgX3JlZiRyZWZLZXkgPSBfcmVmLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYkcmVmS2V5ID09PSB2b2lkIDAgPyAncmVmJyA6IF9yZWYkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkJDEpO1xuICAgIHZhciBfcmVmMiA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmMiRzdXBwcmVzc1JlZkVycm8gPSBfcmVmMi5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWYyJHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRNZW51UHJvcHMnLCBzdXBwcmVzc1JlZkVycm9yLCByZWZLZXksIG1lbnVSZWYpO1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChtZW51Tm9kZSkge1xuICAgICAgbWVudVJlZi5jdXJyZW50ID0gbWVudU5vZGU7XG4gICAgfSksIF9leHRlbmRzMi5pZCA9IGVsZW1lbnRJZHMubWVudUlkLCBfZXh0ZW5kczIucm9sZSA9ICdsaXN0Ym94JywgX2V4dGVuZHMyWydhcmlhLWxhYmVsbGVkYnknXSA9IHJlc3QgJiYgcmVzdFsnYXJpYS1sYWJlbCddID8gdW5kZWZpbmVkIDogXCJcIiArIGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHMyLm9uTW91c2VMZWF2ZSA9IGNhbGxBbGxFdmVudEhhbmRsZXJzKG9uTW91c2VMZWF2ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBNZW51TW91c2VMZWF2ZVxuICAgICAgfSk7XG4gICAgfSksIF9leHRlbmRzMiksIHJlc3QpO1xuICB9LCBbZGlzcGF0Y2gsIHNldEdldHRlclByb3BDYWxsSW5mbywgZWxlbWVudElkc10pO1xuICB2YXIgZ2V0SXRlbVByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wMykge1xuICAgIHZhciBfZXh0ZW5kczMsIF9yZWY0O1xuICAgIHZhciBfcmVmMyA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICBpdGVtUHJvcCA9IF9yZWYzLml0ZW0sXG4gICAgICBpbmRleFByb3AgPSBfcmVmMy5pbmRleCxcbiAgICAgIF9yZWYzJHJlZktleSA9IF9yZWYzLnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWYzJHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmMyRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmMy5yZWYsXG4gICAgICBvbk1vdXNlTW92ZSA9IF9yZWYzLm9uTW91c2VNb3ZlLFxuICAgICAgb25Nb3VzZURvd24gPSBfcmVmMy5vbk1vdXNlRG93bixcbiAgICAgIG9uQ2xpY2sgPSBfcmVmMy5vbkNsaWNrO1xuICAgICAgX3JlZjMub25QcmVzcztcbiAgICAgIHZhciBkaXNhYmxlZFByb3AgPSBfcmVmMy5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmMywgX2V4Y2x1ZGVkMiQxKTtcbiAgICBpZiAoZGlzYWJsZWRQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignUGFzc2luZyBcImRpc2FibGVkXCIgYXMgYW4gYXJndW1lbnQgdG8gZ2V0SXRlbVByb3BzIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4gUGxlYXNlIHVzZSB0aGUgaXNJdGVtRGlzYWJsZWQgcHJvcCBmcm9tIHVzZUNvbWJvYm94LicpO1xuICAgIH1cbiAgICB2YXIgX2xhdGVzdCRjdXJyZW50ID0gbGF0ZXN0LmN1cnJlbnQsXG4gICAgICBsYXRlc3RQcm9wcyA9IF9sYXRlc3QkY3VycmVudC5wcm9wcyxcbiAgICAgIGxhdGVzdFN0YXRlID0gX2xhdGVzdCRjdXJyZW50LnN0YXRlO1xuICAgIHZhciBfZ2V0SXRlbUFuZEluZGV4ID0gZ2V0SXRlbUFuZEluZGV4KGl0ZW1Qcm9wLCBpbmRleFByb3AsIGxhdGVzdFByb3BzLml0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRJdGVtUHJvcHMhJyksXG4gICAgICBpdGVtID0gX2dldEl0ZW1BbmRJbmRleFswXSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgZGlzYWJsZWQgPSBsYXRlc3RQcm9wcy5pc0l0ZW1EaXNhYmxlZChpdGVtLCBpbmRleCk7XG4gICAgdmFyIG9uU2VsZWN0S2V5ID0gJ29uQ2xpY2snO1xuICAgIHZhciBjdXN0b21DbGlja0hhbmRsZXIgPSBvbkNsaWNrO1xuICAgIHZhciBpdGVtSGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24gaXRlbUhhbmRsZU1vdXNlTW92ZSgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gbGF0ZXN0U3RhdGUuaGlnaGxpZ2h0ZWRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzaG91bGRTY3JvbGxSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBJdGVtTW91c2VNb3ZlLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbUhhbmRsZUNsaWNrID0gZnVuY3Rpb24gaXRlbUhhbmRsZUNsaWNrKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBJdGVtQ2xpY2ssXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgaXRlbUhhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9uIGl0ZW1IYW5kbGVNb3VzZURvd24oZSkge1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMzID0ge30sIF9leHRlbmRzM1tyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChpdGVtTm9kZSkge1xuICAgICAgaWYgKGl0ZW1Ob2RlKSB7XG4gICAgICAgIGl0ZW1SZWZzLmN1cnJlbnRbZWxlbWVudElkcy5nZXRJdGVtSWQoaW5kZXgpXSA9IGl0ZW1Ob2RlO1xuICAgICAgfVxuICAgIH0pLCBfZXh0ZW5kczNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkLCBfZXh0ZW5kczNbJ2FyaWEtc2VsZWN0ZWQnXSA9IFwiXCIgKyAoaW5kZXggPT09IGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXgpLCBfZXh0ZW5kczMuaWQgPSBlbGVtZW50SWRzLmdldEl0ZW1JZChpbmRleCksIF9leHRlbmRzMy5yb2xlID0gJ29wdGlvbicsIF9leHRlbmRzMyksICFkaXNhYmxlZCAmJiAoX3JlZjQgPSB7fSwgX3JlZjRbb25TZWxlY3RLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMoY3VzdG9tQ2xpY2tIYW5kbGVyLCBpdGVtSGFuZGxlQ2xpY2spLCBfcmVmNCksIHtcbiAgICAgIG9uTW91c2VNb3ZlOiBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbk1vdXNlTW92ZSwgaXRlbUhhbmRsZU1vdXNlTW92ZSksXG4gICAgICBvbk1vdXNlRG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25Nb3VzZURvd24sIGl0ZW1IYW5kbGVNb3VzZURvd24pXG4gICAgfSwgcmVzdCk7XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0LCBzaG91bGRTY3JvbGxSZWYsIGVsZW1lbnRJZHNdKTtcbiAgdmFyIGdldFRvZ2dsZUJ1dHRvblByb3BzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF90ZW1wNCkge1xuICAgIHZhciBfZXh0ZW5kczQ7XG4gICAgdmFyIF9yZWY1ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmNS5vbkNsaWNrO1xuICAgICAgX3JlZjUub25QcmVzcztcbiAgICAgIHZhciBfcmVmNSRyZWZLZXkgPSBfcmVmNS5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmNSRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjUkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjUucmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWY1LCBfZXhjbHVkZWQzKTtcbiAgICB2YXIgbGF0ZXN0U3RhdGUgPSBsYXRlc3QuY3VycmVudC5zdGF0ZTtcbiAgICB2YXIgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiB0b2dnbGVCdXR0b25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVG9nZ2xlQnV0dG9uQ2xpY2tcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIF9leHRlbmRzKChfZXh0ZW5kczQgPSB7fSwgX2V4dGVuZHM0W3JlZktleV0gPSBoYW5kbGVSZWZzKHJlZiwgZnVuY3Rpb24gKHRvZ2dsZUJ1dHRvbk5vZGUpIHtcbiAgICAgIHRvZ2dsZUJ1dHRvblJlZi5jdXJyZW50ID0gdG9nZ2xlQnV0dG9uTm9kZTtcbiAgICB9KSwgX2V4dGVuZHM0WydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHM0WydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3RTdGF0ZS5pc09wZW4sIF9leHRlbmRzNC5pZCA9IGVsZW1lbnRJZHMudG9nZ2xlQnV0dG9uSWQsIF9leHRlbmRzNC50YWJJbmRleCA9IC0xLCBfZXh0ZW5kczQpLCAhcmVzdC5kaXNhYmxlZCAmJiBfZXh0ZW5kcyh7fSwge1xuICAgICAgb25DbGljazogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgdG9nZ2xlQnV0dG9uSGFuZGxlQ2xpY2spXG4gICAgfSksIHJlc3QpO1xuICB9LCBbZGlzcGF0Y2gsIGxhdGVzdCwgZWxlbWVudElkc10pO1xuICB2YXIgZ2V0SW5wdXRQcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcDUsIF90ZW1wNikge1xuICAgIHZhciBfZXh0ZW5kczU7XG4gICAgdmFyIF9yZWY2ID0gX3RlbXA1ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNSxcbiAgICAgIG9uS2V5RG93biA9IF9yZWY2Lm9uS2V5RG93bixcbiAgICAgIG9uQ2hhbmdlID0gX3JlZjYub25DaGFuZ2UsXG4gICAgICBvbklucHV0ID0gX3JlZjYub25JbnB1dCxcbiAgICAgIG9uQmx1ciA9IF9yZWY2Lm9uQmx1cjtcbiAgICAgIF9yZWY2Lm9uQ2hhbmdlVGV4dDtcbiAgICAgIHZhciBvbkNsaWNrID0gX3JlZjYub25DbGljayxcbiAgICAgIF9yZWY2JHJlZktleSA9IF9yZWY2LnJlZktleSxcbiAgICAgIHJlZktleSA9IF9yZWY2JHJlZktleSA9PT0gdm9pZCAwID8gJ3JlZicgOiBfcmVmNiRyZWZLZXksXG4gICAgICByZWYgPSBfcmVmNi5yZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjYsIF9leGNsdWRlZDQpO1xuICAgIHZhciBfcmVmNyA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsXG4gICAgICBfcmVmNyRzdXBwcmVzc1JlZkVycm8gPSBfcmVmNy5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWY3JHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNyRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXRJbnB1dFByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCBpbnB1dFJlZik7XG4gICAgdmFyIGxhdGVzdFN0YXRlID0gbGF0ZXN0LmN1cnJlbnQuc3RhdGU7XG4gICAgdmFyIGlucHV0SGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgaW5wdXRLZXlEb3duSGFuZGxlcnNba2V5XSkge1xuICAgICAgICBpbnB1dEtleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBpbnB1dEhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IElucHV0Q2hhbmdlLFxuICAgICAgICBpbnB1dFZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdmFyIGlucHV0SGFuZGxlQmx1ciA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQmx1cihldmVudCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChsYXRlc3RTdGF0ZS5pc09wZW4gJiYgIW1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZi5jdXJyZW50LmlzTW91c2VEb3duKSB7XG4gICAgICAgIHZhciBpc0JsdXJCeVRhYkNoYW5nZSA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IG51bGwgJiYgZW52aXJvbm1lbnQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZW52aXJvbm1lbnQuZG9jdW1lbnQuYm9keTtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IElucHV0Qmx1cixcbiAgICAgICAgICBzZWxlY3RJdGVtOiAhaXNCbHVyQnlUYWJDaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgaW5wdXRIYW5kbGVDbGljayA9IGZ1bmN0aW9uIGlucHV0SGFuZGxlQ2xpY2soKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IElucHV0Q2xpY2tcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAocHJlYWN0KSAqL1xuICAgIHZhciBvbkNoYW5nZUtleSA9ICdvbkNoYW5nZSc7XG4gICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICBpZiAoIXJlc3QuZGlzYWJsZWQpIHtcbiAgICAgIHZhciBfZXZlbnRIYW5kbGVycztcbiAgICAgIGV2ZW50SGFuZGxlcnMgPSAoX2V2ZW50SGFuZGxlcnMgPSB7fSwgX2V2ZW50SGFuZGxlcnNbb25DaGFuZ2VLZXldID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DaGFuZ2UsIG9uSW5wdXQsIGlucHV0SGFuZGxlQ2hhbmdlKSwgX2V2ZW50SGFuZGxlcnMub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBpbnB1dEhhbmRsZUtleURvd24pLCBfZXZlbnRIYW5kbGVycy5vbkJsdXIgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkJsdXIsIGlucHV0SGFuZGxlQmx1ciksIF9ldmVudEhhbmRsZXJzLm9uQ2xpY2sgPSBjYWxsQWxsRXZlbnRIYW5kbGVycyhvbkNsaWNrLCBpbnB1dEhhbmRsZUNsaWNrKSwgX2V2ZW50SGFuZGxlcnMpO1xuICAgIH1cbiAgICByZXR1cm4gX2V4dGVuZHMoKF9leHRlbmRzNSA9IHt9LCBfZXh0ZW5kczVbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoaW5wdXROb2RlKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50ID0gaW5wdXROb2RlO1xuICAgIH0pLCBfZXh0ZW5kczVbJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCddID0gbGF0ZXN0U3RhdGUuaXNPcGVuICYmIGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXggPiAtMSA/IGVsZW1lbnRJZHMuZ2V0SXRlbUlkKGxhdGVzdFN0YXRlLmhpZ2hsaWdodGVkSW5kZXgpIDogJycsIF9leHRlbmRzNVsnYXJpYS1hdXRvY29tcGxldGUnXSA9ICdsaXN0JywgX2V4dGVuZHM1WydhcmlhLWNvbnRyb2xzJ10gPSBlbGVtZW50SWRzLm1lbnVJZCwgX2V4dGVuZHM1WydhcmlhLWV4cGFuZGVkJ10gPSBsYXRlc3RTdGF0ZS5pc09wZW4sIF9leHRlbmRzNVsnYXJpYS1sYWJlbGxlZGJ5J10gPSByZXN0ICYmIHJlc3RbJ2FyaWEtbGFiZWwnXSA/IHVuZGVmaW5lZCA6IGVsZW1lbnRJZHMubGFiZWxJZCwgX2V4dGVuZHM1LmF1dG9Db21wbGV0ZSA9ICdvZmYnLCBfZXh0ZW5kczUuaWQgPSBlbGVtZW50SWRzLmlucHV0SWQsIF9leHRlbmRzNS5yb2xlID0gJ2NvbWJvYm94JywgX2V4dGVuZHM1LnZhbHVlID0gbGF0ZXN0U3RhdGUuaW5wdXRWYWx1ZSwgX2V4dGVuZHM1KSwgZXZlbnRIYW5kbGVycywgcmVzdCk7XG4gIH0sIFtzZXRHZXR0ZXJQcm9wQ2FsbEluZm8sIGxhdGVzdCwgZWxlbWVudElkcywgaW5wdXRLZXlEb3duSGFuZGxlcnMsIGRpc3BhdGNoLCBtb3VzZUFuZFRvdWNoVHJhY2tlcnNSZWYsIGVudmlyb25tZW50XSk7XG5cbiAgLy8gcmV0dXJuc1xuICB2YXIgdG9nZ2xlTWVudSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblRvZ2dsZU1lbnVcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBjbG9zZU1lbnUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25DbG9zZU1lbnVcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBvcGVuTWVudSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvbk9wZW5NZW51XG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICB2YXIgc2V0SGlnaGxpZ2h0ZWRJbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdIaWdobGlnaHRlZEluZGV4KSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZXRIaWdobGlnaHRlZEluZGV4LFxuICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogbmV3SGlnaGxpZ2h0ZWRJbmRleFxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNlbGVjdEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25TZWxlY3RJdGVtLFxuICAgICAgc2VsZWN0ZWRJdGVtOiBuZXdTZWxlY3RlZEl0ZW1cbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBzZXRJbnB1dFZhbHVlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld0lucHV0VmFsdWUpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblNldElucHV0VmFsdWUsXG4gICAgICBpbnB1dFZhbHVlOiBuZXdJbnB1dFZhbHVlXG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICB2YXIgcmVzZXQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25SZXNldCQxXG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIC8vIHByb3AgZ2V0dGVycy5cbiAgICBnZXRJdGVtUHJvcHM6IGdldEl0ZW1Qcm9wcyxcbiAgICBnZXRMYWJlbFByb3BzOiBnZXRMYWJlbFByb3BzLFxuICAgIGdldE1lbnVQcm9wczogZ2V0TWVudVByb3BzLFxuICAgIGdldElucHV0UHJvcHM6IGdldElucHV0UHJvcHMsXG4gICAgZ2V0VG9nZ2xlQnV0dG9uUHJvcHM6IGdldFRvZ2dsZUJ1dHRvblByb3BzLFxuICAgIC8vIGFjdGlvbnMuXG4gICAgdG9nZ2xlTWVudTogdG9nZ2xlTWVudSxcbiAgICBvcGVuTWVudTogb3Blbk1lbnUsXG4gICAgY2xvc2VNZW51OiBjbG9zZU1lbnUsXG4gICAgc2V0SGlnaGxpZ2h0ZWRJbmRleDogc2V0SGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBzZXRJbnB1dFZhbHVlOiBzZXRJbnB1dFZhbHVlLFxuICAgIHNlbGVjdEl0ZW06IHNlbGVjdEl0ZW0sXG4gICAgcmVzZXQ6IHJlc2V0LFxuICAgIC8vIHN0YXRlLlxuICAgIGhpZ2hsaWdodGVkSW5kZXg6IGhpZ2hsaWdodGVkSW5kZXgsXG4gICAgaXNPcGVuOiBpc09wZW4sXG4gICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgaW5wdXRWYWx1ZTogaW5wdXRWYWx1ZVxuICB9O1xufVxuXG52YXIgZGVmYXVsdFN0YXRlVmFsdWVzID0ge1xuICBhY3RpdmVJbmRleDogLTEsXG4gIHNlbGVjdGVkSXRlbXM6IFtdXG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIGEgc3RhdGUga2V5IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKiAxLiBjb250cm9sbGVkIHByb3AsIDIuIGluaXRpYWwgcHJvcCwgMy4gZGVmYXVsdCBwcm9wLCA0LiBkZWZhdWx0XG4gKiB2YWx1ZSBmcm9tIERvd25zaGlmdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXkgUHJvcHMga2V5IHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSBmb3IuXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhhdCBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXRJbml0aWFsVmFsdWUocHJvcHMsIHByb3BLZXkpIHtcbiAgcmV0dXJuIGdldEluaXRpYWxWYWx1ZSQxKHByb3BzLCBwcm9wS2V5LCBkZWZhdWx0U3RhdGVWYWx1ZXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgc3RhdGUga2V5IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKiAxLiBjb250cm9sbGVkIHByb3AsIDIuIGRlZmF1bHQgcHJvcCwgMy4gZGVmYXVsdCB2YWx1ZSBmcm9tIERvd25zaGlmdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BLZXkgUHJvcHMga2V5IHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSBmb3IuXG4gKiBAcmV0dXJucyB7YW55fSBUaGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhhdCBwcm9wLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUocHJvcHMsIHByb3BLZXkpIHtcbiAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZSQxKHByb3BzLCBwcm9wS2V5LCBkZWZhdWx0U3RhdGVWYWx1ZXMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluaXRpYWwgc3RhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHByb3BzLiBJdCB1c2VzIGluaXRpYWwsIGRlZmF1bHRcbiAqIGFuZCBjb250cm9sbGVkIHByb3BzIHJlbGF0ZWQgdG8gc3RhdGUgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgUHJvcHMgcGFzc2VkIHRvIHRoZSBob29rLlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGluaXRpYWwgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShwcm9wcykge1xuICB2YXIgYWN0aXZlSW5kZXggPSBnZXRJbml0aWFsVmFsdWUocHJvcHMsICdhY3RpdmVJbmRleCcpO1xuICB2YXIgc2VsZWN0ZWRJdGVtcyA9IGdldEluaXRpYWxWYWx1ZShwcm9wcywgJ3NlbGVjdGVkSXRlbXMnKTtcbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVJbmRleDogYWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtczogc2VsZWN0ZWRJdGVtc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBkcm9wZG93biBrZXlkb3duIG9wZXJhdGlvbiBpcyBwZXJtaXR0ZWQuIFNob3VsZCBub3QgYmVcbiAqIGFsbG93ZWQgb24ga2V5ZG93biB3aXRoIG1vZGlmaWVyIGtleXMgKGN0cmwsIGFsdCwgc2hpZnQsIG1ldGEpLCBvblxuICogaW5wdXQgZWxlbWVudCB3aXRoIHRleHQgY29udGVudCB0aGF0IGlzIGVpdGhlciBoaWdobGlnaHRlZCBvciBzZWxlY3Rpb25cbiAqIGN1cnNvciBpcyBub3QgYXQgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgVGhlIGV2ZW50IGZyb20ga2V5ZG93bi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkKGV2ZW50KSB7XG4gIGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiZcbiAgLy8gaWYgZWxlbWVudCBpcyBhIHRleHQgaW5wdXRcbiAgZWxlbWVudC52YWx1ZSAhPT0gJycgJiYgKFxuICAvLyBhbmQgd2UgaGF2ZSB0ZXh0IGluIGl0XG4gIC8vIGFuZCBjdXJzb3IgaXMgZWl0aGVyIG5vdCBhdCB0aGUgc3RhcnQgb3IgaXMgY3VycmVudGx5IGhpZ2hsaWdodGluZyB0ZXh0LlxuICBlbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9PSAwIHx8IGVsZW1lbnQuc2VsZWN0aW9uRW5kICE9PSAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbWVzc2FnZSB0byBiZSBhZGRlZCB0byBhcmlhLWxpdmUgcmVnaW9uIHdoZW4gaXRlbSBpcyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZWxlY3Rpb25QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYTExeSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2Uoc2VsZWN0aW9uUGFyYW1ldGVycykge1xuICB2YXIgcmVtb3ZlZFNlbGVjdGVkSXRlbSA9IHNlbGVjdGlvblBhcmFtZXRlcnMucmVtb3ZlZFNlbGVjdGVkSXRlbSxcbiAgICBpdGVtVG9TdHJpbmdMb2NhbCA9IHNlbGVjdGlvblBhcmFtZXRlcnMuaXRlbVRvU3RyaW5nO1xuICByZXR1cm4gaXRlbVRvU3RyaW5nTG9jYWwocmVtb3ZlZFNlbGVjdGVkSXRlbSkgKyBcIiBoYXMgYmVlbiByZW1vdmVkLlwiO1xufVxudmFyIHByb3BUeXBlcyA9IF9leHRlbmRzKHt9LCBjb21tb25Qcm9wVHlwZXMsIHtcbiAgc2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBpbml0aWFsU2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBkZWZhdWx0U2VsZWN0ZWRJdGVtczogUHJvcFR5cGVzLmFycmF5LFxuICBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmVJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaW5pdGlhbEFjdGl2ZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBkZWZhdWx0QWN0aXZlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9uQWN0aXZlSW5kZXhDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBrZXlOYXZpZ2F0aW9uTmV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAga2V5TmF2aWdhdGlvblByZXZpb3VzOiBQcm9wVHlwZXMuc3RyaW5nXG59KTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGl0ZW1Ub1N0cmluZzogZGVmYXVsdFByb3BzJDMuaXRlbVRvU3RyaW5nLFxuICBzdGF0ZVJlZHVjZXI6IGRlZmF1bHRQcm9wcyQzLnN0YXRlUmVkdWNlcixcbiAgZW52aXJvbm1lbnQ6IGRlZmF1bHRQcm9wcyQzLmVudmlyb25tZW50LFxuICBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2U6IGdldEExMXlSZW1vdmFsTWVzc2FnZSxcbiAga2V5TmF2aWdhdGlvbk5leHQ6ICdBcnJvd1JpZ2h0JyxcbiAga2V5TmF2aWdhdGlvblByZXZpb3VzOiAnQXJyb3dMZWZ0J1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1tdXRhYmxlLWV4cG9ydHNcbnZhciB2YWxpZGF0ZVByb3BUeXBlcyA9IG5vb3A7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVQcm9wVHlwZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhvcHRpb25zLCBjYWxsZXIpIHtcbiAgICBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBvcHRpb25zLCAncHJvcCcsIGNhbGxlci5uYW1lKTtcbiAgfTtcbn1cblxudmFyIFNlbGVjdGVkSXRlbUNsaWNrID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fc2VsZWN0ZWRfaXRlbV9jbGlja19fJyA6IDA7XG52YXIgU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX3NlbGVjdGVkX2l0ZW1fa2V5ZG93bl9kZWxldGVfXycgOiAxO1xudmFyIFNlbGVjdGVkSXRlbUtleURvd25CYWNrc3BhY2UgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19zZWxlY3RlZF9pdGVtX2tleWRvd25fYmFja3NwYWNlX18nIDogMjtcbnZhciBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19zZWxlY3RlZF9pdGVtX2tleWRvd25fbmF2aWdhdGlvbl9uZXh0X18nIDogMztcbnZhciBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fc2VsZWN0ZWRfaXRlbV9rZXlkb3duX25hdmlnYXRpb25fcHJldmlvdXNfXycgOiA0O1xudmFyIERyb3Bkb3duS2V5RG93bk5hdmlnYXRpb25QcmV2aW91cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Ryb3Bkb3duX2tleWRvd25fbmF2aWdhdGlvbl9wcmV2aW91c19fJyA6IDU7XG52YXIgRHJvcGRvd25LZXlEb3duQmFja3NwYWNlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZHJvcGRvd25fa2V5ZG93bl9iYWNrc3BhY2VfXycgOiA2O1xudmFyIERyb3Bkb3duQ2xpY2sgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19kcm9wZG93bl9jbGlja19fJyA6IDc7XG52YXIgRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW0gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9hZGRfc2VsZWN0ZWRfaXRlbV9fJyA6IDg7XG52YXIgRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnX19mdW5jdGlvbl9yZW1vdmVfc2VsZWN0ZWRfaXRlbV9fJyA6IDk7XG52YXIgRnVuY3Rpb25TZXRTZWxlY3RlZEl0ZW1zID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fc2V0X3NlbGVjdGVkX2l0ZW1zX18nIDogMTA7XG52YXIgRnVuY3Rpb25TZXRBY3RpdmVJbmRleCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdfX2Z1bmN0aW9uX3NldF9hY3RpdmVfaW5kZXhfXycgOiAxMTtcbnZhciBGdW5jdGlvblJlc2V0ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ19fZnVuY3Rpb25fcmVzZXRfXycgOiAxMjtcblxudmFyIHN0YXRlQ2hhbmdlVHlwZXMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgU2VsZWN0ZWRJdGVtQ2xpY2s6IFNlbGVjdGVkSXRlbUNsaWNrLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duRGVsZXRlOiBTZWxlY3RlZEl0ZW1LZXlEb3duRGVsZXRlLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlOiBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlLFxuICBTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQ6IFNlbGVjdGVkSXRlbUtleURvd25OYXZpZ2F0aW9uTmV4dCxcbiAgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czogU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91cyxcbiAgRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzOiBEcm9wZG93bktleURvd25OYXZpZ2F0aW9uUHJldmlvdXMsXG4gIERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZTogRHJvcGRvd25LZXlEb3duQmFja3NwYWNlLFxuICBEcm9wZG93bkNsaWNrOiBEcm9wZG93bkNsaWNrLFxuICBGdW5jdGlvbkFkZFNlbGVjdGVkSXRlbTogRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW0sXG4gIEZ1bmN0aW9uUmVtb3ZlU2VsZWN0ZWRJdGVtOiBGdW5jdGlvblJlbW92ZVNlbGVjdGVkSXRlbSxcbiAgRnVuY3Rpb25TZXRTZWxlY3RlZEl0ZW1zOiBGdW5jdGlvblNldFNlbGVjdGVkSXRlbXMsXG4gIEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXg6IEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXgsXG4gIEZ1bmN0aW9uUmVzZXQ6IEZ1bmN0aW9uUmVzZXRcbn0pO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5mdW5jdGlvbiBkb3duc2hpZnRNdWx0aXBsZVNlbGVjdGlvblJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICB2YXIgdHlwZSA9IGFjdGlvbi50eXBlLFxuICAgIGluZGV4ID0gYWN0aW9uLmluZGV4LFxuICAgIHByb3BzID0gYWN0aW9uLnByb3BzLFxuICAgIHNlbGVjdGVkSXRlbSA9IGFjdGlvbi5zZWxlY3RlZEl0ZW07XG4gIHZhciBhY3RpdmVJbmRleCA9IHN0YXRlLmFjdGl2ZUluZGV4LFxuICAgIHNlbGVjdGVkSXRlbXMgPSBzdGF0ZS5zZWxlY3RlZEl0ZW1zO1xuICB2YXIgY2hhbmdlcztcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBTZWxlY3RlZEl0ZW1DbGljazpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCAtIDEgPCAwID8gMCA6IGFjdGl2ZUluZGV4IC0gMVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25OZXh0OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IGFjdGl2ZUluZGV4ICsgMSA+PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA/IC0xIDogYWN0aXZlSW5kZXggKyAxXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlOlxuICAgIGNhc2UgU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZTpcbiAgICAgIHtcbiAgICAgICAgaWYgKGFjdGl2ZUluZGV4IDwgMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBuZXdBY3RpdmVJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZUluZGV4ID09PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBuZXdBY3RpdmVJbmRleCA9IHNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMjtcbiAgICAgICAgfVxuICAgICAgICBjaGFuZ2VzID0gX2V4dGVuZHMoe1xuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLmNvbmNhdChzZWxlY3RlZEl0ZW1zLnNsaWNlKDAsIGFjdGl2ZUluZGV4KSwgc2VsZWN0ZWRJdGVtcy5zbGljZShhY3RpdmVJbmRleCArIDEpKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgYWN0aXZlSW5kZXg6IG5ld0FjdGl2ZUluZGV4XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIERyb3Bkb3duS2V5RG93bk5hdmlnYXRpb25QcmV2aW91czpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIGFjdGl2ZUluZGV4OiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZTpcbiAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IHNlbGVjdGVkSXRlbXMuc2xpY2UoMCwgc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRnVuY3Rpb25BZGRTZWxlY3RlZEl0ZW06XG4gICAgICBjaGFuZ2VzID0ge1xuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXS5jb25jYXQoc2VsZWN0ZWRJdGVtcywgW3NlbGVjdGVkSXRlbV0pXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEcm9wZG93bkNsaWNrOlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGdW5jdGlvblJlbW92ZVNlbGVjdGVkSXRlbTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9uZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtSW5kZXggPSBzZWxlY3RlZEl0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIF9uZXdBY3RpdmVJbmRleCA9IC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSXRlbUluZGV4ID09PSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBfbmV3QWN0aXZlSW5kZXggPSBzZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDI7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXS5jb25jYXQoc2VsZWN0ZWRJdGVtcy5zbGljZSgwLCBzZWxlY3RlZEl0ZW1JbmRleCksIHNlbGVjdGVkSXRlbXMuc2xpY2Uoc2VsZWN0ZWRJdGVtSW5kZXggKyAxKSksXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IF9uZXdBY3RpdmVJbmRleFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICBjYXNlIEZ1bmN0aW9uU2V0U2VsZWN0ZWRJdGVtczpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1NlbGVjdGVkSXRlbXMgPSBhY3Rpb24uc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBuZXdTZWxlY3RlZEl0ZW1zXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIGNhc2UgRnVuY3Rpb25TZXRBY3RpdmVJbmRleDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9uZXdBY3RpdmVJbmRleDIgPSBhY3Rpb24uYWN0aXZlSW5kZXg7XG4gICAgICAgIGNoYW5nZXMgPSB7XG4gICAgICAgICAgYWN0aXZlSW5kZXg6IF9uZXdBY3RpdmVJbmRleDJcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgY2FzZSBGdW5jdGlvblJlc2V0OlxuICAgICAgY2hhbmdlcyA9IHtcbiAgICAgICAgYWN0aXZlSW5kZXg6IGdldERlZmF1bHRWYWx1ZShwcm9wcywgJ2FjdGl2ZUluZGV4JyksXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IGdldERlZmF1bHRWYWx1ZShwcm9wcywgJ3NlbGVjdGVkSXRlbXMnKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgY2FsbGVkIHdpdGhvdXQgcHJvcGVyIGFjdGlvbiB0eXBlLicpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGNoYW5nZXMpO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wicmVmS2V5XCIsIFwicmVmXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcInNlbGVjdGVkSXRlbVwiLCBcImluZGV4XCJdLFxuICBfZXhjbHVkZWQyID0gW1wicmVmS2V5XCIsIFwicmVmXCIsIFwib25LZXlEb3duXCIsIFwib25DbGlja1wiLCBcInByZXZlbnRLZXlBY3Rpb25cIl07XG51c2VNdWx0aXBsZVNlbGVjdGlvbi5zdGF0ZUNoYW5nZVR5cGVzID0gc3RhdGVDaGFuZ2VUeXBlcztcbmZ1bmN0aW9uIHVzZU11bHRpcGxlU2VsZWN0aW9uKHVzZXJQcm9wcykge1xuICBpZiAodXNlclByb3BzID09PSB2b2lkIDApIHtcbiAgICB1c2VyUHJvcHMgPSB7fTtcbiAgfVxuICB2YWxpZGF0ZVByb3BUeXBlcyh1c2VyUHJvcHMsIHVzZU11bHRpcGxlU2VsZWN0aW9uKTtcbiAgLy8gUHJvcHMgZGVmYXVsdHMgYW5kIGRlc3RydWN0dXJpbmcuXG4gIHZhciBwcm9wcyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHMsIHVzZXJQcm9wcyk7XG4gIHZhciBnZXRBMTF5UmVtb3ZhbE1lc3NhZ2UgPSBwcm9wcy5nZXRBMTF5UmVtb3ZhbE1lc3NhZ2UsXG4gICAgaXRlbVRvU3RyaW5nID0gcHJvcHMuaXRlbVRvU3RyaW5nLFxuICAgIGVudmlyb25tZW50ID0gcHJvcHMuZW52aXJvbm1lbnQsXG4gICAga2V5TmF2aWdhdGlvbk5leHQgPSBwcm9wcy5rZXlOYXZpZ2F0aW9uTmV4dCxcbiAgICBrZXlOYXZpZ2F0aW9uUHJldmlvdXMgPSBwcm9wcy5rZXlOYXZpZ2F0aW9uUHJldmlvdXM7XG5cbiAgLy8gUmVkdWNlciBpbml0LlxuICB2YXIgX3VzZUNvbnRyb2xsZWRSZWR1Y2VyID0gdXNlQ29udHJvbGxlZFJlZHVjZXIkMShkb3duc2hpZnRNdWx0aXBsZVNlbGVjdGlvblJlZHVjZXIsIGdldEluaXRpYWxTdGF0ZShwcm9wcyksIHByb3BzKSxcbiAgICBzdGF0ZSA9IF91c2VDb250cm9sbGVkUmVkdWNlclswXSxcbiAgICBkaXNwYXRjaCA9IF91c2VDb250cm9sbGVkUmVkdWNlclsxXTtcbiAgdmFyIGFjdGl2ZUluZGV4ID0gc3RhdGUuYWN0aXZlSW5kZXgsXG4gICAgc2VsZWN0ZWRJdGVtcyA9IHN0YXRlLnNlbGVjdGVkSXRlbXM7XG5cbiAgLy8gUmVmcy5cbiAgdmFyIGlzSW5pdGlhbE1vdW50UmVmID0gdXNlUmVmKHRydWUpO1xuICB2YXIgZHJvcGRvd25SZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRJdGVtcyk7XG4gIHZhciBzZWxlY3RlZEl0ZW1SZWZzID0gdXNlUmVmKCk7XG4gIHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudCA9IFtdO1xuICB2YXIgbGF0ZXN0ID0gdXNlTGF0ZXN0UmVmKHtcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgcHJvcHM6IHByb3BzXG4gIH0pO1xuXG4gIC8vIEVmZmVjdHMuXG4gIC8qIFNldHMgYTExeSBzdGF0dXMgbWVzc2FnZSBvbiBjaGFuZ2VzIGluIHNlbGVjdGVkSXRlbS4gKi9cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCB8fCBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPCBwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYuY3VycmVudC5sZW5ndGgpIHtcbiAgICAgIHZhciByZW1vdmVkU2VsZWN0ZWRJdGVtID0gcHJldmlvdXNTZWxlY3RlZEl0ZW1zUmVmLmN1cnJlbnQuZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgIH0pO1xuICAgICAgc2V0U3RhdHVzKGdldEExMXlSZW1vdmFsTWVzc2FnZSh7XG4gICAgICAgIGl0ZW1Ub1N0cmluZzogaXRlbVRvU3RyaW5nLFxuICAgICAgICByZXN1bHRDb3VudDogc2VsZWN0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICAgIHJlbW92ZWRTZWxlY3RlZEl0ZW06IHJlbW92ZWRTZWxlY3RlZEl0ZW0sXG4gICAgICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleCxcbiAgICAgICAgYWN0aXZlU2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW1zW2FjdGl2ZUluZGV4XVxuICAgICAgfSksIGVudmlyb25tZW50LmRvY3VtZW50KTtcbiAgICB9XG4gICAgcHJldmlvdXNTZWxlY3RlZEl0ZW1zUmVmLmN1cnJlbnQgPSBzZWxlY3RlZEl0ZW1zO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbc2VsZWN0ZWRJdGVtcy5sZW5ndGhdKTtcbiAgLy8gU2V0cyBmb2N1cyBvbiBhY3RpdmUgaXRlbS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNJbml0aWFsTW91bnRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IC0xICYmIGRyb3Bkb3duUmVmLmN1cnJlbnQpIHtcbiAgICAgIGRyb3Bkb3duUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudFthY3RpdmVJbmRleF0pIHtcbiAgICAgIHNlbGVjdGVkSXRlbVJlZnMuY3VycmVudFthY3RpdmVJbmRleF0uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthY3RpdmVJbmRleF0pO1xuICB1c2VDb250cm9sUHJvcHNWYWxpZGF0b3Ioe1xuICAgIGlzSW5pdGlhbE1vdW50OiBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50LFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICBzdGF0ZTogc3RhdGVcbiAgfSk7XG4gIHZhciBzZXRHZXR0ZXJQcm9wQ2FsbEluZm8gPSB1c2VHZXR0ZXJQcm9wc0NhbGxlZENoZWNrZXIoJ2dldERyb3Bkb3duUHJvcHMnKTtcbiAgLy8gTWFrZSBpbml0aWFsIHJlZiBmYWxzZS5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpc0luaXRpYWxNb3VudFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzSW5pdGlhbE1vdW50UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucy5cbiAgdmFyIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVycyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmO1xuICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZba2V5TmF2aWdhdGlvblByZXZpb3VzXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU2VsZWN0ZWRJdGVtS2V5RG93bk5hdmlnYXRpb25QcmV2aW91c1xuICAgICAgfSk7XG4gICAgfSwgX3JlZltrZXlOYXZpZ2F0aW9uTmV4dF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNlbGVjdGVkSXRlbUtleURvd25OYXZpZ2F0aW9uTmV4dFxuICAgICAgfSk7XG4gICAgfSwgX3JlZi5EZWxldGUgPSBmdW5jdGlvbiBEZWxldGUoKSB7XG4gICAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNlbGVjdGVkSXRlbUtleURvd25EZWxldGVcbiAgICAgIH0pO1xuICAgIH0sIF9yZWYuQmFja3NwYWNlID0gZnVuY3Rpb24gQmFja3NwYWNlKCkge1xuICAgICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTZWxlY3RlZEl0ZW1LZXlEb3duQmFja3NwYWNlXG4gICAgICB9KTtcbiAgICB9LCBfcmVmO1xuICB9LCBbZGlzcGF0Y2gsIGtleU5hdmlnYXRpb25OZXh0LCBrZXlOYXZpZ2F0aW9uUHJldmlvdXNdKTtcbiAgdmFyIGRyb3Bkb3duS2V5RG93bkhhbmRsZXJzID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9yZWYyO1xuICAgIHJldHVybiBfcmVmMiA9IHt9LCBfcmVmMltrZXlOYXZpZ2F0aW9uUHJldmlvdXNdID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkKGV2ZW50KSkge1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIF9yZWYyLkJhY2tzcGFjZSA9IGZ1bmN0aW9uIEJhY2tzcGFjZShldmVudCkge1xuICAgICAgaWYgKGlzS2V5RG93bk9wZXJhdGlvblBlcm1pdHRlZChldmVudCkpIHtcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6IERyb3Bkb3duS2V5RG93bkJhY2tzcGFjZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBfcmVmMjtcbiAgfSwgW2Rpc3BhdGNoLCBrZXlOYXZpZ2F0aW9uUHJldmlvdXNdKTtcblxuICAvLyBHZXR0ZXIgcHJvcHMuXG4gIHZhciBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfdGVtcCkge1xuICAgIHZhciBfZXh0ZW5kczI7XG4gICAgdmFyIF9yZWYzID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsXG4gICAgICBfcmVmMyRyZWZLZXkgPSBfcmVmMy5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmMyRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjMkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjMucmVmLFxuICAgICAgb25DbGljayA9IF9yZWYzLm9uQ2xpY2ssXG4gICAgICBvbktleURvd24gPSBfcmVmMy5vbktleURvd24sXG4gICAgICBzZWxlY3RlZEl0ZW1Qcm9wID0gX3JlZjMuc2VsZWN0ZWRJdGVtLFxuICAgICAgaW5kZXhQcm9wID0gX3JlZjMuaW5kZXgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjMsIF9leGNsdWRlZCk7XG4gICAgdmFyIGxhdGVzdFN0YXRlID0gbGF0ZXN0LmN1cnJlbnQuc3RhdGU7XG4gICAgdmFyIF9nZXRJdGVtQW5kSW5kZXggPSBnZXRJdGVtQW5kSW5kZXgoc2VsZWN0ZWRJdGVtUHJvcCwgaW5kZXhQcm9wLCBsYXRlc3RTdGF0ZS5zZWxlY3RlZEl0ZW1zLCAnUGFzcyBlaXRoZXIgaXRlbSBvciBpbmRleCB0byBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyEnKSxcbiAgICAgIGluZGV4ID0gX2dldEl0ZW1BbmRJbmRleFsxXTtcbiAgICB2YXIgaXNGb2N1c2FibGUgPSBpbmRleCA+IC0xICYmIGluZGV4ID09PSBsYXRlc3RTdGF0ZS5hY3RpdmVJbmRleDtcbiAgICB2YXIgc2VsZWN0ZWRJdGVtSGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBzZWxlY3RlZEl0ZW1IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogU2VsZWN0ZWRJdGVtQ2xpY2ssXG4gICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgc2VsZWN0ZWRJdGVtSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIHNlbGVjdGVkSXRlbUhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXkgPSBub3JtYWxpemVBcnJvd0tleShldmVudCk7XG4gICAgICBpZiAoa2V5ICYmIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVyc1trZXldKSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltyZWZLZXldID0gaGFuZGxlUmVmcyhyZWYsIGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW1Ob2RlKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtTm9kZSkge1xuICAgICAgICBzZWxlY3RlZEl0ZW1SZWZzLmN1cnJlbnQucHVzaChzZWxlY3RlZEl0ZW1Ob2RlKTtcbiAgICAgIH1cbiAgICB9KSwgX2V4dGVuZHMyLnRhYkluZGV4ID0gaXNGb2N1c2FibGUgPyAwIDogLTEsIF9leHRlbmRzMi5vbkNsaWNrID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgc2VsZWN0ZWRJdGVtSGFuZGxlQ2xpY2spLCBfZXh0ZW5kczIub25LZXlEb3duID0gY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBzZWxlY3RlZEl0ZW1IYW5kbGVLZXlEb3duKSwgX2V4dGVuZHMyKSwgcmVzdCk7XG4gIH0sIFtkaXNwYXRjaCwgbGF0ZXN0LCBzZWxlY3RlZEl0ZW1LZXlEb3duSGFuZGxlcnNdKTtcbiAgdmFyIGdldERyb3Bkb3duUHJvcHMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoX3RlbXAyLCBfdGVtcDMpIHtcbiAgICB2YXIgX2V4dGVuZHMzO1xuICAgIHZhciBfcmVmNCA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsXG4gICAgICBfcmVmNCRyZWZLZXkgPSBfcmVmNC5yZWZLZXksXG4gICAgICByZWZLZXkgPSBfcmVmNCRyZWZLZXkgPT09IHZvaWQgMCA/ICdyZWYnIDogX3JlZjQkcmVmS2V5LFxuICAgICAgcmVmID0gX3JlZjQucmVmLFxuICAgICAgb25LZXlEb3duID0gX3JlZjQub25LZXlEb3duLFxuICAgICAgb25DbGljayA9IF9yZWY0Lm9uQ2xpY2ssXG4gICAgICBfcmVmNCRwcmV2ZW50S2V5QWN0aW8gPSBfcmVmNC5wcmV2ZW50S2V5QWN0aW9uLFxuICAgICAgcHJldmVudEtleUFjdGlvbiA9IF9yZWY0JHByZXZlbnRLZXlBY3RpbyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNCRwcmV2ZW50S2V5QWN0aW8sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZjQsIF9leGNsdWRlZDIpO1xuICAgIHZhciBfcmVmNSA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsXG4gICAgICBfcmVmNSRzdXBwcmVzc1JlZkVycm8gPSBfcmVmNS5zdXBwcmVzc1JlZkVycm9yLFxuICAgICAgc3VwcHJlc3NSZWZFcnJvciA9IF9yZWY1JHN1cHByZXNzUmVmRXJybyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNSRzdXBwcmVzc1JlZkVycm87XG4gICAgc2V0R2V0dGVyUHJvcENhbGxJbmZvKCdnZXREcm9wZG93blByb3BzJywgc3VwcHJlc3NSZWZFcnJvciwgcmVmS2V5LCBkcm9wZG93blJlZik7XG4gICAgdmFyIGRyb3Bkb3duSGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGRyb3Bkb3duSGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUFycm93S2V5KGV2ZW50KTtcbiAgICAgIGlmIChrZXkgJiYgZHJvcGRvd25LZXlEb3duSGFuZGxlcnNba2V5XSkge1xuICAgICAgICBkcm9wZG93bktleURvd25IYW5kbGVyc1trZXldKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBkcm9wZG93bkhhbmRsZUNsaWNrID0gZnVuY3Rpb24gZHJvcGRvd25IYW5kbGVDbGljaygpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogRHJvcGRvd25DbGlja1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gX2V4dGVuZHMoKF9leHRlbmRzMyA9IHt9LCBfZXh0ZW5kczNbcmVmS2V5XSA9IGhhbmRsZVJlZnMocmVmLCBmdW5jdGlvbiAoZHJvcGRvd25Ob2RlKSB7XG4gICAgICBpZiAoZHJvcGRvd25Ob2RlKSB7XG4gICAgICAgIGRyb3Bkb3duUmVmLmN1cnJlbnQgPSBkcm9wZG93bk5vZGU7XG4gICAgICB9XG4gICAgfSksIF9leHRlbmRzMyksICFwcmV2ZW50S2V5QWN0aW9uICYmIHtcbiAgICAgIG9uS2V5RG93bjogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25LZXlEb3duLCBkcm9wZG93bkhhbmRsZUtleURvd24pLFxuICAgICAgb25DbGljazogY2FsbEFsbEV2ZW50SGFuZGxlcnMob25DbGljaywgZHJvcGRvd25IYW5kbGVDbGljaylcbiAgICB9LCByZXN0KTtcbiAgfSwgW2Rpc3BhdGNoLCBkcm9wZG93bktleURvd25IYW5kbGVycywgc2V0R2V0dGVyUHJvcENhbGxJbmZvXSk7XG5cbiAgLy8gcmV0dXJuc1xuICB2YXIgYWRkU2VsZWN0ZWRJdGVtID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uQWRkU2VsZWN0ZWRJdGVtLFxuICAgICAgc2VsZWN0ZWRJdGVtOiBzZWxlY3RlZEl0ZW1cbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciByZW1vdmVTZWxlY3RlZEl0ZW0gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0sXG4gICAgICBzZWxlY3RlZEl0ZW06IHNlbGVjdGVkSXRlbVxuICAgIH0pO1xuICB9LCBbZGlzcGF0Y2hdKTtcbiAgdmFyIHNldFNlbGVjdGVkSXRlbXMgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3U2VsZWN0ZWRJdGVtcykge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0U2VsZWN0ZWRJdGVtcyxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IG5ld1NlbGVjdGVkSXRlbXNcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciBzZXRBY3RpdmVJbmRleCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdBY3RpdmVJbmRleCkge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uU2V0QWN0aXZlSW5kZXgsXG4gICAgICBhY3RpdmVJbmRleDogbmV3QWN0aXZlSW5kZXhcbiAgICB9KTtcbiAgfSwgW2Rpc3BhdGNoXSk7XG4gIHZhciByZXNldCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBGdW5jdGlvblJlc2V0XG4gICAgfSk7XG4gIH0sIFtkaXNwYXRjaF0pO1xuICByZXR1cm4ge1xuICAgIGdldFNlbGVjdGVkSXRlbVByb3BzOiBnZXRTZWxlY3RlZEl0ZW1Qcm9wcyxcbiAgICBnZXREcm9wZG93blByb3BzOiBnZXREcm9wZG93blByb3BzLFxuICAgIGFkZFNlbGVjdGVkSXRlbTogYWRkU2VsZWN0ZWRJdGVtLFxuICAgIHJlbW92ZVNlbGVjdGVkSXRlbTogcmVtb3ZlU2VsZWN0ZWRJdGVtLFxuICAgIHNldFNlbGVjdGVkSXRlbXM6IHNldFNlbGVjdGVkSXRlbXMsXG4gICAgc2V0QWN0aXZlSW5kZXg6IHNldEFjdGl2ZUluZGV4LFxuICAgIHJlc2V0OiByZXNldCxcbiAgICBzZWxlY3RlZEl0ZW1zOiBzZWxlY3RlZEl0ZW1zLFxuICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleFxuICB9O1xufVxuXG5leHBvcnQgeyBEb3duc2hpZnQkMSBhcyBkZWZhdWx0LCByZXNldElkQ291bnRlciwgdXNlQ29tYm9ib3gsIHVzZU11bHRpcGxlU2VsZWN0aW9uLCB1c2VTZWxlY3QgfTtcbiJdLCJuYW1lcyI6WyJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIl9leHRlbmRzIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9pbmhlcml0c0xvb3NlIiwiUHJvcFR5cGVzIiwiUmVhY3QiLCJjbG9uZUVsZW1lbnQiLCJDb21wb25lbnQiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VDYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZHVjZXIiLCJ1c2VNZW1vIiwiaXNGb3J3YXJkUmVmIiwiY29tcHV0ZSIsIl9fYXNzaWduIiwiaWRDb3VudGVyIiwiY2JUb0NiIiwiY2IiLCJub29wIiwic2Nyb2xsSW50b1ZpZXciLCJub2RlIiwibWVudU5vZGUiLCJhY3Rpb25zIiwiYm91bmRhcnkiLCJibG9jayIsInNjcm9sbE1vZGUiLCJmb3JFYWNoIiwiX3JlZiIsImVsIiwidG9wIiwibGVmdCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJpc09yQ29udGFpbnNOb2RlIiwicGFyZW50IiwiY2hpbGQiLCJlbnZpcm9ubWVudCIsInJlc3VsdCIsIk5vZGUiLCJjb250YWlucyIsImRlYm91bmNlIiwiZm4iLCJ0aW1lIiwiY2FuY2VsIiwidGltZW91dElkIiwiY2xlYXJUaW1lb3V0Iiwid3JhcHBlciIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5Iiwic2V0VGltZW91dCIsImFwcGx5IiwiY2FsbEFsbEV2ZW50SGFuZGxlcnMiLCJfbGVuMiIsImZucyIsIl9rZXkyIiwiZXZlbnQiLCJfbGVuMyIsIl9rZXkzIiwic29tZSIsImNvbmNhdCIsInByZXZlbnREb3duc2hpZnREZWZhdWx0IiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVFdmVudCIsImhhbmRsZVJlZnMiLCJfbGVuNCIsInJlZnMiLCJfa2V5NCIsInJlZiIsImN1cnJlbnQiLCJnZW5lcmF0ZUlkIiwiU3RyaW5nIiwicmVzZXRJZENvdW50ZXIiLCJjb25zb2xlIiwid2FybiIsImdldEExMXlTdGF0dXNNZXNzYWdlJDEiLCJfcmVmMiIsImlzT3BlbiIsInJlc3VsdENvdW50IiwicHJldmlvdXNSZXN1bHRDb3VudCIsInVud3JhcEFycmF5IiwiYXJnIiwiZGVmYXVsdFZhbHVlIiwiaXNBcnJheSIsImlzRE9NRWxlbWVudCIsImVsZW1lbnQiLCJ0eXBlIiwiZ2V0RWxlbWVudFByb3BzIiwicHJvcHMiLCJyZXF1aXJlZFByb3AiLCJmbk5hbWUiLCJwcm9wTmFtZSIsImVycm9yIiwic3RhdGVLZXlzIiwicGlja1N0YXRlIiwic3RhdGUiLCJrIiwiZ2V0U3RhdGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldlN0YXRlIiwia2V5IiwiaXNDb250cm9sbGVkUHJvcCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZUFycm93S2V5Iiwia2V5Q29kZSIsImluZGV4T2YiLCJpc1BsYWluT2JqZWN0Iiwib2JqIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiZ2V0SGlnaGxpZ2h0ZWRJbmRleCIsInN0YXJ0Iiwib2Zmc2V0IiwiaXRlbXMiLCJpc0l0ZW1EaXNhYmxlZCIsImNpcmN1bGFyIiwiY291bnQiLCJpdGVtc0xhc3RJbmRleCIsImhpZ2hsaWdodGVkSW5kZXgiLCJnZXROb25EaXNhYmxlZEluZGV4IiwiYmFja3dhcmRzIiwiaW5kZXgiLCJfaW5kZXgiLCJ0YXJnZXRXaXRoaW5Eb3duc2hpZnQiLCJ0YXJnZXQiLCJkb3duc2hpZnRFbGVtZW50cyIsImNoZWNrQWN0aXZlRWxlbWVudCIsImNvbnRleHROb2RlIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwidmFsaWRhdGVDb250cm9sbGVkVW5jaGFuZ2VkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwid2FybmluZ0Rlc2NyaXB0aW9uIiwicHJvcEtleSIsImNsZWFudXBTdGF0dXMiLCJkb2N1bWVudFByb3AiLCJnZXRTdGF0dXNEaXYiLCJ0ZXh0Q29udGVudCIsInNldFN0YXR1cyIsInN0YXR1cyIsImRpdiIsInN0YXR1c0RpdiIsImdldEVsZW1lbnRCeUlkIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImFzc2lnbiIsInN0eWxlIiwiYm9yZGVyIiwiY2xpcCIsImhlaWdodCIsIm1hcmdpbiIsIm92ZXJmbG93IiwicGFkZGluZyIsInBvc2l0aW9uIiwid2lkdGgiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ1bmtub3duIiwibW91c2VVcCIsIml0ZW1Nb3VzZUVudGVyIiwia2V5RG93bkFycm93VXAiLCJrZXlEb3duQXJyb3dEb3duIiwia2V5RG93bkVzY2FwZSIsImtleURvd25FbnRlciIsImtleURvd25Ib21lIiwia2V5RG93bkVuZCIsImNsaWNrSXRlbSIsImJsdXJJbnB1dCIsImNoYW5nZUlucHV0Iiwia2V5RG93blNwYWNlQnV0dG9uIiwiY2xpY2tCdXR0b24iLCJibHVyQnV0dG9uIiwiY29udHJvbGxlZFByb3BVcGRhdGVkU2VsZWN0ZWRJdGVtIiwidG91Y2hFbmQiLCJzdGF0ZUNoYW5nZVR5cGVzJDMiLCJmcmVlemUiLCJfX3Byb3RvX18iLCJfZXhjbHVkZWQkNCIsIl9leGNsdWRlZDIkMyIsIl9leGNsdWRlZDMkMiIsIl9leGNsdWRlZDQkMSIsIl9leGNsdWRlZDUiLCJEb3duc2hpZnQiLCJfQ29tcG9uZW50IiwiX3Byb3BzIiwiX3RoaXMiLCJpZCIsIm1lbnVJZCIsImxhYmVsSWQiLCJpbnB1dElkIiwiZ2V0SXRlbUlkIiwiaW5wdXQiLCJpdGVtQ291bnQiLCJ0aW1lb3V0SWRzIiwiaW50ZXJuYWxTZXRUaW1lb3V0IiwiZmlsdGVyIiwiaSIsInB1c2giLCJzZXRJdGVtQ291bnQiLCJ1bnNldEl0ZW1Db3VudCIsIl9pdGVtIiwiY3VycmVudEVsZW1lbnROb2RlIiwiZ2V0SXRlbU5vZGVGcm9tSW5kZXgiLCJoYXNBdHRyaWJ1dGUiLCJzZXRIaWdobGlnaHRlZEluZGV4Iiwib3RoZXJTdGF0ZVRvU2V0IiwiZGVmYXVsdEhpZ2hsaWdodGVkSW5kZXgiLCJpbnRlcm5hbFNldFN0YXRlIiwiY2xlYXJTZWxlY3Rpb24iLCJzZWxlY3RlZEl0ZW0iLCJpbnB1dFZhbHVlIiwiZGVmYXVsdElzT3BlbiIsInNlbGVjdEl0ZW0iLCJpdGVtIiwiaXRlbVRvU3RyaW5nIiwic2VsZWN0SXRlbUF0SW5kZXgiLCJpdGVtSW5kZXgiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzdGF0ZVRvU2V0IiwiaXNJdGVtU2VsZWN0ZWQiLCJvbkNoYW5nZUFyZyIsIm9uU3RhdGVDaGFuZ2VBcmciLCJpc1N0YXRlVG9TZXRGdW5jdGlvbiIsIm9uSW5wdXRWYWx1ZUNoYW5nZSIsImdldFN0YXRlQW5kSGVscGVycyIsInNldFN0YXRlIiwibmV3U3RhdGVUb1NldCIsInN0YXRlUmVkdWNlciIsIm5leHRTdGF0ZSIsImhhc01vcmVTdGF0ZVRoYW5UeXBlIiwib25TdGF0ZUNoYW5nZSIsIm9uU2VsZWN0Iiwib25DaGFuZ2UiLCJvblVzZXJBY3Rpb24iLCJyb290UmVmIiwiX3Jvb3ROb2RlIiwiZ2V0Um9vdFByb3BzIiwiX3RlbXAiLCJfdGVtcDIiLCJfZXh0ZW5kczIiLCJfcmVmJHJlZktleSIsInJlZktleSIsInJlc3QiLCJfcmVmMiRzdXBwcmVzc1JlZkVycm8iLCJzdXBwcmVzc1JlZkVycm9yIiwiY2FsbGVkIiwiX3RoaXMkZ2V0U3RhdGUiLCJyb2xlIiwia2V5RG93bkhhbmRsZXJzIiwiQXJyb3dEb3duIiwiX3RoaXMyIiwicHJldmVudERlZmF1bHQiLCJhbW91bnQiLCJzaGlmdEtleSIsIm1vdmVIaWdobGlnaHRlZEluZGV4IiwiZ2V0SXRlbUNvdW50IiwiX3RoaXMyJGdldFN0YXRlIiwibmV4dEhpZ2hsaWdodGVkSW5kZXgiLCJBcnJvd1VwIiwiX3RoaXMzIiwiX3RoaXMzJGdldFN0YXRlIiwiRW50ZXIiLCJ3aGljaCIsIl90aGlzJGdldFN0YXRlMiIsIml0ZW1Ob2RlIiwiRXNjYXBlIiwicmVzZXQiLCJidXR0b25LZXlEb3duSGFuZGxlcnMiLCJfIiwidG9nZ2xlTWVudSIsImlucHV0S2V5RG93bkhhbmRsZXJzIiwiSG9tZSIsIl90aGlzJGdldFN0YXRlMyIsIm5ld0hpZ2hsaWdodGVkSW5kZXgiLCJFbmQiLCJfdGhpcyRnZXRTdGF0ZTQiLCJnZXRUb2dnbGVCdXR0b25Qcm9wcyIsIl90ZW1wMyIsIl9yZWYzIiwib25DbGljayIsIm9uUHJlc3MiLCJvbktleURvd24iLCJvbktleVVwIiwib25CbHVyIiwiX3RoaXMkZ2V0U3RhdGU1IiwiZW5hYmxlZEV2ZW50SGFuZGxlcnMiLCJidXR0b25IYW5kbGVDbGljayIsImJ1dHRvbkhhbmRsZUtleURvd24iLCJidXR0b25IYW5kbGVLZXlVcCIsImJ1dHRvbkhhbmRsZUJsdXIiLCJldmVudEhhbmRsZXJzIiwiZGlzYWJsZWQiLCJmb2N1cyIsImJsdXJUYXJnZXQiLCJpc01vdXNlRG93biIsImdldExhYmVsUHJvcHMiLCJodG1sRm9yIiwiZ2V0SW5wdXRQcm9wcyIsIl90ZW1wNCIsIl9yZWY0Iiwib25JbnB1dCIsIm9uQ2hhbmdlVGV4dCIsIm9uQ2hhbmdlS2V5IiwiX3RoaXMkZ2V0U3RhdGU2IiwiX2V2ZW50SGFuZGxlcnMiLCJpbnB1dEhhbmRsZUNoYW5nZSIsImlucHV0SGFuZGxlS2V5RG93biIsImlucHV0SGFuZGxlQmx1ciIsImF1dG9Db21wbGV0ZSIsInZhbHVlIiwiZG93bnNoaWZ0QnV0dG9uSXNBY3RpdmUiLCJkYXRhc2V0IiwidG9nZ2xlIiwibWVudVJlZiIsIl9tZW51Tm9kZSIsImdldE1lbnVQcm9wcyIsIl90ZW1wNSIsIl90ZW1wNiIsIl9leHRlbmRzMyIsIl9yZWY1IiwiX3JlZjUkcmVmS2V5IiwiX3JlZjYiLCJfcmVmNiRzdXBwcmVzc1JlZkVycm8iLCJnZXRJdGVtUHJvcHMiLCJfdGVtcDciLCJfZW5hYmxlZEV2ZW50SGFuZGxlcnMiLCJfcmVmNyIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZURvd24iLCJfcmVmNyRpdGVtIiwib25TZWxlY3RLZXkiLCJjdXN0b21DbGlja0hhbmRsZXIiLCJhdm9pZFNjcm9sbGluZyIsImNsZWFySXRlbXMiLCJfcmVmOCIsIl9yZWY5IiwiX3RoaXMkZ2V0U3RhdGU3Iiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJ1cGRhdGVTdGF0dXMiLCJnZXRBMTF5U3RhdHVzTWVzc2FnZSIsImhpZ2hsaWdodGVkSXRlbSIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkaW5pdGlhbEhpIiwiaW5pdGlhbEhpZ2hsaWdodGVkSW5kZXgiLCJfaGlnaGxpZ2h0ZWRJbmRleCIsIl90aGlzJHByb3BzJGluaXRpYWxJcyIsImluaXRpYWxJc09wZW4iLCJfaXNPcGVuIiwiX3RoaXMkcHJvcHMkaW5pdGlhbEluIiwiaW5pdGlhbElucHV0VmFsdWUiLCJfaW5wdXRWYWx1ZSIsIl90aGlzJHByb3BzJGluaXRpYWxTZSIsImluaXRpYWxTZWxlY3RlZEl0ZW0iLCJfc2VsZWN0ZWRJdGVtIiwiX3N0YXRlIiwiX3Byb3RvIiwiaW50ZXJuYWxDbGVhclRpbWVvdXRzIiwiZ2V0U3RhdGUkMSIsInN0YXRlVG9NZXJnZSIsInNjcm9sbEhpZ2hsaWdodGVkSXRlbUludG9WaWV3IiwiX3RoaXMkZ2V0U3RhdGU4IiwiX3RoaXMkZ2V0U3RhdGU5IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpczQiLCJ2YWxpZGF0ZUdldE1lbnVQcm9wc0NhbGxlZENvcnJlY3RseSIsIm9uTW91c2VVcCIsImNvbnRleHRXaXRoaW5Eb3duc2hpZnQiLCJvbk91dGVyQ2xpY2siLCJvblRvdWNoU3RhcnQiLCJpc1RvdWNoTW92ZSIsIm9uVG91Y2hNb3ZlIiwib25Ub3VjaEVuZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGVhbnVwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNob3VsZFNjcm9sbCIsIl9yZWYxMCIsImN1cnJlbnRIaWdobGlnaHRlZEluZGV4IiwiX3JlZjExIiwicHJldkhpZ2hsaWdodGVkSW5kZXgiLCJzY3JvbGxXaGVuT3BlbiIsInNjcm9sbFdoZW5OYXZpZ2F0aW5nIiwiY29tcG9uZW50RGlkVXBkYXRlIiwic2VsZWN0ZWRJdGVtQ2hhbmdlZCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJ2YWxpZGF0ZUdldFJvb3RQcm9wc0NhbGxlZENvcnJlY3RseSIsIkVycm9yIiwiZGVmYXVsdFByb3BzIiwicHJldkl0ZW0iLCJ3aW5kb3ciLCJzdGF0ZUNoYW5nZVR5cGVzIiwicHJvcFR5cGVzIiwiZnVuYyIsIm51bWJlciIsImJvb2wiLCJhbnkiLCJzdHJpbmciLCJzaGFwZSIsImlzUmVxdWlyZWQiLCJEb3duc2hpZnQkMSIsIl9yZWYxMiIsIl9yZWYxMyIsInJlZktleVNwZWNpZmllZCIsImlzQ29tcG9zaXRlIiwiX2V4Y2x1ZGVkJDMiLCJkcm9wZG93bkRlZmF1bHRTdGF0ZVZhbHVlcyIsImNhbGxPbkNoYW5nZVByb3BzIiwiYWN0aW9uIiwibmV3U3RhdGUiLCJjaGFuZ2VzIiwiaW52b2tlT25DaGFuZ2VIYW5kbGVyIiwiaGFuZGxlciIsImNhcGl0YWxpemVTdHJpbmciLCJzIiwiYSIsImdldEExMXlTZWxlY3Rpb25NZXNzYWdlIiwic2VsZWN0aW9uUGFyYW1ldGVycyIsIml0ZW1Ub1N0cmluZ0xvY2FsIiwidXBkYXRlQTExeVN0YXR1cyIsImdldEExMXlNZXNzYWdlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUVsZW1lbnRJZHMiLCJ0b2dnbGVCdXR0b25JZCIsInJlYWN0SWQiLCJ1c2VJZCIsImVsZW1lbnRJZHNSZWYiLCJfcmVmMiRpZCIsImdldEl0ZW1BbmRJbmRleCIsIml0ZW1Qcm9wIiwiaW5kZXhQcm9wIiwiZXJyb3JNZXNzYWdlIiwiaXNBY2NlcHRlZENoYXJhY3RlcktleSIsInRlc3QiLCJzbGljZSIsInRvVXBwZXJDYXNlIiwidXNlTGF0ZXN0UmVmIiwidmFsIiwidXNlRW5oYW5jZWRSZWR1Y2VyIiwicmVkdWNlciIsImluaXRpYWxTdGF0ZSIsInByZXZTdGF0ZVJlZiIsImFjdGlvblJlZiIsImVuaGFuY2VkUmVkdWNlciIsIl91c2VSZWR1Y2VyIiwiZGlzcGF0Y2giLCJwcm9wc1JlZiIsImRpc3BhdGNoV2l0aFByb3BzIiwidXNlQ29udHJvbGxlZFJlZHVjZXIkMSIsIl91c2VFbmhhbmNlZFJlZHVjZXIiLCJkZWZhdWx0UHJvcHMkMyIsImdldERlZmF1bHRWYWx1ZSQxIiwiZGVmYXVsdFN0YXRlVmFsdWVzIiwiZ2V0SW5pdGlhbFZhbHVlJDEiLCJpbml0aWFsVmFsdWUiLCJnZXRJbml0aWFsU3RhdGUkMiIsImdldEhpZ2hsaWdodGVkSW5kZXhPbk9wZW4iLCJ1c2VNb3VzZUFuZFRvdWNoVHJhY2tlciIsImRvd25zaGlmdEVsZW1lbnRSZWZzIiwiaGFuZGxlQmx1ciIsIm1vdXNlQW5kVG91Y2hUcmFja2Vyc1JlZiIsIm1hcCIsInVzZUdldHRlclByb3BzQ2FsbGVkQ2hlY2tlciIsImlzSW5pdGlhbE1vdW50UmVmIiwicHJvcEtleXMiLCJnZXR0ZXJQcm9wc0NhbGxlZFJlZiIsImFjYyIsInByb3BDYWxsSW5mbyIsImVsZW1lbnRSZWYiLCJzZXRHZXR0ZXJQcm9wQ2FsbEluZm8iLCJ1c2VBMTF5TWVzc2FnZVNldHRlciIsImRlcGVuZGVuY3lBcnJheSIsImlzSW5pdGlhbE1vdW50IiwidXNlU2Nyb2xsSW50b1ZpZXciLCJpdGVtUmVmcyIsIm1lbnVFbGVtZW50Iiwic2Nyb2xsSW50b1ZpZXdQcm9wIiwic2hvdWxkU2Nyb2xsUmVmIiwidXNlQ29udHJvbFByb3BzVmFsaWRhdG9yIiwicHJldlByb3BzUmVmIiwiZ2V0Q2hhbmdlc09uU2VsZWN0aW9uIiwiX3Byb3BzJGl0ZW1zIiwic2hvdWxkU2VsZWN0IiwiY29tbW9uUHJvcFR5cGVzIiwiY29tbW9uRHJvcGRvd25Qcm9wVHlwZXMiLCJkZWZhdWx0U2VsZWN0ZWRJdGVtIiwib25TZWxlY3RlZEl0ZW1DaGFuZ2UiLCJvbkhpZ2hsaWdodGVkSW5kZXhDaGFuZ2UiLCJvbklzT3BlbkNoYW5nZSIsImRvd25zaGlmdENvbW1vblJlZHVjZXIiLCJJdGVtTW91c2VNb3ZlIiwiTWVudU1vdXNlTGVhdmUiLCJUb2dnbGVCdXR0b25DbGljayIsIkZ1bmN0aW9uVG9nZ2xlTWVudSIsIkZ1bmN0aW9uT3Blbk1lbnUiLCJGdW5jdGlvbkNsb3NlTWVudSIsIkZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCIsIkZ1bmN0aW9uU2V0SW5wdXRWYWx1ZSIsIkZ1bmN0aW9uUmVzZXQiLCJnZXRJdGVtSW5kZXhCeUNoYXJhY3RlcktleSIsIl9hIiwia2V5c1NvRmFyIiwibG93ZXJDYXNlZEtleXNTb0ZhciIsInRvTG93ZXJDYXNlIiwib2Zmc2V0SW5kZXgiLCJzdGFydHNXaXRoIiwicHJvcFR5cGVzJDIiLCJhcnJheSIsImRlZmF1bHRQcm9wcyQyIiwidmFsaWRhdGVQcm9wVHlwZXMkMiIsIm9wdGlvbnMiLCJjYWxsZXIiLCJjaGVja1Byb3BUeXBlcyIsIm5hbWUiLCJUb2dnbGVCdXR0b25DbGljayQxIiwiVG9nZ2xlQnV0dG9uS2V5RG93bkFycm93RG93biIsIlRvZ2dsZUJ1dHRvbktleURvd25BcnJvd1VwIiwiVG9nZ2xlQnV0dG9uS2V5RG93bkNoYXJhY3RlciIsIlRvZ2dsZUJ1dHRvbktleURvd25Fc2NhcGUiLCJUb2dnbGVCdXR0b25LZXlEb3duSG9tZSIsIlRvZ2dsZUJ1dHRvbktleURvd25FbmQiLCJUb2dnbGVCdXR0b25LZXlEb3duRW50ZXIiLCJUb2dnbGVCdXR0b25LZXlEb3duU3BhY2VCdXR0b24iLCJUb2dnbGVCdXR0b25LZXlEb3duUGFnZVVwIiwiVG9nZ2xlQnV0dG9uS2V5RG93blBhZ2VEb3duIiwiVG9nZ2xlQnV0dG9uQmx1ciIsIk1lbnVNb3VzZUxlYXZlJDEiLCJJdGVtTW91c2VNb3ZlJDEiLCJJdGVtQ2xpY2skMSIsIkZ1bmN0aW9uVG9nZ2xlTWVudSQxIiwiRnVuY3Rpb25PcGVuTWVudSQxIiwiRnVuY3Rpb25DbG9zZU1lbnUkMSIsIkZ1bmN0aW9uU2V0SGlnaGxpZ2h0ZWRJbmRleCQxIiwiRnVuY3Rpb25TZWxlY3RJdGVtJDEiLCJGdW5jdGlvblNldElucHV0VmFsdWUkMSIsIkZ1bmN0aW9uUmVzZXQkMiIsInN0YXRlQ2hhbmdlVHlwZXMkMiIsIkl0ZW1DbGljayIsIkZ1bmN0aW9uU2VsZWN0SXRlbSIsImRvd25zaGlmdFNlbGVjdFJlZHVjZXIiLCJhbHRLZXkiLCJsb3dlcmNhc2VkS2V5IiwiX2hpZ2hsaWdodGVkSW5kZXgyIiwiX2V4Y2x1ZGVkJDIiLCJfZXhjbHVkZWQyJDIiLCJfZXhjbHVkZWQzJDEiLCJ1c2VTZWxlY3QiLCJ1c2VyUHJvcHMiLCJfdXNlQ29udHJvbGxlZFJlZHVjZXIiLCJ0b2dnbGVCdXR0b25SZWYiLCJjbGVhclRpbWVvdXRSZWYiLCJlbGVtZW50SWRzIiwicHJldmlvdXNSZXN1bHRDb3VudFJlZiIsImxhdGVzdCIsIm91dGVyRGlzcGF0Y2giLCJmb2N1c09uT3BlbiIsInRvZ2dsZUJ1dHRvbktleURvd25IYW5kbGVycyIsIlBhZ2VVcCIsIlBhZ2VEb3duIiwiY3VycmVudFN0YXRlIiwibmV3U2VsZWN0ZWRJdGVtIiwic2V0SW5wdXRWYWx1ZSIsIm5ld0lucHV0VmFsdWUiLCJsYWJlbFByb3BzIiwib25Nb3VzZUxlYXZlIiwibWVudUhhbmRsZU1vdXNlTGVhdmUiLCJfcmVmMyRyZWZLZXkiLCJfcmVmNCRzdXBwcmVzc1JlZkVycm8iLCJsYXRlc3RTdGF0ZSIsInRvZ2dsZUJ1dHRvbkhhbmRsZUNsaWNrIiwidG9nZ2xlQnV0dG9uSGFuZGxlQmx1ciIsInRvZ2dsZUJ1dHRvbkhhbmRsZUtleURvd24iLCJ0b2dnbGVQcm9wcyIsInRvZ2dsZUJ1dHRvbk5vZGUiLCJ0YWJJbmRleCIsIl9leHRlbmRzNCIsImRpc2FibGVkUHJvcCIsIl9sYXRlc3QkY3VycmVudCIsImxhdGVzdFByb3BzIiwiX2dldEl0ZW1BbmRJbmRleCIsIml0ZW1IYW5kbGVNb3VzZU1vdmUiLCJpdGVtSGFuZGxlQ2xpY2siLCJpdGVtUHJvcHMiLCJJbnB1dEtleURvd25BcnJvd0Rvd24iLCJJbnB1dEtleURvd25BcnJvd1VwIiwiSW5wdXRLZXlEb3duRXNjYXBlIiwiSW5wdXRLZXlEb3duSG9tZSIsIklucHV0S2V5RG93bkVuZCIsIklucHV0S2V5RG93blBhZ2VVcCIsIklucHV0S2V5RG93blBhZ2VEb3duIiwiSW5wdXRLZXlEb3duRW50ZXIiLCJJbnB1dENoYW5nZSIsIklucHV0Qmx1ciIsIklucHV0Q2xpY2siLCJGdW5jdGlvblJlc2V0JDEiLCJDb250cm9sbGVkUHJvcFVwZGF0ZWRTZWxlY3RlZEl0ZW0iLCJzdGF0ZUNoYW5nZVR5cGVzJDEiLCJnZXRJbml0aWFsU3RhdGUkMSIsImRlZmF1bHRJbnB1dFZhbHVlIiwicHJvcFR5cGVzJDEiLCJ1c2VDb250cm9sbGVkUmVkdWNlciIsInByZXZpb3VzU2VsZWN0ZWRJdGVtUmVmIiwidmFsaWRhdGVQcm9wVHlwZXMkMSIsInZhbGlkYXRlUHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzJDEiLCJkb3duc2hpZnRVc2VDb21ib2JveFJlZHVjZXIiLCJfZXhjbHVkZWQkMSIsIl9leGNsdWRlZDIkMSIsIl9leGNsdWRlZDMiLCJfZXhjbHVkZWQ0IiwidXNlQ29tYm9ib3giLCJpbnB1dFJlZiIsIl9lbnZpcm9ubWVudCRkb2N1bWVudCIsIl9pbnB1dFJlZiRjdXJyZW50IiwiaXRlbUhhbmRsZU1vdXNlRG93biIsImUiLCJfZXh0ZW5kczUiLCJfcmVmNiRyZWZLZXkiLCJfcmVmNyRzdXBwcmVzc1JlZkVycm8iLCJpc0JsdXJCeVRhYkNoYW5nZSIsInJlbGF0ZWRUYXJnZXQiLCJpbnB1dEhhbmRsZUNsaWNrIiwiaW5wdXROb2RlIiwiYWN0aXZlSW5kZXgiLCJzZWxlY3RlZEl0ZW1zIiwiZ2V0SW5pdGlhbFZhbHVlIiwiZ2V0RGVmYXVsdFZhbHVlIiwiZ2V0SW5pdGlhbFN0YXRlIiwiaXNLZXlEb3duT3BlcmF0aW9uUGVybWl0dGVkIiwibWV0YUtleSIsImN0cmxLZXkiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJnZXRBMTF5UmVtb3ZhbE1lc3NhZ2UiLCJyZW1vdmVkU2VsZWN0ZWRJdGVtIiwiaW5pdGlhbFNlbGVjdGVkSXRlbXMiLCJkZWZhdWx0U2VsZWN0ZWRJdGVtcyIsImluaXRpYWxBY3RpdmVJbmRleCIsImRlZmF1bHRBY3RpdmVJbmRleCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiLCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UiLCJrZXlOYXZpZ2F0aW9uTmV4dCIsImtleU5hdmlnYXRpb25QcmV2aW91cyIsIlNlbGVjdGVkSXRlbUNsaWNrIiwiU2VsZWN0ZWRJdGVtS2V5RG93bkRlbGV0ZSIsIlNlbGVjdGVkSXRlbUtleURvd25CYWNrc3BhY2UiLCJTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvbk5leHQiLCJTZWxlY3RlZEl0ZW1LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzIiwiRHJvcGRvd25LZXlEb3duTmF2aWdhdGlvblByZXZpb3VzIiwiRHJvcGRvd25LZXlEb3duQmFja3NwYWNlIiwiRHJvcGRvd25DbGljayIsIkZ1bmN0aW9uQWRkU2VsZWN0ZWRJdGVtIiwiRnVuY3Rpb25SZW1vdmVTZWxlY3RlZEl0ZW0iLCJGdW5jdGlvblNldFNlbGVjdGVkSXRlbXMiLCJGdW5jdGlvblNldEFjdGl2ZUluZGV4IiwiZG93bnNoaWZ0TXVsdGlwbGVTZWxlY3Rpb25SZWR1Y2VyIiwibmV3QWN0aXZlSW5kZXgiLCJfbmV3QWN0aXZlSW5kZXgiLCJzZWxlY3RlZEl0ZW1JbmRleCIsIm5ld1NlbGVjdGVkSXRlbXMiLCJfbmV3QWN0aXZlSW5kZXgyIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsInVzZU11bHRpcGxlU2VsZWN0aW9uIiwiZHJvcGRvd25SZWYiLCJwcmV2aW91c1NlbGVjdGVkSXRlbXNSZWYiLCJzZWxlY3RlZEl0ZW1SZWZzIiwiZmluZCIsImFjdGl2ZVNlbGVjdGVkSXRlbSIsInNlbGVjdGVkSXRlbUtleURvd25IYW5kbGVycyIsIkRlbGV0ZSIsIkJhY2tzcGFjZSIsImRyb3Bkb3duS2V5RG93bkhhbmRsZXJzIiwiZ2V0U2VsZWN0ZWRJdGVtUHJvcHMiLCJzZWxlY3RlZEl0ZW1Qcm9wIiwiaXNGb2N1c2FibGUiLCJzZWxlY3RlZEl0ZW1IYW5kbGVDbGljayIsInNlbGVjdGVkSXRlbUhhbmRsZUtleURvd24iLCJzZWxlY3RlZEl0ZW1Ob2RlIiwiZ2V0RHJvcGRvd25Qcm9wcyIsIl9yZWY0JHJlZktleSIsIl9yZWY0JHByZXZlbnRLZXlBY3RpbyIsInByZXZlbnRLZXlBY3Rpb24iLCJfcmVmNSRzdXBwcmVzc1JlZkVycm8iLCJkcm9wZG93bkhhbmRsZUtleURvd24iLCJkcm9wZG93bkhhbmRsZUNsaWNrIiwiZHJvcGRvd25Ob2RlIiwiYWRkU2VsZWN0ZWRJdGVtIiwicmVtb3ZlU2VsZWN0ZWRJdGVtIiwic2V0U2VsZWN0ZWRJdGVtcyIsInNldEFjdGl2ZUluZGV4IiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/dist/downshift.esm.js\n");
4129
4129
 
4130
4130
  /***/ }),
4131
4131
 
@@ -4897,7 +4897,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
4897
4897
  /***/ ((__unused_webpack_module, exports) => {
4898
4898
 
4899
4899
  "use strict";
4900
- eval("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \nif (true) {\n (function() {\n \"use strict\";\n var isValidElementType = function isValidElementType(type) {\n if (typeof type === \"string\" || typeof type === \"function\") {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) {\n return true;\n }\n if (typeof type === \"object\" && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n return false;\n };\n var typeOf = function typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n var $$typeof = object.$$typeof;\n switch($$typeof){\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n default:\n var $$typeofType = type && type.$$typeof;\n switch($$typeofType){\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n return undefined;\n };\n var isAsyncMode = function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isAsyncMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isConcurrentMode = function isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isConcurrentMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isContextConsumer = function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n var isContextProvider = function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n };\n var isElement = function isElement(object) {\n return typeof object === \"object\" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n var isForwardRef = function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n var isFragment = function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n var isLazy = function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n var isMemo = function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n var isPortal = function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n var isProfiler = function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n var isStrictMode = function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n var isSuspense = function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n var isSuspenseList = function isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n // ATTENTION\n // When adding new symbols to this file,\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n // The Symbol used to tag the ReactElement-like types.\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.element\");\n var REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\n var REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\n var REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\");\n var REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n var REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\");\n var REACT_CONTEXT_TYPE = Symbol.for(\"react.context\");\n var REACT_SERVER_CONTEXT_TYPE = Symbol.for(\"react.server_context\");\n var REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\n var REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\");\n var REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\");\n var REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\n var REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n var REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\n // -----------------------------------------------------------------------------\n var enableScopeAPI = false; // Experimental Create Event Handle API.\n var enableCacheElement = false;\n var enableTransitionTracing = false; // No known bugs, but needs performance testing\n var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n // stuff. Intended to enable React core members to more easily debug scheduling\n // issues in DEV builds.\n var enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n var REACT_MODULE_REFERENCE;\n {\n REACT_MODULE_REFERENCE = Symbol.for(\"react.module.reference\");\n }\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false;\n var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.SuspenseList = SuspenseList;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isSuspenseList = isSuspenseList;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVEO0FBRUEsSUFBSUEsSUFBcUMsRUFBRTtJQUN4QyxZQUFXO1FBQ2Q7WUF1Q1NHLHFCQUFULFNBQVNBLG1CQUFtQkMsSUFBSSxFQUFFO1lBQ2hDLElBQUksT0FBT0EsU0FBUyxZQUFZLE9BQU9BLFNBQVMsWUFBWTtnQkFDMUQsT0FBTyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLG1GQUFtRjtZQUdyRixJQUFJQSxTQUFTQyx1QkFBdUJELFNBQVNFLHVCQUF1QkMsc0JBQXVCSCxTQUFTSSwwQkFBMEJKLFNBQVNLLHVCQUF1QkwsU0FBU00sNEJBQTRCQyxzQkFBdUJQLFNBQVNRLHdCQUF3QkMsa0JBQW1CQyxzQkFBdUJDLHlCQUEwQjtnQkFDN1QsT0FBTyxJQUFJO1lBQ2IsQ0FBQztZQUVELElBQUksT0FBT1gsU0FBUyxZQUFZQSxTQUFTLElBQUksRUFBRTtnQkFDN0MsSUFBSUEsS0FBS1ksUUFBUSxLQUFLQyxtQkFBbUJiLEtBQUtZLFFBQVEsS0FBS0UsbUJBQW1CZCxLQUFLWSxRQUFRLEtBQUtHLHVCQUF1QmYsS0FBS1ksUUFBUSxLQUFLSSxzQkFBc0JoQixLQUFLWSxRQUFRLEtBQUtLLDBCQUEwQiw2REFBNkQ7Z0JBQ3hRLDZEQUE2RDtnQkFDN0QsK0RBQStEO2dCQUMvRCxRQUFRO2dCQUNSakIsS0FBS1ksUUFBUSxLQUFLTSwwQkFBMEJsQixLQUFLbUIsV0FBVyxLQUFLQyxXQUFXO29CQUMxRSxPQUFPLElBQUk7Z0JBQ2IsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLEtBQUs7UUFDZDtZQUVTQyxTQUFULFNBQVNBLE9BQU9DLE1BQU0sRUFBRTtZQUN0QixJQUFJLE9BQU9BLFdBQVcsWUFBWUEsV0FBVyxJQUFJLEVBQUU7Z0JBQ2pELElBQUlWLFdBQVdVLE9BQU9WLFFBQVE7Z0JBRTlCLE9BQVFBO29CQUNO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ZSxHQUFHVjtRQUNsQlUsa0JBQWtCLEdBQUdUO1FBQ3JCUyxnQkFBZ0IsR0FBR1I7UUFDbkJRLFlBQVksR0FBR1A7UUFDZk8sWUFBWSxHQUFHTjtRQUNmTSxjQUFjLEdBQUdMO1FBQ2pCSyxnQkFBZ0IsR0FBR0o7UUFDbkJJLGtCQUFrQixHQUFHSDtRQUNyQkcsZ0JBQWdCLEdBQUdGO1FBQ25CRSxvQkFBb0IsR0FBR0Q7UUFDdkJDLG1CQUFtQixHQUFHL0I7UUFDdEIrQix3QkFBd0IsR0FBRzVCO1FBQzNCNEIseUJBQXlCLEdBQUcxQjtRQUM1QjBCLHlCQUF5QixHQUFHekI7UUFDNUJ5QixpQkFBaUIsR0FBR3hCO1FBQ3BCd0Isb0JBQW9CLEdBQUd2QjtRQUN2QnVCLGtCQUFrQixHQUFHdEI7UUFDckJzQixjQUFjLEdBQUdyQjtRQUNqQnFCLGNBQWMsR0FBR3BCO1FBQ2pCb0IsZ0JBQWdCLEdBQUduQjtRQUNuQm1CLGtCQUFrQixHQUFHbEI7UUFDckJrQixvQkFBb0IsR0FBR2pCO1FBQ3ZCaUIsa0JBQWtCLEdBQUdoQjtRQUNyQmdCLHNCQUFzQixHQUFHZjtRQUN6QmUsMEJBQTBCLEdBQUczRDtRQUM3QjJELGNBQWMsR0FBR3JDO0lBQ2Y7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzPzQzZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VMaXN0KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLlN1c3BlbnNlTGlzdCA9IFN1c3BlbnNlTGlzdDtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGlzU3VzcGVuc2VMaXN0O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ0eXBlIiwiUkVBQ1RfRlJBR01FTlRfVFlQRSIsIlJFQUNUX1BST0ZJTEVSX1RZUEUiLCJlbmFibGVEZWJ1Z1RyYWNpbmciLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsImVuYWJsZUxlZ2FjeUhpZGRlbiIsIlJFQUNUX09GRlNDUkVFTl9UWVBFIiwiZW5hYmxlU2NvcGVBUEkiLCJlbmFibGVDYWNoZUVsZW1lbnQiLCJlbmFibGVUcmFuc2l0aW9uVHJhY2luZyIsIiQkdHlwZW9mIiwiUkVBQ1RfTEFaWV9UWVBFIiwiUkVBQ1RfTUVNT19UWVBFIiwiUkVBQ1RfUFJPVklERVJfVFlQRSIsIlJFQUNUX0NPTlRFWFRfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJSRUFDVF9NT0RVTEVfUkVGRVJFTkNFIiwiZ2V0TW9kdWxlSWQiLCJ1bmRlZmluZWQiLCJ0eXBlT2YiLCJvYmplY3QiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCIkJHR5cGVvZlR5cGUiLCJSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJpc0FzeW5jTW9kZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlIiwiY29uc29sZSIsImlzQ29uY3VycmVudE1vZGUiLCJoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlIiwiaXNDb250ZXh0Q29uc3VtZXIiLCJpc0NvbnRleHRQcm92aWRlciIsImlzRWxlbWVudCIsImlzRm9yd2FyZFJlZiIsImlzRnJhZ21lbnQiLCJpc0xhenkiLCJpc01lbW8iLCJpc1BvcnRhbCIsImlzUHJvZmlsZXIiLCJpc1N0cmljdE1vZGUiLCJpc1N1c3BlbnNlIiwiaXNTdXNwZW5zZUxpc3QiLCJTeW1ib2wiLCJmb3IiLCJDb250ZXh0Q29uc3VtZXIiLCJDb250ZXh0UHJvdmlkZXIiLCJFbGVtZW50IiwiRm9yd2FyZFJlZiIsIkZyYWdtZW50IiwiTGF6eSIsIk1lbW8iLCJQb3J0YWwiLCJQcm9maWxlciIsIlN0cmljdE1vZGUiLCJTdXNwZW5zZSIsIlN1c3BlbnNlTGlzdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/react-is/cjs/react-is.development.js\n");
4900
+ eval("/** @license React v17.0.2\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */ \nif (true) {\n (function() {\n \"use strict\";\n var isValidElementType = function isValidElementType(type) {\n if (typeof type === \"string\" || typeof type === \"function\") {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI) {\n return true;\n }\n if (typeof type === \"object\" && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {\n return true;\n }\n }\n return false;\n };\n var typeOf = function typeOf(object) {\n if (typeof object === \"object\" && object !== null) {\n var $$typeof = object.$$typeof;\n switch($$typeof){\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n switch(type){\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n default:\n var $$typeofType = type && type.$$typeof;\n switch($$typeofType){\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n return undefined;\n };\n var isAsyncMode = function isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isAsyncMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isConcurrentMode = function isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n console[\"warn\"](\"The ReactIs.isConcurrentMode() alias has been deprecated, \" + \"and will be removed in React 18+.\");\n }\n }\n return false;\n };\n var isContextConsumer = function isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n var isContextProvider = function isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n };\n var isElement = function isElement(object) {\n return typeof object === \"object\" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n var isForwardRef = function isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n var isFragment = function isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n var isLazy = function isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n var isMemo = function isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n var isPortal = function isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n var isProfiler = function isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n var isStrictMode = function isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n var isSuspense = function isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n // ATTENTION\n // When adding new symbols to this file,\n // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n // The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n // nor polyfill, then a plain number is used for performance.\n var REACT_ELEMENT_TYPE = 0xeac7;\n var REACT_PORTAL_TYPE = 0xeaca;\n var REACT_FRAGMENT_TYPE = 0xeacb;\n var REACT_STRICT_MODE_TYPE = 0xeacc;\n var REACT_PROFILER_TYPE = 0xead2;\n var REACT_PROVIDER_TYPE = 0xeacd;\n var REACT_CONTEXT_TYPE = 0xeace;\n var REACT_FORWARD_REF_TYPE = 0xead0;\n var REACT_SUSPENSE_TYPE = 0xead1;\n var REACT_SUSPENSE_LIST_TYPE = 0xead8;\n var REACT_MEMO_TYPE = 0xead3;\n var REACT_LAZY_TYPE = 0xead4;\n var REACT_BLOCK_TYPE = 0xead9;\n var REACT_SERVER_BLOCK_TYPE = 0xeada;\n var REACT_FUNDAMENTAL_TYPE = 0xead5;\n var REACT_SCOPE_TYPE = 0xead7;\n var REACT_OPAQUE_ID_TYPE = 0xeae0;\n var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;\n var REACT_OFFSCREEN_TYPE = 0xeae2;\n var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;\n if (typeof Symbol === \"function\" && Symbol.for) {\n var symbolFor = Symbol.for;\n REACT_ELEMENT_TYPE = symbolFor(\"react.element\");\n REACT_PORTAL_TYPE = symbolFor(\"react.portal\");\n REACT_FRAGMENT_TYPE = symbolFor(\"react.fragment\");\n REACT_STRICT_MODE_TYPE = symbolFor(\"react.strict_mode\");\n REACT_PROFILER_TYPE = symbolFor(\"react.profiler\");\n REACT_PROVIDER_TYPE = symbolFor(\"react.provider\");\n REACT_CONTEXT_TYPE = symbolFor(\"react.context\");\n REACT_FORWARD_REF_TYPE = symbolFor(\"react.forward_ref\");\n REACT_SUSPENSE_TYPE = symbolFor(\"react.suspense\");\n REACT_SUSPENSE_LIST_TYPE = symbolFor(\"react.suspense_list\");\n REACT_MEMO_TYPE = symbolFor(\"react.memo\");\n REACT_LAZY_TYPE = symbolFor(\"react.lazy\");\n REACT_BLOCK_TYPE = symbolFor(\"react.block\");\n REACT_SERVER_BLOCK_TYPE = symbolFor(\"react.server.block\");\n REACT_FUNDAMENTAL_TYPE = symbolFor(\"react.fundamental\");\n REACT_SCOPE_TYPE = symbolFor(\"react.scope\");\n REACT_OPAQUE_ID_TYPE = symbolFor(\"react.opaque.id\");\n REACT_DEBUG_TRACING_MODE_TYPE = symbolFor(\"react.debug_trace_mode\");\n REACT_OFFSCREEN_TYPE = symbolFor(\"react.offscreen\");\n REACT_LEGACY_HIDDEN_TYPE = symbolFor(\"react.legacy_hidden\");\n }\n // Filter certain DOM attributes (e.g. src, href) if their values are empty strings.\n var enableScopeAPI = false; // Experimental Create Event Handle API.\n var ContextConsumer = REACT_CONTEXT_TYPE;\n var ContextProvider = REACT_PROVIDER_TYPE;\n var Element = REACT_ELEMENT_TYPE;\n var ForwardRef = REACT_FORWARD_REF_TYPE;\n var Fragment = REACT_FRAGMENT_TYPE;\n var Lazy = REACT_LAZY_TYPE;\n var Memo = REACT_MEMO_TYPE;\n var Portal = REACT_PORTAL_TYPE;\n var Profiler = REACT_PROFILER_TYPE;\n var StrictMode = REACT_STRICT_MODE_TYPE;\n var Suspense = REACT_SUSPENSE_TYPE;\n var hasWarnedAboutDeprecatedIsAsyncMode = false;\n var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n exports.ContextConsumer = ContextConsumer;\n exports.ContextProvider = ContextProvider;\n exports.Element = Element;\n exports.ForwardRef = ForwardRef;\n exports.Fragment = Fragment;\n exports.Lazy = Lazy;\n exports.Memo = Memo;\n exports.Portal = Portal;\n exports.Profiler = Profiler;\n exports.StrictMode = StrictMode;\n exports.Suspense = Suspense;\n exports.isAsyncMode = isAsyncMode;\n exports.isConcurrentMode = isConcurrentMode;\n exports.isContextConsumer = isContextConsumer;\n exports.isContextProvider = isContextProvider;\n exports.isElement = isElement;\n exports.isForwardRef = isForwardRef;\n exports.isFragment = isFragment;\n exports.isLazy = isLazy;\n exports.isMemo = isMemo;\n exports.isPortal = isPortal;\n exports.isProfiler = isProfiler;\n exports.isStrictMode = isStrictMode;\n exports.isSuspense = isSuspense;\n exports.isValidElementType = isValidElementType;\n exports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztDQU9DLEdBRUQ7QUFFQSxJQUFJQSxJQUFxQyxFQUFFO0lBQ3hDLFlBQVc7UUFDZDtZQXdEU0cscUJBQVQsU0FBU0EsbUJBQW1CQyxJQUFJLEVBQUU7WUFDaEMsSUFBSSxPQUFPQSxTQUFTLFlBQVksT0FBT0EsU0FBUyxZQUFZO2dCQUMxRCxPQUFPLElBQUk7WUFDYixDQUFDLENBQUMsbUZBQW1GO1lBR3JGLElBQUlBLFNBQVNDLHVCQUF1QkQsU0FBU0UsdUJBQXVCRixTQUFTRyxpQ0FBaUNILFNBQVNJLDBCQUEwQkosU0FBU0ssdUJBQXVCTCxTQUFTTSw0QkFBNEJOLFNBQVNPLDRCQUE0QkMsZ0JBQWlCO2dCQUMxUSxPQUFPLElBQUk7WUFDYixDQUFDO1lBRUQsSUFBSSxPQUFPUixTQUFTLFlBQVlBLFNBQVMsSUFBSSxFQUFFO2dCQUM3QyxJQUFJQSxLQUFLUyxRQUFRLEtBQUtDLG1CQUFtQlYsS0FBS1MsUUFBUSxLQUFLRSxtQkFBbUJYLEtBQUtTLFFBQVEsS0FBS0csdUJBQXVCWixLQUFLUyxRQUFRLEtBQUtJLHNCQUFzQmIsS0FBS1MsUUFBUSxLQUFLSywwQkFBMEJkLEtBQUtTLFFBQVEsS0FBS00sMEJBQTBCZixLQUFLUyxRQUFRLEtBQUtPLG9CQUFvQmhCLElBQUksQ0FBQyxFQUFFLEtBQUtpQix5QkFBeUI7b0JBQ2hVLE9BQU8sSUFBSTtnQkFDYixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sS0FBSztRQUNkO1lBRVNDLFNBQVQsU0FBU0EsT0FBT0MsTUFBTSxFQUFFO1lBQ3RCLElBQUksT0FBT0EsV0FBVyxZQUFZQSxXQUFXLElBQUksRUFBRTtnQkFDakQsSUFBSVYsV0FBV1UsT0FBT1YsUUFBUTtnQkFFOUIsT0FBUUE7b0JBQ04sS0FBS1c7d0JBQ0gsSUFBSXBCLE9BQU9tQixPQUFPbkIsSUFBSTt3QkFF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QUMxQlcsdUJBQXVCLEdBQUdWO1FBQzFCVSxlQUFlLEdBQUdUO1FBQ2xCUyxrQkFBa0IsR0FBR1I7UUFDckJRLGdCQUFnQixHQUFHUDtRQUNuQk8sWUFBWSxHQUFHTjtRQUNmTSxZQUFZLEdBQUdMO1FBQ2ZLLGNBQWMsR0FBR0o7UUFDakJJLGdCQUFnQixHQUFHSDtRQUNuQkcsa0JBQWtCLEdBQUdGO1FBQ3JCRSxnQkFBZ0IsR0FBR0Q7UUFDbkJDLG1CQUFtQixHQUFHakM7UUFDdEJpQyx3QkFBd0IsR0FBRzlCO1FBQzNCOEIseUJBQXlCLEdBQUc1QjtRQUM1QjRCLHlCQUF5QixHQUFHM0I7UUFDNUIyQixpQkFBaUIsR0FBRzFCO1FBQ3BCMEIsb0JBQW9CLEdBQUd6QjtRQUN2QnlCLGtCQUFrQixHQUFHeEI7UUFDckJ3QixjQUFjLEdBQUd2QjtRQUNqQnVCLGNBQWMsR0FBR3RCO1FBQ2pCc0IsZ0JBQWdCLEdBQUdyQjtRQUNuQnFCLGtCQUFrQixHQUFHcEI7UUFDckJvQixvQkFBb0IsR0FBR25CO1FBQ3ZCbUIsa0JBQWtCLEdBQUdsQjtRQUNyQmtCLDBCQUEwQixHQUFHMUQ7UUFDN0IwRCxjQUFjLEdBQUd2QztJQUNmO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcz80M2UzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwidHlwZSIsIlJFQUNUX0ZSQUdNRU5UX1RZUEUiLCJSRUFDVF9QUk9GSUxFUl9UWVBFIiwiUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUiLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSIsImVuYWJsZVNjb3BlQVBJIiwiJCR0eXBlb2YiLCJSRUFDVF9MQVpZX1RZUEUiLCJSRUFDVF9NRU1PX1RZUEUiLCJSRUFDVF9QUk9WSURFUl9UWVBFIiwiUkVBQ1RfQ09OVEVYVF9UWVBFIiwiUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSIsIlJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUiLCJSRUFDVF9CTE9DS19UWVBFIiwiUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUiLCJ0eXBlT2YiLCJvYmplY3QiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCIkJHR5cGVvZlR5cGUiLCJSRUFDVF9QT1JUQUxfVFlQRSIsInVuZGVmaW5lZCIsImlzQXN5bmNNb2RlIiwiaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUiLCJjb25zb2xlIiwiaXNDb25jdXJyZW50TW9kZSIsImhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzTWVtbyIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJSRUFDVF9TQ09QRV9UWVBFIiwiUkVBQ1RfT1BBUVVFX0lEX1RZUEUiLCJSRUFDVF9PRkZTQ1JFRU5fVFlQRSIsIlN5bWJvbCIsImZvciIsInN5bWJvbEZvciIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGb3J3YXJkUmVmIiwiRnJhZ21lbnQiLCJMYXp5IiwiTWVtbyIsIlBvcnRhbCIsIlByb2ZpbGVyIiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/react-is/cjs/react-is.development.js\n");
4901
4901
 
4902
4902
  /***/ }),
4903
4903
 
@@ -8185,7 +8185,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
8185
8185
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
8186
8186
 
8187
8187
  "use strict";
8188
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.3.2-pre.1214-20231204\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUM3Q1QsT0FBT0UsT0FBTyxHQUNkRixPQUFPRSxPQUFPLEdBQUcsR0FBRztJQUN4QkYsT0FBT1UsaUJBQWlCLEdBQUc7ZUFBTUY7O0FBQ25DLENBQUM7QUFFTSxTQUFTRyxhQUFhO0lBQzNCWCxPQUFPWSxRQUFRLEdBQUcsU0FBQ0MsUUFBd0I7UUFDekMsSUFBTUMsTUFBTWQsT0FBT2UsWUFBWTtRQUUvQixJQUFJRCxLQUFLO1lBQ1AsSUFBTUUsSUFBSUMsU0FBU0MsV0FBVztZQUM5QkYsRUFBRUcsVUFBVSxDQUFDTjtZQUNiQyxJQUFJTSxlQUFlO1lBQ25CTixJQUFJTyxRQUFRLENBQUNMO1lBQ2JDLFNBQVNLLFdBQVcsQ0FBQztZQUNyQlIsSUFBSU0sZUFBZTtRQUNyQixDQUFDO0lBQ0g7QUFDRixDQUFDO0FBRUQsU0FBU0csZUFBZTtJQUN0QixJQUFNQyxjQUFjUCxTQUFTUSxhQUFhLENBQUM7SUFDM0MsSUFBTUMsV0FBVzFCLE9BQU9VLGlCQUFpQjtJQUN6Q2MsWUFBWUcsSUFBSSxHQUFHRDtJQUNuQlQsU0FBU1csSUFBSSxDQUFDQyxXQUFXLENBQUNMO0lBQzFCTSxxQkFBdUJBLEdBQUdKO0FBQzVCO0FBRUE7OztDQUdDLEdBQ0QsU0FBU0ssY0FBY3JDLE1BQWlCLEVBQUU7SUFDeENpQjtJQUNBbEIsV0FBV0M7SUFDWDZCO0lBQ0EsT0FBT1MsUUFBUUMsT0FBTyxDQUFDQyxxQkFBd0JBLENBQUMsWUFBWUMsSUFBSSxlQUFDLCtCQUFZO2dDQUNuRUMsNkJBQWlCQyxTQUNqQkM7Ozs7eUNBRG9DNUMsT0FBcEMwQyxZQUFBQSx3RkFBb0MxQyxPQUFuQjJDLFNBQUFBLHVDQUFVLElBQUk7b0JBQ3ZCOzt3QkFBTSxpUkFBZTs7O29CQUE3QkMsTUFBUSxjQUFSQTtvQkFDUjs7d0JBQU9BLElBQUlGLFlBQVlDOzs7O0lBQ3pCO0FBQ0Y7QUFFQXJDLE9BQU8rQixhQUFhLEdBQUdBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9pbmRleC50cz9hZGEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL2Rpc3Qvb3Blbm1ycy1lc20tc3R5bGVndWlkZS5jc3NcIjtcbmltcG9ydCBcImltcG9ydC1tYXAtb3ZlcnJpZGVzXCI7XG5pbXBvcnQgXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrXCI7XG5pbXBvcnQgdHlwZSB7IFNwYUNvbmZpZyB9IGZyb20gXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYW4gYXBpVXJsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBiYWNrZW5kLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoIWNvbmZpZy5zcGFQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYSBzcGFQYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBwcm9wZXJseSBnZW5lcmF0ZSB1cmxzLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk9uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuXCJcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgXCJwcm9kdWN0aW9uXCI7XG4gIHdpbmRvdy5zcGFWZXJzaW9uID0gcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTjtcbiAgY29uc3Qgc3BhQmFzZVdpdGhTbGFzaCA9IHdpbmRvdy5zcGFCYXNlLmVuZHNXaXRoKFwiL1wiKVxuICAgID8gd2luZG93LnNwYUJhc2VcbiAgICA6IHdpbmRvdy5zcGFCYXNlICsgXCIvXCI7XG4gIHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSA9ICgpID0+IHNwYUJhc2VXaXRoU2xhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFV0aWxzKCkge1xuICB3aW5kb3cuY29weVRleHQgPSAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChzZWwpIHtcbiAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgci5zZWxlY3ROb2RlKHNvdXJjZSk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJhc2VcIik7XG4gIGNvbnN0IGJhc2VIcmVmID0gd2luZG93LmdldE9wZW5tcnNTcGFCYXNlKCk7XG4gIGJhc2VFbGVtZW50LmhyZWYgPSBiYXNlSHJlZjtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChiYXNlRWxlbWVudCk7XG4gIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gYmFzZUhyZWY7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fd2VicGFja19pbml0X3NoYXJpbmdfXyhcImRlZmF1bHRcIikpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gdHJ1ZSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3J1blwiKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
8188
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ setupPaths: () => (/* binding */ setupPaths),\n/* harmony export */ setupUtils: () => (/* binding */ setupUtils)\n/* harmony export */ });\n/* harmony import */ var _openmrs_esm_styleguide_dist_openmrs_esm_styleguide_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @openmrs/esm-styleguide/dist/openmrs-esm-styleguide.css */ \"../../framework/esm-styleguide/dist/openmrs-esm-styleguide.css\");\n/* harmony import */ var import_map_overrides__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! import-map-overrides */ \"../../../node_modules/import-map-overrides/dist/import-map-overrides.js\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @openmrs/esm-framework */ \"webpack/sharing/consume/default/@openmrs/esm-framework/@openmrs/esm-framework\");\n/* harmony import */ var _openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_openmrs_esm_framework__WEBPACK_IMPORTED_MODULE_2__);\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nfunction _ts_generator(thisArg, body) {\n var f, y, t, g, _ = {\n label: 0,\n sent: function() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n };\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(_)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\n\n\nfunction setupPaths(config) {\n var error = false;\n if (!config.apiUrl) {\n console.error(\"initializeSpa() was called without supplying an apiUrl. This means that the application cannot communicate with the backend.\");\n error = true;\n }\n if (!config.spaPath) {\n console.error(\"initializeSpa() was called without supplying a spaPath. This means that the application cannot properly generate urls.\");\n error = true;\n }\n if (error) {\n throw new Error(\"One or more required properties in the basic configuration of the application was missing and the application cannot be rendered. Please see the browser console for details.\");\n }\n window.openmrsBase = config.apiUrl;\n window.spaBase = config.spaPath;\n window.spaEnv = config.env || \"production\";\n window.spaVersion = \"5.3.2-pre.1219-20231204\";\n var spaBaseWithSlash = window.spaBase.endsWith(\"/\") ? window.spaBase : window.spaBase + \"/\";\n window.getOpenmrsSpaBase = function() {\n return spaBaseWithSlash;\n };\n}\nfunction setupUtils() {\n window.copyText = function(source) {\n var sel = window.getSelection();\n if (sel) {\n var r = document.createRange();\n r.selectNode(source);\n sel.removeAllRanges();\n sel.addRange(r);\n document.execCommand(\"copy\");\n sel.removeAllRanges();\n }\n };\n}\nfunction wireSpaPaths() {\n var baseElement = document.createElement(\"base\");\n var baseHref = window.getOpenmrsSpaBase();\n baseElement.href = baseHref;\n document.head.appendChild(baseElement);\n __webpack_require__.p = baseHref;\n}\n/**\n * Initializes the OpenMRS Frontend App Shell.\n * @param config The global configuration to apply.\n */ function initializeSpa(config) {\n setupUtils();\n setupPaths(config);\n wireSpaPaths();\n return Promise.resolve(__webpack_require__.I(\"default\")).then(/*#__PURE__*/ _async_to_generator(function() {\n var _config_configUrls, configUrls, _config_offline, offline, run;\n return _ts_generator(this, function(_state) {\n switch(_state.label){\n case 0:\n _config_configUrls = config.configUrls, configUrls = _config_configUrls === void 0 ? [] : _config_configUrls, _config_offline = config.offline, offline = _config_offline === void 0 ? true : _config_offline;\n return [\n 4,\n Promise.all(/*! import() */[__webpack_require__.e(\"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef\"), __webpack_require__.e(\"src_run_ts\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./run */ \"./src/run.ts\"))\n ];\n case 1:\n run = _state.sent().run;\n return [\n 2,\n run(configUrls, offline)\n ];\n }\n });\n }));\n}\nwindow.initializeSpa = initializeSpa;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXgudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRTtBQUNuQztBQUNFO0FBR3pCLFNBQVNBLFdBQVdDLE1BQWlCLEVBQUU7SUFDNUMsSUFBSUMsUUFBUSxLQUFLO0lBQ2pCLElBQUksQ0FBQ0QsT0FBT0UsTUFBTSxFQUFFO1FBQ2xCQyxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQ0QsT0FBT0ksT0FBTyxFQUFFO1FBQ25CRCxRQUFRRixLQUFLLENBQ1g7UUFFRkEsUUFBUSxJQUFJO0lBQ2QsQ0FBQztJQUVELElBQUlBLE9BQU87UUFDVCxNQUFNLElBQUlJLE1BQ1IsaUxBQ0E7SUFDSixDQUFDO0lBRURDLE9BQU9DLFdBQVcsR0FBR1AsT0FBT0UsTUFBTTtJQUNsQ0ksT0FBT0UsT0FBTyxHQUFHUixPQUFPSSxPQUFPO0lBQy9CRSxPQUFPRyxNQUFNLEdBQUdULE9BQU9VLEdBQUcsSUFBSTtJQUM5QkosT0FBT0ssVUFBVSxHQUFHQyx5QkFBeUI7SUFDN0MsSUFBTUUsbUJBQW1CUixPQUFPRSxPQUFPLENBQUNPLFFBQVEsQ0FBQyxPQUM3Q1QsT0FBT0UsT0FBTyxHQUNkRixPQUFPRSxPQUFPLEdBQUcsR0FBRztJQUN4QkYsT0FBT1UsaUJBQWlCLEdBQUc7ZUFBTUY7O0FBQ25DLENBQUM7QUFFTSxTQUFTRyxhQUFhO0lBQzNCWCxPQUFPWSxRQUFRLEdBQUcsU0FBQ0MsUUFBd0I7UUFDekMsSUFBTUMsTUFBTWQsT0FBT2UsWUFBWTtRQUUvQixJQUFJRCxLQUFLO1lBQ1AsSUFBTUUsSUFBSUMsU0FBU0MsV0FBVztZQUM5QkYsRUFBRUcsVUFBVSxDQUFDTjtZQUNiQyxJQUFJTSxlQUFlO1lBQ25CTixJQUFJTyxRQUFRLENBQUNMO1lBQ2JDLFNBQVNLLFdBQVcsQ0FBQztZQUNyQlIsSUFBSU0sZUFBZTtRQUNyQixDQUFDO0lBQ0g7QUFDRixDQUFDO0FBRUQsU0FBU0csZUFBZTtJQUN0QixJQUFNQyxjQUFjUCxTQUFTUSxhQUFhLENBQUM7SUFDM0MsSUFBTUMsV0FBVzFCLE9BQU9VLGlCQUFpQjtJQUN6Q2MsWUFBWUcsSUFBSSxHQUFHRDtJQUNuQlQsU0FBU1csSUFBSSxDQUFDQyxXQUFXLENBQUNMO0lBQzFCTSxxQkFBdUJBLEdBQUdKO0FBQzVCO0FBRUE7OztDQUdDLEdBQ0QsU0FBU0ssY0FBY3JDLE1BQWlCLEVBQUU7SUFDeENpQjtJQUNBbEIsV0FBV0M7SUFDWDZCO0lBQ0EsT0FBT1MsUUFBUUMsT0FBTyxDQUFDQyxxQkFBd0JBLENBQUMsWUFBWUMsSUFBSSxlQUFDLCtCQUFZO2dDQUNuRUMsNkJBQWlCQyxTQUNqQkM7Ozs7eUNBRG9DNUMsT0FBcEMwQyxZQUFBQSx3RkFBb0MxQyxPQUFuQjJDLFNBQUFBLHVDQUFVLElBQUk7b0JBQ3ZCOzt3QkFBTSxpUkFBZTs7O29CQUE3QkMsTUFBUSxjQUFSQTtvQkFDUjs7d0JBQU9BLElBQUlGLFlBQVlDOzs7O0lBQ3pCO0FBQ0Y7QUFFQXJDLE9BQU8rQixhQUFhLEdBQUdBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uL3NyYy9pbmRleC50cz9hZGEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL2Rpc3Qvb3Blbm1ycy1lc20tc3R5bGVndWlkZS5jc3NcIjtcbmltcG9ydCBcImltcG9ydC1tYXAtb3ZlcnJpZGVzXCI7XG5pbXBvcnQgXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrXCI7XG5pbXBvcnQgdHlwZSB7IFNwYUNvbmZpZyB9IGZyb20gXCJAb3Blbm1ycy9lc20tZnJhbWV3b3JrL3NyYy9pbnRlcm5hbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBQYXRocyhjb25maWc6IFNwYUNvbmZpZykge1xuICBsZXQgZXJyb3IgPSBmYWxzZTtcbiAgaWYgKCFjb25maWcuYXBpVXJsKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYW4gYXBpVXJsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBiYWNrZW5kLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoIWNvbmZpZy5zcGFQYXRoKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIFwiaW5pdGlhbGl6ZVNwYSgpIHdhcyBjYWxsZWQgd2l0aG91dCBzdXBwbHlpbmcgYSBzcGFQYXRoLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbm5vdCBwcm9wZXJseSBnZW5lcmF0ZSB1cmxzLlwiXG4gICAgKTtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk9uZSBvciBtb3JlIHJlcXVpcmVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2ljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHdhcyBtaXNzaW5nIGFuZCB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHJlbmRlcmVkLiBQbGVhc2Ugc2VlIHRoZSBicm93c2VyIGNvbnNvbGUgZm9yIGRldGFpbHMuXCJcbiAgICApO1xuICB9XG5cbiAgd2luZG93Lm9wZW5tcnNCYXNlID0gY29uZmlnLmFwaVVybDtcbiAgd2luZG93LnNwYUJhc2UgPSBjb25maWcuc3BhUGF0aDtcbiAgd2luZG93LnNwYUVudiA9IGNvbmZpZy5lbnYgfHwgXCJwcm9kdWN0aW9uXCI7XG4gIHdpbmRvdy5zcGFWZXJzaW9uID0gcHJvY2Vzcy5lbnYuQlVJTERfVkVSU0lPTjtcbiAgY29uc3Qgc3BhQmFzZVdpdGhTbGFzaCA9IHdpbmRvdy5zcGFCYXNlLmVuZHNXaXRoKFwiL1wiKVxuICAgID8gd2luZG93LnNwYUJhc2VcbiAgICA6IHdpbmRvdy5zcGFCYXNlICsgXCIvXCI7XG4gIHdpbmRvdy5nZXRPcGVubXJzU3BhQmFzZSA9ICgpID0+IHNwYUJhc2VXaXRoU2xhc2g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFV0aWxzKCkge1xuICB3aW5kb3cuY29weVRleHQgPSAoc291cmNlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChzZWwpIHtcbiAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgci5zZWxlY3ROb2RlKHNvdXJjZSk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWwuYWRkUmFuZ2Uocik7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXJlU3BhUGF0aHMoKSB7XG4gIGNvbnN0IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJhc2VcIik7XG4gIGNvbnN0IGJhc2VIcmVmID0gd2luZG93LmdldE9wZW5tcnNTcGFCYXNlKCk7XG4gIGJhc2VFbGVtZW50LmhyZWYgPSBiYXNlSHJlZjtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChiYXNlRWxlbWVudCk7XG4gIF9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gYmFzZUhyZWY7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIE9wZW5NUlMgRnJvbnRlbmQgQXBwIFNoZWxsLlxuICogQHBhcmFtIGNvbmZpZyBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVTcGEoY29uZmlnOiBTcGFDb25maWcpIHtcbiAgc2V0dXBVdGlscygpO1xuICBzZXR1cFBhdGhzKGNvbmZpZyk7XG4gIHdpcmVTcGFQYXRocygpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9fd2VicGFja19pbml0X3NoYXJpbmdfXyhcImRlZmF1bHRcIikpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnVXJscyA9IFtdLCBvZmZsaW5lID0gdHJ1ZSB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHsgcnVuIH0gPSBhd2FpdCBpbXBvcnQoXCIuL3J1blwiKTtcbiAgICByZXR1cm4gcnVuKGNvbmZpZ1VybHMsIG9mZmxpbmUpO1xuICB9KTtcbn1cblxud2luZG93LmluaXRpYWxpemVTcGEgPSBpbml0aWFsaXplU3BhO1xuIl0sIm5hbWVzIjpbInNldHVwUGF0aHMiLCJjb25maWciLCJlcnJvciIsImFwaVVybCIsImNvbnNvbGUiLCJzcGFQYXRoIiwiRXJyb3IiLCJ3aW5kb3ciLCJvcGVubXJzQmFzZSIsInNwYUJhc2UiLCJzcGFFbnYiLCJlbnYiLCJzcGFWZXJzaW9uIiwicHJvY2VzcyIsIkJVSUxEX1ZFUlNJT04iLCJzcGFCYXNlV2l0aFNsYXNoIiwiZW5kc1dpdGgiLCJnZXRPcGVubXJzU3BhQmFzZSIsInNldHVwVXRpbHMiLCJjb3B5VGV4dCIsInNvdXJjZSIsInNlbCIsImdldFNlbGVjdGlvbiIsInIiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiZXhlY0NvbW1hbmQiLCJ3aXJlU3BhUGF0aHMiLCJiYXNlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJiYXNlSHJlZiIsImhyZWYiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJfX3dlYnBhY2tfcHVibGljX3BhdGhfXyIsImluaXRpYWxpemVTcGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9fd2VicGFja19pbml0X3NoYXJpbmdfXyIsInRoZW4iLCJjb25maWdVcmxzIiwib2ZmbGluZSIsInJ1biJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.ts\n");
8189
8189
 
8190
8190
  /***/ }),
8191
8191
 
@@ -11027,17 +11027,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11027
11027
 
11028
11028
  /***/ }),
11029
11029
 
11030
- /***/ "../../../node_modules/downshift/node_modules/tslib/tslib.es6.mjs":
11031
- /*!************************************************************************!*\
11032
- !*** ../../../node_modules/downshift/node_modules/tslib/tslib.es6.mjs ***!
11033
- \************************************************************************/
11034
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11035
-
11036
- "use strict";
11037
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource),\n/* harmony export */ __assign: () => (/* binding */ __assign),\n/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator),\n/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator),\n/* harmony export */ __asyncValues: () => (/* binding */ __asyncValues),\n/* harmony export */ __await: () => (/* binding */ __await),\n/* harmony export */ __awaiter: () => (/* binding */ __awaiter),\n/* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet),\n/* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn),\n/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet),\n/* harmony export */ __createBinding: () => (/* binding */ __createBinding),\n/* harmony export */ __decorate: () => (/* binding */ __decorate),\n/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources),\n/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate),\n/* harmony export */ __exportStar: () => (/* binding */ __exportStar),\n/* harmony export */ __extends: () => (/* binding */ __extends),\n/* harmony export */ __generator: () => (/* binding */ __generator),\n/* harmony export */ __importDefault: () => (/* binding */ __importDefault),\n/* harmony export */ __importStar: () => (/* binding */ __importStar),\n/* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject),\n/* harmony export */ __metadata: () => (/* binding */ __metadata),\n/* harmony export */ __param: () => (/* binding */ __param),\n/* harmony export */ __propKey: () => (/* binding */ __propKey),\n/* harmony export */ __read: () => (/* binding */ __read),\n/* harmony export */ __rest: () => (/* binding */ __rest),\n/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers),\n/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName),\n/* harmony export */ __spread: () => (/* binding */ __spread),\n/* harmony export */ __spreadArray: () => (/* binding */ __spreadArray),\n/* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays),\n/* harmony export */ __values: () => (/* binding */ __values),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nfunction __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nfunction __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nfunction __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nfunction __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nfunction __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nfunction __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nfunction __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nfunction __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nfunction __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nfunction __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDakYsd0JBQXdCO0FBQ3hCO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFTztBQUNQO0FBQ0EsK0NBQStDLE9BQU87QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxjQUFjO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTs7QUFFTztBQUNQLGtDQUFrQztBQUNsQzs7QUFFTztBQUNQLHVCQUF1Qix1RkFBdUY7QUFDOUc7QUFDQTtBQUNBLHlHQUF5RztBQUN6RztBQUNBLHNDQUFzQyxRQUFRO0FBQzlDO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0EsOENBQThDLHlGQUF5RjtBQUN2SSw4REFBOEQsMkNBQTJDO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0Esa0JBQWtCLHlCQUF5QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBLDRDQUE0Qyx5RUFBeUU7QUFDckg7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1AsMEJBQTBCLCtEQUErRCxpQkFBaUI7QUFDMUc7QUFDQSxrQ0FBa0MsTUFBTSwrQkFB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Q2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG93bnNoaWZ0L25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzPzFmZWQiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZTtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKGVudi5zdGFjay5sZW5ndGgpIHtcbiAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xuICAgICAgICBpZiAocmVjLmFzeW5jKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/tslib/tslib.es6.mjs\n");
11038
-
11039
- /***/ }),
11040
-
11041
11030
  /***/ "../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
11042
11031
  /*!****************************************************************************!*\
11043
11032
  !*** ../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
@@ -11045,7 +11034,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11045
11034
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11046
11035
 
11047
11036
  "use strict";
11048
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayLikeToArray)\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++){\n arr2[i] = arr[i];\n }\n return arr2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlLFNBQVNBLGtCQUFrQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDbEQsSUFBSUEsT0FBTyxJQUFJLElBQUlBLE1BQU1ELElBQUlFLE1BQU0sRUFBRUQsTUFBTUQsSUFBSUUsTUFBTTtJQUNyRCxJQUFLLElBQUlDLElBQUksR0FBR0MsT0FBTyxJQUFJQyxNQUFNSixNQUFNRSxJQUFJRixLQUFLRSxJQUFLO1FBQ25EQyxJQUFJLENBQUNELEVBQUUsR0FBR0gsR0FBRyxDQUFDRyxFQUFFO0lBQ2xCO0lBQ0EsT0FBT0M7QUFDVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcz8xOWViIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG4gIHJldHVybiBhcnIyO1xufSJdLCJuYW1lcyI6WyJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImxlbmd0aCIsImkiLCJhcnIyIiwiQXJyYXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\n");
11037
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayLikeToArray)\n/* harmony export */ });\nfunction _arrayLikeToArray(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}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlLFNBQVNBLGtCQUFrQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDbEQsSUFBSUEsT0FBTyxJQUFJLElBQUlBLE1BQU1ELElBQUlFLE1BQU0sRUFBRUQsTUFBTUQsSUFBSUUsTUFBTTtJQUNyRCxJQUFLLElBQUlDLElBQUksR0FBR0MsT0FBTyxJQUFJQyxNQUFNSixNQUFNRSxJQUFJRixLQUFLRSxJQUFLQyxJQUFJLENBQUNELEVBQUUsR0FBR0gsR0FBRyxDQUFDRyxFQUFFO0lBQ3JFLE9BQU9DO0FBQ1QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanM/MTllYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iXSwibmFtZXMiOlsiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJsZW5ndGgiLCJpIiwiYXJyMiIsIkFycmF5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\n");
11049
11038
 
11050
11039
  /***/ }),
11051
11040
 
@@ -11089,7 +11078,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11089
11078
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11090
11079
 
11091
11080
  "use strict";
11092
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _createClass)\n/* harmony export */ });\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUFTQSxrQkFBa0JDLE1BQU0sRUFBRUMsS0FBSyxFQUFFO0lBQ3hDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJRCxNQUFNRSxNQUFNLEVBQUVELElBQUs7UUFDckMsSUFBSUUsYUFBYUgsS0FBSyxDQUFDQyxFQUFFO1FBQ3pCRSxXQUFXQyxVQUFVLEdBQUdELFdBQVdDLFVBQVUsSUFBSSxLQUFLO1FBQ3RERCxXQUFXRSxZQUFZLEdBQUcsSUFBSTtRQUM5QixJQUFJLFdBQVdGLFlBQVlBLFdBQVdHLFFBQVEsR0FBRyxJQUFJO1FBQ3JEQyxPQUFPQyxjQUFjLENBQUNULFFBQVFJLFdBQVdNLEdBQUcsRUFBRU47SUFDaEQ7QUFDRjtBQUNlLFNBQVNPLGFBQWFDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUU7SUFDekUsSUFBSUQsWUFBWWQsa0JBQWtCYSxZQUFZRyxTQUFTLEVBQUVGO0lBQ3pELElBQUlDLGFBQWFmLGtCQUFrQmEsYUFBYUU7SUFDaEROLE9BQU9DLGNBQWMsQ0FBQ0csYUFBYSxhQUFhO1FBQzlDTCxVQUFVLEtBQUs7SUFDakI7SUFDQSxPQUFPSztBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcz9lZDBlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iXSwibmFtZXMiOlsiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImkiLCJsZW5ndGgiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInByb3RvdHlwZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/createClass.js\n");
11081
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _createClass)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDO0FBQy9DLFNBQVNDLGtCQUFrQkMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7SUFDeEMsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlELE1BQU1FLE1BQU0sRUFBRUQsSUFBSztRQUNyQyxJQUFJRSxhQUFhSCxLQUFLLENBQUNDLEVBQUU7UUFDekJFLFdBQVdDLFVBQVUsR0FBR0QsV0FBV0MsVUFBVSxJQUFJLEtBQUs7UUFDdERELFdBQVdFLFlBQVksR0FBRyxJQUFJO1FBQzlCLElBQUksV0FBV0YsWUFBWUEsV0FBV0csUUFBUSxHQUFHLElBQUk7UUFDckRDLE9BQU9DLGNBQWMsQ0FBQ1QsUUFBUUYsNkRBQWFBLENBQUNNLFdBQVdNLEdBQUcsR0FBR047SUFDL0Q7QUFDRjtBQUNlLFNBQVNPLGFBQWFDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUU7SUFDekUsSUFBSUQsWUFBWWQsa0JBQWtCYSxZQUFZRyxTQUFTLEVBQUVGO0lBQ3pELElBQUlDLGFBQWFmLGtCQUFrQmEsYUFBYUU7SUFDaEROLE9BQU9DLGNBQWMsQ0FBQ0csYUFBYSxhQUFhO1FBQzlDTCxVQUFVLEtBQUs7SUFDakI7SUFDQSxPQUFPSztBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcz9lZDBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iXSwibmFtZXMiOlsidG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm90b3R5cGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/createClass.js\n");
11093
11082
 
11094
11083
  /***/ }),
11095
11084
 
@@ -11100,7 +11089,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11100
11089
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11101
11090
 
11102
11091
  "use strict";
11103
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _defineProperty)\n/* harmony export */ });\nfunction _defineProperty(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//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxnQkFBZ0JDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUU7SUFDdkQsSUFBSUQsT0FBT0QsS0FBSztRQUNkRyxPQUFPQyxjQUFjLENBQUNKLEtBQUtDLEtBQUs7WUFDOUJDLE9BQU9BO1lBQ1BHLFlBQVksSUFBSTtZQUNoQkMsY0FBYyxJQUFJO1lBQ2xCQyxVQUFVLElBQUk7UUFDaEI7SUFDRixPQUFPO1FBQ0xQLEdBQUcsQ0FBQ0MsSUFBSSxHQUFHQztJQUNiLENBQUM7SUFDRCxPQUFPRjtBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcz82OGQyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iXSwibmFtZXMiOlsiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\n");
11092
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _defineProperty)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperty(obj, key, value) {\n key = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key);\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//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDO0FBQ2hDLFNBQVNDLGdCQUFnQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtJQUN2REQsTUFBTUgsNkRBQWFBLENBQUNHO0lBQ3BCLElBQUlBLE9BQU9ELEtBQUs7UUFDZEcsT0FBT0MsY0FBYyxDQUFDSixLQUFLQyxLQUFLO1lBQzlCQyxPQUFPQTtZQUNQRyxZQUFZLElBQUk7WUFDaEJDLGNBQWMsSUFBSTtZQUNsQkMsVUFBVSxJQUFJO1FBQ2hCO0lBQ0YsT0FBTztRQUNMUCxHQUFHLENBQUNDLElBQUksR0FBR0M7SUFDYixDQUFDO0lBQ0QsT0FBT0Y7QUFDVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/NjhkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iXSwibmFtZXMiOlsidG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\n");
11104
11093
 
11105
11094
  /***/ }),
11106
11095
 
@@ -11166,7 +11155,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11166
11155
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11167
11156
 
11168
11157
  "use strict";
11169
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _iterableToArrayLimit)\n/* harmony export */ });\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _s, _e;\n try {\n for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally{\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally{\n if (_d) throw _e;\n }\n }\n return _arr;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxzQkFBc0JDLEdBQUcsRUFBRUMsQ0FBQyxFQUFFO0lBQ3BELElBQUlDLEtBQUtGLE9BQU8sSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPRyxXQUFXLGVBQWVILEdBQUcsQ0FBQ0csT0FBT0MsUUFBUSxDQUFDLElBQUlKLEdBQUcsQ0FBQyxhQUFhO0lBQ3hHLElBQUlFLE1BQU0sSUFBSSxFQUFFO0lBQ2hCLElBQUlHLE9BQU8sRUFBRTtJQUNiLElBQUlDLEtBQUssSUFBSTtJQUNiLElBQUlDLEtBQUssS0FBSztJQUNkLElBQUlDLElBQUlDO0lBQ1IsSUFBSTtRQUNGLElBQUtQLEtBQUtBLEdBQUdRLElBQUksQ0FBQ1YsTUFBTSxDQUFFTSxDQUFBQSxLQUFLLENBQUNFLEtBQUtOLEdBQUdTLElBQUksRUFBQyxFQUFHQyxJQUFJLEdBQUdOLEtBQUssSUFBSSxDQUFFO1lBQ2hFRCxLQUFLUSxJQUFJLENBQUNMLEdBQUdNLEtBQUs7WUFDbEIsSUFBSWIsS0FBS0ksS0FBS1UsTUFBTSxLQUFLZCxHQUFHLEtBQU07UUFDcEM7SUFDRixFQUFFLE9BQU9lLEtBQUs7UUFDWlQsS0FBSyxJQUFJO1FBQ1RFLEtBQUtPO0lBQ1AsU0FBVTtRQUNSLElBQUk7WUFDRixJQUFJLENBQUNWLE1BQU1KLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFQSxFQUFFLENBQUMsU0FBUztRQUMvQyxTQUFVO1lBQ1IsSUFBSUssSUFBSSxNQUFNRSxHQUFHO1FBQ25CO0lBQ0Y7SUFDQSxPQUFPSjtBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcz84NmIzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9zLCBfZTtcbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBfYXJyO1xufSJdLCJuYW1lcyI6WyJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJhcnIiLCJpIiwiX2kiLCJTeW1ib2wiLCJpdGVyYXRvciIsIl9hcnIiLCJfbiIsIl9kIiwiX3MiLCJfZSIsImNhbGwiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsImVyciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\n");
11158
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _iterableToArrayLimit)\n/* harmony export */ });\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e, n, i, u, a = [], f = !0, o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for(; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally{\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally{\n if (o) throw n;\n }\n }\n return a;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxzQkFBc0JDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0lBQ2xELElBQUlDLElBQUksSUFBSSxJQUFJRixJQUFJLElBQUksR0FBRyxlQUFlLE9BQU9HLFVBQVVILENBQUMsQ0FBQ0csT0FBT0MsUUFBUSxDQUFDLElBQUlKLENBQUMsQ0FBQyxhQUFhO0lBQ2hHLElBQUksSUFBSSxJQUFJRSxHQUFHO1FBQ2IsSUFBSUcsR0FDRkMsR0FDQUMsR0FDQUMsR0FDQUMsSUFBSSxFQUFFLEVBQ05DLElBQUksQ0FBQyxHQUNMQyxJQUFJLENBQUM7UUFDUCxJQUFJO1lBQ0YsSUFBSUosSUFBSSxDQUFDTCxJQUFJQSxFQUFFVSxJQUFJLENBQUNaLEVBQUMsRUFBR2EsSUFBSSxFQUFFLE1BQU1aLENBQUMsRUFBRTtnQkFDckMsSUFBSWEsT0FBT1osT0FBT0EsR0FBRztnQkFDckJRLElBQUksQ0FBQztZQUNQLE9BQU8sTUFBTyxDQUFFQSxDQUFBQSxJQUFJLENBQUNMLElBQUlFLEVBQUVLLElBQUksQ0FBQ1YsRUFBQyxFQUFHYSxJQUFJLEtBQU1OLENBQUFBLEVBQUVPLElBQUksQ0FBQ1gsRUFBRVksS0FBSyxHQUFHUixFQUFFUyxNQUFNLEtBQUtqQixDQUFDLEdBQUdTLElBQUksQ0FBQztRQUN2RixFQUFFLE9BQU9WLEdBQUc7WUFDVlcsSUFBSSxDQUFDLEdBQUdMLElBQUlOLENBQUM7UUFDZixTQUFVO1lBQ1IsSUFBSTtnQkFDRixJQUFJLENBQUNVLEtBQUssSUFBSSxJQUFJUixDQUFDLENBQUMsU0FBUyxJQUFLTSxDQUFBQSxJQUFJTixDQUFDLENBQUMsU0FBUyxJQUFJWSxPQUFPTixPQUFPQSxDQUFDLEdBQUc7WUFDekUsU0FBVTtnQkFDUixJQUFJRyxHQUFHLE1BQU1MLEVBQUU7WUFDakI7UUFDRjtRQUNBLE9BQU9HO0lBQ1QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcz84NmIzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iXSwibmFtZXMiOlsiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiciIsImwiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJlIiwibiIsImkiLCJ1IiwiYSIsImYiLCJvIiwiY2FsbCIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwibGVuZ3RoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\n");
11170
11159
 
11171
11160
  /***/ }),
11172
11161
 
@@ -11247,6 +11236,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11247
11236
 
11248
11237
  /***/ }),
11249
11238
 
11239
+ /***/ "../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js":
11240
+ /*!***********************************************************************!*\
11241
+ !*** ../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***!
11242
+ \***********************************************************************/
11243
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11244
+
11245
+ "use strict";
11246
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toPrimitive)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\nfunction _toPrimitive(input, hint) {\n if ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDO0FBQ25CLFNBQVNDLGFBQWFDLEtBQUssRUFBRUMsSUFBSSxFQUFFO0lBQ2hELElBQUlILHNEQUFPQSxDQUFDRSxXQUFXLFlBQVlBLFVBQVUsSUFBSSxFQUFFLE9BQU9BO0lBQzFELElBQUlFLE9BQU9GLEtBQUssQ0FBQ0csT0FBT0MsV0FBVyxDQUFDO0lBQ3BDLElBQUlGLFNBQVNHLFdBQVc7UUFDdEIsSUFBSUMsTUFBTUosS0FBS0ssSUFBSSxDQUFDUCxPQUFPQyxRQUFRO1FBQ25DLElBQUlILHNEQUFPQSxDQUFDUSxTQUFTLFVBQVUsT0FBT0E7UUFDdEMsTUFBTSxJQUFJRSxVQUFVLGdEQUFnRDtJQUN0RSxDQUFDO0lBQ0QsT0FBTyxDQUFDUCxTQUFTLFdBQVdRLFNBQVNDLE1BQU0sRUFBRVY7QUFDL0MsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzPzI0YTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufSJdLCJuYW1lcyI6WyJfdHlwZW9mIiwiX3RvUHJpbWl0aXZlIiwiaW5wdXQiLCJoaW50IiwicHJpbSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwidW5kZWZpbmVkIiwicmVzIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n");
11247
+
11248
+ /***/ }),
11249
+
11250
+ /***/ "../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js":
11251
+ /*!*************************************************************************!*\
11252
+ !*** ../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***!
11253
+ \*************************************************************************/
11254
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11255
+
11256
+ "use strict";
11257
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toPropertyKey)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js\");\n\n\nfunction _toPropertyKey(arg) {\n var key = (0,_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arg, \"string\");\n return (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key) === \"symbol\" ? key : String(key);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtDO0FBQ1M7QUFDNUIsU0FBU0UsZUFBZUMsR0FBRyxFQUFFO0lBQzFDLElBQUlDLE1BQU1ILDJEQUFXQSxDQUFDRSxLQUFLO0lBQzNCLE9BQU9ILHNEQUFPQSxDQUFDSSxTQUFTLFdBQVdBLE1BQU1DLE9BQU9ELElBQUk7QUFDdEQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanM/MzIzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59Il0sIm5hbWVzIjpbIl90eXBlb2YiLCJ0b1ByaW1pdGl2ZSIsIl90b1Byb3BlcnR5S2V5IiwiYXJnIiwia2V5IiwiU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n");
11258
+
11259
+ /***/ }),
11260
+
11250
11261
  /***/ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js":
11251
11262
  /*!******************************************************************!*\
11252
11263
  !*** ../../../node_modules/@babel/runtime/helpers/esm/typeof.js ***!
@@ -11254,7 +11265,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11254
11265
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11255
11266
 
11256
11267
  "use strict";
11257
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsUUFBUUMsR0FBRyxFQUFFO0lBQ25DO0lBRUEsT0FBT0QsVUFBVSxjQUFjLE9BQU9FLFVBQVUsWUFBWSxPQUFPQSxPQUFPQyxRQUFRLEdBQUcsU0FBOUVILFFBQXdGQyxHQUFHLEVBQUU7UUFDbEcsT0FBTyxPQUFPQTtJQUNoQixJQUFJLFNBQVVBLEdBQUcsRUFBRTtRQUNqQixPQUFPQSxPQUFPLGNBQWMsT0FBT0MsVUFBVUQsSUFBSUcsV0FBVyxLQUFLRixVQUFVRCxRQUFRQyxPQUFPRyxTQUFTLEdBQUcsV0FBVyxPQUFPSixHQUFHO0lBQzdILENBQUMsRUFBRUQsUUFBUUMsSUFBSTtBQUNqQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzPzc2MjEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm9iaiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/typeof.js\n");
11268
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(o) {\n return typeof o;\n } : function(o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsUUFBUUMsQ0FBQyxFQUFFO0lBQ2pDO0lBRUEsT0FBT0QsVUFBVSxjQUFjLE9BQU9FLFVBQVUsWUFBWSxPQUFPQSxPQUFPQyxRQUFRLEdBQUcsU0FBOUVILFFBQXdGQyxDQUFDLEVBQUU7UUFDaEcsT0FBTyxPQUFPQTtJQUNoQixJQUFJLFNBQVVBLENBQUMsRUFBRTtRQUNmLE9BQU9BLEtBQUssY0FBYyxPQUFPQyxVQUFVRCxFQUFFRyxXQUFXLEtBQUtGLFVBQVVELE1BQU1DLE9BQU9HLFNBQVMsR0FBRyxXQUFXLE9BQU9KLENBQUM7SUFDckgsQ0FBQyxFQUFFRCxRQUFRQyxFQUFFO0FBQ2YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcz83NjIxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59Il0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/typeof.js\n");
11258
11269
 
11259
11270
  /***/ }),
11260
11271
 
@@ -11357,61 +11368,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11357
11368
 
11358
11369
  /***/ }),
11359
11370
 
11360
- /***/ "../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
11361
- /*!********************************************************************************************************!*\
11362
- !*** ../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
11363
- \********************************************************************************************************/
11364
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11365
-
11366
- "use strict";
11367
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _assertThisInitialized)\n/* harmony export */ });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSx1QkFBdUJDLElBQUksRUFBRTtJQUNuRCxJQUFJQSxTQUFTLEtBQUssR0FBRztRQUNuQixNQUFNLElBQUlDLGVBQWUsNkRBQTZEO0lBQ3hGLENBQUM7SUFDRCxPQUFPRDtBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb3duc2hpZnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz9iZDNmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSJdLCJuYW1lcyI6WyJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\n");
11368
-
11369
- /***/ }),
11370
-
11371
- /***/ "../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/extends.js":
11372
- /*!******************************************************************************************!*\
11373
- !*** ../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/extends.js ***!
11374
- \******************************************************************************************/
11375
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11376
-
11377
- "use strict";
11378
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _extends)\n/* harmony export */ });\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function _extends(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i];\n for(var key in source){\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsV0FBVztJQUNqQ0EsV0FBV0MsT0FBT0MsTUFBTSxHQUFHRCxPQUFPQyxNQUFNLENBQUNDLElBQUksS0FBSyxTQUFsREgsU0FBNERJLE1BQU0sRUFBRTtRQUNsRSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUMsVUFBVUMsTUFBTSxFQUFFRixJQUFLO1lBQ3pDLElBQUlHLFNBQVNGLFNBQVMsQ0FBQ0QsRUFBRTtZQUN6QixJQUFLLElBQUlJLE9BQU9ELE9BQVE7Z0JBQ3RCLElBQUlQLE9BQU9TLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNKLFFBQVFDLE1BQU07b0JBQ3JETCxNQUFNLENBQUNLLElBQUksR0FBR0QsTUFBTSxDQUFDQyxJQUFJO2dCQUMzQixDQUFDO1lBQ0g7UUFDRjtRQUNBLE9BQU9MO0lBQ1QsQ0FBQztJQUNELE9BQU9KLFNBQVNhLEtBQUssQ0FBQyxJQUFJLEVBQUVQO0FBQzlCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb3duc2hpZnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanM/NDBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iXSwibmFtZXMiOlsiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/extends.js\n");
11379
-
11380
- /***/ }),
11381
-
11382
- /***/ "../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js":
11383
- /*!************************************************************************************************!*\
11384
- !*** ../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***!
11385
- \************************************************************************************************/
11386
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11387
-
11388
- "use strict";
11389
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _inheritsLoose)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpRDtBQUNsQyxTQUFTQyxlQUFlQyxRQUFRLEVBQUVDLFVBQVUsRUFBRTtJQUMzREQsU0FBU0UsU0FBUyxHQUFHQyxPQUFPQyxNQUFNLENBQUNILFdBQVdDLFNBQVM7SUFDdkRGLFNBQVNFLFNBQVMsQ0FBQ0csV0FBVyxHQUFHTDtJQUNqQ0YsOERBQWNBLENBQUNFLFVBQVVDO0FBQzNCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kb3duc2hpZnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanM/ODdhZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJuYW1lcyI6WyJzZXRQcm90b3R5cGVPZiIsIl9pbmhlcml0c0xvb3NlIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwicHJvdG90eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29uc3RydWN0b3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n");
11390
-
11391
- /***/ }),
11392
-
11393
- /***/ "../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
11394
- /*!***************************************************************************************************************!*\
11395
- !*** ../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
11396
- \***************************************************************************************************************/
11397
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11398
-
11399
- "use strict";
11400
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _objectWithoutPropertiesLoose)\n/* harmony export */ });\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for(i = 0; i < sourceKeys.length; i++){\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsOEJBQThCQyxNQUFNLEVBQUVDLFFBQVEsRUFBRTtJQUN0RSxJQUFJRCxVQUFVLElBQUksRUFBRSxPQUFPLENBQUM7SUFDNUIsSUFBSUUsU0FBUyxDQUFDO0lBQ2QsSUFBSUMsYUFBYUMsT0FBT0MsSUFBSSxDQUFDTDtJQUM3QixJQUFJTSxLQUFLQztJQUNULElBQUtBLElBQUksR0FBR0EsSUFBSUosV0FBV0ssTUFBTSxFQUFFRCxJQUFLO1FBQ3RDRCxNQUFNSCxVQUFVLENBQUNJLEVBQUU7UUFDbkIsSUFBSU4sU0FBU1EsT0FBTyxDQUFDSCxRQUFRLEdBQUcsUUFBUztRQUN6Q0osTUFBTSxDQUFDSSxJQUFJLEdBQUdOLE1BQU0sQ0FBQ00sSUFBSTtJQUMzQjtJQUNBLE9BQU9KO0FBQ1QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcz9iYmI5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59Il0sIm5hbWVzIjpbIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwic291cmNlIiwiZXhjbHVkZWQiLCJ0YXJnZXQiLCJzb3VyY2VLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImkiLCJsZW5ndGgiLCJpbmRleE9mIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\n");
11401
-
11402
- /***/ }),
11403
-
11404
- /***/ "../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
11405
- /*!*************************************************************************************************!*\
11406
- !*** ../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
11407
- \*************************************************************************************************/
11408
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
11409
-
11410
- "use strict";
11411
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _setPrototypeOf)\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Rvd25zaGlmdC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlLFNBQVNBLGdCQUFnQkMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7SUFDNUNGLGtCQUFrQkcsT0FBT0MsY0FBYyxHQUFHRCxPQUFPQyxjQUFjLENBQUNDLElBQUksS0FBSyxTQUFTTCxnQkFBZ0JDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO1FBQ3RHRCxFQUFFSyxTQUFTLEdBQUdKO1FBQ2QsT0FBT0Q7SUFDVCxDQUFDO0lBQ0QsT0FBT0QsZ0JBQWdCQyxHQUFHQztBQUM1QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZG93bnNoaWZ0L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz9hZjg4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iXSwibmFtZXMiOlsiX3NldFByb3RvdHlwZU9mIiwibyIsInAiLCJPYmplY3QiLCJzZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/downshift/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\n");
11412
-
11413
- /***/ }),
11414
-
11415
11371
  /***/ "../../../node_modules/i18next/dist/esm/i18next.js":
11416
11372
  /*!*********************************************************!*\
11417
11373
  !*** ../../../node_modules/i18next/dist/esm/i18next.js ***!
@@ -12490,6 +12446,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
12490
12446
 
12491
12447
  /***/ }),
12492
12448
 
12449
+ /***/ "../../../node_modules/tslib/tslib.es6.mjs":
12450
+ /*!*************************************************!*\
12451
+ !*** ../../../node_modules/tslib/tslib.es6.mjs ***!
12452
+ \*************************************************/
12453
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12454
+
12455
+ "use strict";
12456
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __addDisposableResource: () => (/* binding */ __addDisposableResource),\n/* harmony export */ __assign: () => (/* binding */ __assign),\n/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator),\n/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator),\n/* harmony export */ __asyncValues: () => (/* binding */ __asyncValues),\n/* harmony export */ __await: () => (/* binding */ __await),\n/* harmony export */ __awaiter: () => (/* binding */ __awaiter),\n/* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet),\n/* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn),\n/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet),\n/* harmony export */ __createBinding: () => (/* binding */ __createBinding),\n/* harmony export */ __decorate: () => (/* binding */ __decorate),\n/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources),\n/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate),\n/* harmony export */ __exportStar: () => (/* binding */ __exportStar),\n/* harmony export */ __extends: () => (/* binding */ __extends),\n/* harmony export */ __generator: () => (/* binding */ __generator),\n/* harmony export */ __importDefault: () => (/* binding */ __importDefault),\n/* harmony export */ __importStar: () => (/* binding */ __importStar),\n/* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject),\n/* harmony export */ __metadata: () => (/* binding */ __metadata),\n/* harmony export */ __param: () => (/* binding */ __param),\n/* harmony export */ __propKey: () => (/* binding */ __propKey),\n/* harmony export */ __read: () => (/* binding */ __read),\n/* harmony export */ __rest: () => (/* binding */ __rest),\n/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers),\n/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName),\n/* harmony export */ __spread: () => (/* binding */ __spread),\n/* harmony export */ __spreadArray: () => (/* binding */ __spreadArray),\n/* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays),\n/* harmony export */ __values: () => (/* binding */ __values),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nfunction __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nfunction __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nfunction __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nfunction __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nfunction __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nfunction __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nfunction __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nfunction __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nfunction __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nfunction __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQixzQ0FBc0Msa0JBQWtCO0FBQ2pGLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7O0FBRU87QUFDUDtBQUNBLCtDQUErQyxPQUFPO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsY0FBYztBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7O0FBRU87QUFDUCxrQ0FBa0M7QUFDbEM7O0FBRU87QUFDUCx1QkFBdUIsdUZBQXVGO0FBQzlHO0FBQ0E7QUFDQSx5R0FBeUc7QUFDekc7QUFDQSxzQ0FBc0MsUUFBUTtBQUM5QztBQUNBLGdFQUFnRTtBQUNoRTtBQUNBLDhDQUE4Qyx5RkFBeUY7QUFDdkksOERBQThELDJDQUEyQztBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGtCQUFrQix5QkFBeUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1A7QUFDQSw0Q0FBNEMseUVBQXlFO0FBQ3JIOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQLDBCQUEwQiwrREFBK0QsaUJBQWlCO0FBQzFHO0FBQ0Esa0NBQWtDLE1BQU0sK0JBQStCLFlBQVk7QUFDbkYsaUNBQWlDLE1B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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanM/NGY4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlO1xuICAgIGlmIChhc3luYykge1xuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAoZW52LnN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIHJlYyA9IGVudi5zdGFjay5wb3AoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWMuZGlzcG9zZSAmJiByZWMuZGlzcG9zZS5jYWxsKHJlYy52YWx1ZSk7XG4gICAgICAgIGlmIChyZWMuYXN5bmMpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/tslib/tslib.es6.mjs\n");
12457
+
12458
+ /***/ }),
12459
+
12493
12460
  /***/ "../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs":
12494
12461
  /*!******************************************************************************!*\
12495
12462
  !*** ../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs ***!
@@ -12497,7 +12464,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
12497
12464
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
12498
12465
 
12499
12466
  "use strict";
12500
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Workbox: () => (/* binding */ v),\n/* harmony export */ WorkboxEvent: () => (/* binding */ u),\n/* harmony export */ messageSW: () => (/* binding */ n)\n/* harmony export */ });\ntry{self[\"workbox:window:6.5.3\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function e(n,t){var e;if(\"undefined\"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if(\"string\"==typeof n)return r(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}return(e=n[Symbol.iterator]()).next.bind(e)}try{self[\"workbox:core:6.5.3\"]&&_()}catch(n){}var i=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function o(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var u=function(n,t){this.type=n,Object.assign(this,t)};function a(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function c(){}var f={type:\"SKIP_WAITING\"};function s(n,t){if(!t)return n&&n.then?n.then(c):Promise.resolve()}var v=function(r){var e,c;function v(n,t){var e,c;return void 0===t&&(t={}),(e=r.call(this)||this).nn={},e.tn=0,e.rn=new i,e.en=new i,e.on=new i,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!o(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,a={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(a.isUpdate=!0),e.dispatchEvent(new u(i,a)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new u(\"waiting\",a))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.dn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new u(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(c=function(n){var t=n.data,r=n.ports,i=n.source;return a(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new u(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(c.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=t,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}c=r,(e=v).prototype=Object.create(c.prototype),e.prototype.constructor=e,e.__proto__=c;var h,l,m,w=v.prototype;return w.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return s(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.yn=e.pn(),a(e.bn(),(function(n){e.fn=n,e.yn&&(e.hn=e.yn,e.en.resolve(e.yn),e.on.resolve(e.yn),e.yn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&o(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new u(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.dn),e.fn}))}))}catch(n){return Promise.reject(n)}},w.update=function(){try{return this.fn?s(this.fn.update()):void 0}catch(n){return Promise.reject(n)}},w.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},w.messageSW=function(t){try{return a(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},w.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,f)},w.pn=function(){var n=navigator.serviceWorker.controller;return n&&o(n.scriptURL,this.sn.toString())?n:void 0},w.bn=function(){try{var n=this;return function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return a(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n}))}catch(n){return Promise.reject(n)}},h=v,(l=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&t(h.prototype,l),m&&t(h,m),v}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.Sn(n).add(t)},t.removeEventListener=function(n,t){this.Sn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.Sn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.Sn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtib3gtd2luZG93L2J1aWxkL3dvcmtib3gtd2luZG93LnByb2QuZXM1Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFJLGtDQUFrQyxVQUFVLGdCQUFnQixnQ0FBZ0MseUJBQXlCLDhCQUE4QixVQUFVLDRCQUE0QixHQUFHLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyxnQkFBZ0Isb0NBQW9DLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxnQkFBZ0IsTUFBTSx5REFBeUQsc0NBQXNDLE1BQU0sb0NBQW9DLG9EQUFvRCxnTEFBZ0wsdUNBQXVDLFNBQVMsUUFBUSxrQkFBa0Isb0JBQW9CLFFBQVEsRUFBRSx1QkFBdUIsNkpBQTZKLDRDQUE0QyxJQUFJLGdDQUFnQyxVQUFVLGlCQUFpQixXQUFXLHdDQUF3Qyx1QkFBdUIsSUFBSSxnQkFBZ0Isb0JBQW9CLDZDQUE2QyxvQkFBb0IsbUNBQW1DLGtCQUFrQixvRUFBb0UsY0FBYyxPQUFPLHFCQUFxQixnQkFBZ0IsbURBQW1ELGtCQUFrQixRQUFRLGdCQUFnQixRQUFRLHdCQUF3Qiw4QkFBOEIsNkVBQTZFLDBCQUEwQiwwTUFBME0sa0JBQWtCLDhDQUE4QyxtQ0FBbUMsdUdBQXVHLG9FQUFvRSxpRUFBaUUsa0JBQWtCLG9EQUFvRCxxQ0FBcUMsZ0RBQWdELHNCQUFzQixxQkFBcUIsa0NBQWtDLCtCQUErQiw4Q0FBOEMsb0NBQW9DLEdBQUcsR0FBRyxZQUFZLGlCQUFpQixtQkFBbUIsc0JBQXNCLElBQUksd0NBQXdDLFNBQVMsMEJBQTBCLDJFQUEyRSx1RkFBdUYsd0JBQXdCLDhCQUE4QixvQkFBb0IsOEJBQThCLElBQUksV0FBVyxxQkFBcUIsVUFBVSw4QkFBOEIsWUFBWSxhQUFhLDBFQUEwRSx5Q0FBeUMsSUFBSSxjQUFjLDBGQUEwRix3R0FBd0csUUFBUSxHQUFHLG1CQUFtQixxRkFBcUYsaUNBQWlDLGlDQUFpQyxHQUFHLHFCQUFxQiwrSkFBK0osR0FBRyxHQUFHLFNBQVMsMEJBQTBCLHFCQUFxQixJQUFJLDBDQUEwQyxTQUFTLDBCQUEwQixvQkFBb0IsaUVBQWlFLHlCQUF5QixJQUFJLG1DQUFtQyxjQUFjLEdBQUcsU0FBUywwQkFBMEIsaUNBQWlDLCtDQUErQyxpQkFBaUIseUNBQXlDLHFEQUFxRCxpQkFBaUIsSUFBSSxXQUFXLHFCQUFxQixJQUFJLFVBQVUsU0FBUyxZQUFZLHFDQUFxQyxTQUFTLGFBQWEsa0VBQWtFLGdDQUFnQyxHQUFHLGVBQWUsUUFBUSxHQUFHLFNBQVMsMEJBQTBCLFVBQVUsNEJBQTRCLHdCQUF3QixFQUFFLGlDQUFpQyx3QkFBd0IsaUNBQWlDLFlBQVksYUFBYSxnQkFBZ0Isa0JBQWtCLHdDQUF3QyxrQkFBa0IscUNBQXFDLHFCQUFxQiw2QkFBNkIsY0FBYywrQkFBK0IsY0FBYyxFQUFFLGdCQUFnQixrQkFBa0IsNkRBQTZELEdBQUcsSUFBMEQ7QUFDNXZLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2JveC13aW5kb3cvYnVpbGQvd29ya2JveC13aW5kb3cucHJvZC5lczUubWpzPzhmOWYiXSwic291cmNlc0NvbnRlbnQiOlsidHJ5e3NlbGZbXCJ3b3JrYm94OndpbmRvdzo2LjUuM1wiXSYmXygpfWNhdGNoKG4pe31mdW5jdGlvbiBuKG4sdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyKXt2YXIgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24obil7cihuLmRhdGEpfSxuLnBvc3RNZXNzYWdlKHQsW2UucG9ydDJdKX0pKX1mdW5jdGlvbiB0KG4sdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXRbcl07ZS5lbnVtZXJhYmxlPWUuZW51bWVyYWJsZXx8ITEsZS5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUua2V5LGUpfX1mdW5jdGlvbiByKG4sdCl7KG51bGw9PXR8fHQ+bi5sZW5ndGgpJiYodD1uLmxlbmd0aCk7Zm9yKHZhciByPTAsZT1uZXcgQXJyYXkodCk7cjx0O3IrKyllW3JdPW5bcl07cmV0dXJuIGV9ZnVuY3Rpb24gZShuLHQpe3ZhciBlO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PW5bU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShuKXx8KGU9ZnVuY3Rpb24obix0KXtpZihuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gcihuLHQpO3ZhciBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09ZSYmbi5jb25zdHJ1Y3RvciYmKGU9bi5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09ZXx8XCJTZXRcIj09PWU/QXJyYXkuZnJvbShuKTpcIkFyZ3VtZW50c1wiPT09ZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoZSk/cihuLHQpOnZvaWQgMH19KG4pKXx8dCYmbiYmXCJudW1iZXJcIj09dHlwZW9mIG4ubGVuZ3RoKXtlJiYobj1lKTt2YXIgaT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpPj1uLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6bltpKytdfX19dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfXJldHVybihlPW5bU3ltYm9sLml0ZXJhdG9yXSgpKS5uZXh0LmJpbmQoZSl9dHJ5e3NlbGZbXCJ3b3JrYm94OmNvcmU6Ni41LjNcIl0mJl8oKX1jYXRjaChuKXt9dmFyIGk9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnJlc29sdmU9dCxuLnJlamVjdD1yfSkpfTtmdW5jdGlvbiBvKG4sdCl7dmFyIHI9bG9jYXRpb24uaHJlZjtyZXR1cm4gbmV3IFVSTChuLHIpLmhyZWY9PT1uZXcgVVJMKHQscikuaHJlZn12YXIgdT1mdW5jdGlvbihuLHQpe3RoaXMudHlwZT1uLE9iamVjdC5hc3NpZ24odGhpcyx0KX07ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIHI/dD90KG4pOm46KG4mJm4udGhlbnx8KG49UHJvbWlzZS5yZXNvbHZlKG4pKSx0P24udGhlbih0KTpuKX1mdW5jdGlvbiBjKCl7fXZhciBmPXt0eXBlOlwiU0tJUF9XQUlUSU5HXCJ9O2Z1bmN0aW9uIHMobix0KXtpZighdClyZXR1cm4gbiYmbi50aGVuP24udGhlbihjKTpQcm9taXNlLnJlc29sdmUoKX12YXIgdj1mdW5jdGlvbihyKXt2YXIgZSxjO2Z1bmN0aW9uIHYobix0KXt2YXIgZSxjO3JldHVybiB2b2lkIDA9PT10JiYodD17fSksKGU9ci5jYWxsKHRoaXMpfHx0aGlzKS5ubj17fSxlLnRuPTAsZS5ybj1uZXcgaSxlLmVuPW5ldyBpLGUub249bmV3IGksZS51bj0wLGUuYW49bmV3IFNldCxlLmNuPWZ1bmN0aW9uKCl7dmFyIG49ZS5mbix0PW4uaW5zdGFsbGluZztlLnRuPjB8fCFvKHQuc2NyaXB0VVJMLGUuc24udG9TdHJpbmcoKSl8fHBlcmZvcm1hbmNlLm5vdygpPmUudW4rNmU0PyhlLnZuPXQsbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidXBkYXRlZm91bmRcIixlLmNuKSk6KGUuaG49dCxlLmFuLmFkZCh0KSxlLnJuLnJlc29sdmUodCkpLCsrZS50bix0LmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLGUubG4pfSxlLmxuPWZ1bmN0aW9uKG4pe3ZhciB0PWUuZm4scj1uLnRhcmdldCxpPXIuc3RhdGUsbz1yPT09ZS52bixhPXtzdzpyLGlzRXh0ZXJuYWw6byxvcmlnaW5hbEV2ZW50Om59OyFvJiZlLm1uJiYoYS5pc1VwZGF0ZT0hMCksZS5kaXNwYXRjaEV2ZW50KG5ldyB1KGksYSkpLFwiaW5zdGFsbGVkXCI9PT1pP2Uud249c2VsZi5zZXRUaW1lb3V0KChmdW5jdGlvbigpe1wiaW5zdGFsbGVkXCI9PT1pJiZ0LndhaXRpbmc9PT1yJiZlLmRpc3BhdGNoRXZlbnQobmV3IHUoXCJ3YWl0aW5nXCIsYSkpfSksMjAwKTpcImFjdGl2YXRpbmdcIj09PWkmJihjbGVhclRpbWVvdXQoZS53biksb3x8ZS5lbi5yZXNvbHZlKHIpKX0sZS5kbj1mdW5jdGlvbihuKXt2YXIgdD1lLmhuLHI9dCE9PW5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmNvbnRyb2xsZXI7ZS5kaXNwYXRjaEV2ZW50KG5ldyB1KFwiY29udHJvbGxpbmdcIix7aXNFeHRlcm5hbDpyLG9yaWdpbmFsRXZlbnQ6bixzdzp0LGlzVXBkYXRlOmUubW59KSkscnx8ZS5vbi5yZXNvbHZlKHQpfSxlLmduPShjPWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0YSxyPW4ucG9ydHMsaT1uLnNvdXJjZTtyZXR1cm4gYShlLmdldFNXKCksKGZ1bmN0aW9uKCl7ZS5hbi5oYXMoaSkmJmUuZGlzcGF0Y2hFdmVudChuZXcgdShcIm1lc3NhZ2VcIix7ZGF0YTp0LG9yaWdpbmFsRXZlbnQ6bixwb3J0czpyLHN3Oml9KSl9KSl9LGZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKW5bdF09YXJndW1lbnRzW3RdO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGMuYXBwbHkodGhpcyxuKSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0pLGUuc249bixlLm5uPXQsbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixlLmduKSxlfWM9ciwoZT12KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLl9fcHJvdG9fXz1jO3ZhciBoLGwsbSx3PXYucHJvdG90eXBlO3JldHVybiB3LnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe3ZhciB0PSh2b2lkIDA9PT1uP3t9Om4pLmltbWVkaWF0ZSxyPXZvaWQgMCE9PXQmJnQ7dHJ5e3ZhciBlPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dmFyIHI9bigpO2lmKHImJnIudGhlbilyZXR1cm4gci50aGVuKHQpO3JldHVybiB0KHIpfSgoZnVuY3Rpb24oKXtpZighciYmXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSlyZXR1cm4gcyhuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLG4pfSkpKX0pLChmdW5jdGlvbigpe3JldHVybiBlLm1uPUJvb2xlYW4obmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlciksZS55bj1lLnBuKCksYShlLmJuKCksKGZ1bmN0aW9uKG4pe2UuZm49bixlLnluJiYoZS5obj1lLnluLGUuZW4ucmVzb2x2ZShlLnluKSxlLm9uLnJlc29sdmUoZS55biksZS55bi5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIixlLmxuLHtvbmNlOiEwfSkpO3ZhciB0PWUuZm4ud2FpdGluZztyZXR1cm4gdCYmbyh0LnNjcmlwdFVSTCxlLnNuLnRvU3RyaW5nKCkpJiYoZS5obj10LFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5kaXNwYXRjaEV2ZW50KG5ldyB1KFwid2FpdGluZ1wiLHtzdzp0LHdhc1dhaXRpbmdCZWZvcmVSZWdpc3RlcjohMH0pKX0pKS50aGVuKChmdW5jdGlvbigpe30pKSksZS5obiYmKGUucm4ucmVzb2x2ZShlLmhuKSxlLmFuLmFkZChlLmhuKSksZS5mbi5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZm91bmRcIixlLmNuKSxuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwiY29udHJvbGxlcmNoYW5nZVwiLGUuZG4pLGUuZm59KSl9KSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy51cGRhdGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHRoaXMuZm4/cyh0aGlzLmZuLnVwZGF0ZSgpKTp2b2lkIDB9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy5nZXRTVz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmhuP1Byb21pc2UucmVzb2x2ZSh0aGlzLmhuKTp0aGlzLnJuLnByb21pc2V9LHcubWVzc2FnZVNXPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYSh0aGlzLmdldFNXKCksKGZ1bmN0aW9uKHIpe3JldHVybiBuKHIsdCl9KSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy5tZXNzYWdlU2tpcFdhaXRpbmc9ZnVuY3Rpb24oKXt0aGlzLmZuJiZ0aGlzLmZuLndhaXRpbmcmJm4odGhpcy5mbi53YWl0aW5nLGYpfSx3LnBuPWZ1bmN0aW9uKCl7dmFyIG49bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcjtyZXR1cm4gbiYmbyhuLnNjcmlwdFVSTCx0aGlzLnNuLnRvU3RyaW5nKCkpP246dm9pZCAwfSx3LmJuPWZ1bmN0aW9uKCl7dHJ5e3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dHJ5e3ZhciByPW4oKX1jYXRjaChuKXtyZXR1cm4gdChuKX1pZihyJiZyLnRoZW4pcmV0dXJuIHIudGhlbih2b2lkIDAsdCk7cmV0dXJuIHJ9KChmdW5jdGlvbigpe3JldHVybiBhKG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKG4uc24sbi5ubiksKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVuPXBlcmZvcm1hbmNlLm5vdygpLHR9KSl9KSwoZnVuY3Rpb24obil7dGhyb3cgbn0pKX1jYXRjaChuKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qobil9fSxoPXYsKGw9W3trZXk6XCJhY3RpdmVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbi5wcm9taXNlfX0se2tleTpcImNvbnRyb2xsaW5nXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24ucHJvbWlzZX19XSkmJnQoaC5wcm90b3R5cGUsbCksbSYmdChoLG0pLHZ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMuUG49bmV3IE1hcH12YXIgdD1uLnByb3RvdHlwZTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKG4sdCl7dGhpcy5TbihuKS5hZGQodCl9LHQucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihuLHQpe3RoaXMuU24obikuZGVsZXRlKHQpfSx0LmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24obil7bi50YXJnZXQ9dGhpcztmb3IodmFyIHQscj1lKHRoaXMuU24obi50eXBlKSk7ISh0PXIoKSkuZG9uZTspeygwLHQudmFsdWUpKG4pfX0sdC5Tbj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5Qbi5oYXMobil8fHRoaXMuUG4uc2V0KG4sbmV3IFNldCksdGhpcy5Qbi5nZXQobil9LG59KCkpO2V4cG9ydHt2IGFzIFdvcmtib3gsdSBhcyBXb3JrYm94RXZlbnQsbiBhcyBtZXNzYWdlU1d9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d29ya2JveC13aW5kb3cucHJvZC5lczUubWpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs\n");
12467
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Workbox: () => (/* binding */ v),\n/* harmony export */ WorkboxEvent: () => (/* binding */ u),\n/* harmony export */ messageSW: () => (/* binding */ n)\n/* harmony export */ });\ntry{self[\"workbox:window:6.5.4\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function e(n,t){var e;if(\"undefined\"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if(\"string\"==typeof n)return r(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}return(e=n[Symbol.iterator]()).next.bind(e)}try{self[\"workbox:core:6.5.4\"]&&_()}catch(n){}var i=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function o(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var u=function(n,t){this.type=n,Object.assign(this,t)};function a(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function c(){}var f={type:\"SKIP_WAITING\"};function s(n,t){if(!t)return n&&n.then?n.then(c):Promise.resolve()}var v=function(r){var e,c;function v(n,t){var e,c;return void 0===t&&(t={}),(e=r.call(this)||this).nn={},e.tn=0,e.rn=new i,e.en=new i,e.on=new i,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!o(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,a={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(a.isUpdate=!0),e.dispatchEvent(new u(i,a)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new u(\"waiting\",a))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.dn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new u(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(c=function(n){var t=n.data,r=n.ports,i=n.source;return a(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new u(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(c.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=t,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}c=r,(e=v).prototype=Object.create(c.prototype),e.prototype.constructor=e,e.__proto__=c;var h,l,m,w=v.prototype;return w.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return s(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.yn=e.pn(),a(e.bn(),(function(n){e.fn=n,e.yn&&(e.hn=e.yn,e.en.resolve(e.yn),e.on.resolve(e.yn),e.yn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&o(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new u(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.dn),e.fn}))}))}catch(n){return Promise.reject(n)}},w.update=function(){try{return this.fn?s(this.fn.update()):void 0}catch(n){return Promise.reject(n)}},w.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},w.messageSW=function(t){try{return a(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},w.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,f)},w.pn=function(){var n=navigator.serviceWorker.controller;return n&&o(n.scriptURL,this.sn.toString())?n:void 0},w.bn=function(){try{var n=this;return function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return a(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n}))}catch(n){return Promise.reject(n)}},h=v,(l=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&t(h.prototype,l),m&&t(h,m),v}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.Sn(n).add(t)},t.removeEventListener=function(n,t){this.Sn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.Sn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.Sn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtib3gtd2luZG93L2J1aWxkL3dvcmtib3gtd2luZG93LnByb2QuZXM1Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFJLGtDQUFrQyxVQUFVLGdCQUFnQixnQ0FBZ0MseUJBQXlCLDhCQUE4QixVQUFVLDRCQUE0QixHQUFHLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyxnQkFBZ0Isb0NBQW9DLDJCQUEyQixJQUFJLGNBQWMsU0FBUyxnQkFBZ0IsTUFBTSx5REFBeUQsc0NBQXNDLE1BQU0sb0NBQW9DLG9EQUFvRCxnTEFBZ0wsdUNBQXVDLFNBQVMsUUFBUSxrQkFBa0Isb0JBQW9CLFFBQVEsRUFBRSx1QkFBdUIsNkpBQTZKLDRDQUE0QyxJQUFJLGdDQUFnQyxVQUFVLGlCQUFpQixXQUFXLHdDQUF3Qyx1QkFBdUIsSUFBSSxnQkFBZ0Isb0JBQW9CLDZDQUE2QyxvQkFBb0IsbUNBQW1DLGtCQUFrQixvRUFBb0UsY0FBYyxPQUFPLHFCQUFxQixnQkFBZ0IsbURBQW1ELGtCQUFrQixRQUFRLGdCQUFnQixRQUFRLHdCQUF3Qiw4QkFBOEIsNkVBQTZFLDBCQUEwQiwwTUFBME0sa0JBQWtCLDhDQUE4QyxtQ0FBbUMsdUdBQXVHLG9FQUFvRSxpRUFBaUUsa0JBQWtCLG9EQUFvRCxxQ0FBcUMsZ0RBQWdELHNCQUFzQixxQkFBcUIsa0NBQWtDLCtCQUErQiw4Q0FBOEMsb0NBQW9DLEdBQUcsR0FBRyxZQUFZLGlCQUFpQixtQkFBbUIsc0JBQXNCLElBQUksd0NBQXdDLFNBQVMsMEJBQTBCLDJFQUEyRSx1RkFBdUYsd0JBQXdCLDhCQUE4QixvQkFBb0IsOEJBQThCLElBQUksV0FBVyxxQkFBcUIsVUFBVSw4QkFBOEIsWUFBWSxhQUFhLDBFQUEwRSx5Q0FBeUMsSUFBSSxjQUFjLDBGQUEwRix3R0FBd0csUUFBUSxHQUFHLG1CQUFtQixxRkFBcUYsaUNBQWlDLGlDQUFpQyxHQUFHLHFCQUFxQiwrSkFBK0osR0FBRyxHQUFHLFNBQVMsMEJBQTBCLHFCQUFxQixJQUFJLDBDQUEwQyxTQUFTLDBCQUEwQixvQkFBb0IsaUVBQWlFLHlCQUF5QixJQUFJLG1DQUFtQyxjQUFjLEdBQUcsU0FBUywwQkFBMEIsaUNBQWlDLCtDQUErQyxpQkFBaUIseUNBQXlDLHFEQUFxRCxpQkFBaUIsSUFBSSxXQUFXLHFCQUFxQixJQUFJLFVBQVUsU0FBUyxZQUFZLHFDQUFxQyxTQUFTLGFBQWEsa0VBQWtFLGdDQUFnQyxHQUFHLGVBQWUsUUFBUSxHQUFHLFNBQVMsMEJBQTBCLFVBQVUsNEJBQTRCLHdCQUF3QixFQUFFLGlDQUFpQyx3QkFBd0IsaUNBQWlDLFlBQVksYUFBYSxnQkFBZ0Isa0JBQWtCLHdDQUF3QyxrQkFBa0IscUNBQXFDLHFCQUFxQiw2QkFBNkIsY0FBYywrQkFBK0IsY0FBYyxFQUFFLGdCQUFnQixrQkFBa0IsNkRBQTZELEdBQUcsSUFBMEQ7QUFDNXZLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2JveC13aW5kb3cvYnVpbGQvd29ya2JveC13aW5kb3cucHJvZC5lczUubWpzPzhmOWYiXSwic291cmNlc0NvbnRlbnQiOlsidHJ5e3NlbGZbXCJ3b3JrYm94OndpbmRvdzo2LjUuNFwiXSYmXygpfWNhdGNoKG4pe31mdW5jdGlvbiBuKG4sdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyKXt2YXIgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24obil7cihuLmRhdGEpfSxuLnBvc3RNZXNzYWdlKHQsW2UucG9ydDJdKX0pKX1mdW5jdGlvbiB0KG4sdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXRbcl07ZS5lbnVtZXJhYmxlPWUuZW51bWVyYWJsZXx8ITEsZS5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gZSYmKGUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUua2V5LGUpfX1mdW5jdGlvbiByKG4sdCl7KG51bGw9PXR8fHQ+bi5sZW5ndGgpJiYodD1uLmxlbmd0aCk7Zm9yKHZhciByPTAsZT1uZXcgQXJyYXkodCk7cjx0O3IrKyllW3JdPW5bcl07cmV0dXJuIGV9ZnVuY3Rpb24gZShuLHQpe3ZhciBlO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PW5bU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShuKXx8KGU9ZnVuY3Rpb24obix0KXtpZihuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gcihuLHQpO3ZhciBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKS5zbGljZSg4LC0xKTtyZXR1cm5cIk9iamVjdFwiPT09ZSYmbi5jb25zdHJ1Y3RvciYmKGU9bi5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09ZXx8XCJTZXRcIj09PWU/QXJyYXkuZnJvbShuKTpcIkFyZ3VtZW50c1wiPT09ZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoZSk/cihuLHQpOnZvaWQgMH19KG4pKXx8dCYmbiYmXCJudW1iZXJcIj09dHlwZW9mIG4ubGVuZ3RoKXtlJiYobj1lKTt2YXIgaT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpPj1uLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6bltpKytdfX19dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfXJldHVybihlPW5bU3ltYm9sLml0ZXJhdG9yXSgpKS5uZXh0LmJpbmQoZSl9dHJ5e3NlbGZbXCJ3b3JrYm94OmNvcmU6Ni41LjRcIl0mJl8oKX1jYXRjaChuKXt9dmFyIGk9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnJlc29sdmU9dCxuLnJlamVjdD1yfSkpfTtmdW5jdGlvbiBvKG4sdCl7dmFyIHI9bG9jYXRpb24uaHJlZjtyZXR1cm4gbmV3IFVSTChuLHIpLmhyZWY9PT1uZXcgVVJMKHQscikuaHJlZn12YXIgdT1mdW5jdGlvbihuLHQpe3RoaXMudHlwZT1uLE9iamVjdC5hc3NpZ24odGhpcyx0KX07ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIHI/dD90KG4pOm46KG4mJm4udGhlbnx8KG49UHJvbWlzZS5yZXNvbHZlKG4pKSx0P24udGhlbih0KTpuKX1mdW5jdGlvbiBjKCl7fXZhciBmPXt0eXBlOlwiU0tJUF9XQUlUSU5HXCJ9O2Z1bmN0aW9uIHMobix0KXtpZighdClyZXR1cm4gbiYmbi50aGVuP24udGhlbihjKTpQcm9taXNlLnJlc29sdmUoKX12YXIgdj1mdW5jdGlvbihyKXt2YXIgZSxjO2Z1bmN0aW9uIHYobix0KXt2YXIgZSxjO3JldHVybiB2b2lkIDA9PT10JiYodD17fSksKGU9ci5jYWxsKHRoaXMpfHx0aGlzKS5ubj17fSxlLnRuPTAsZS5ybj1uZXcgaSxlLmVuPW5ldyBpLGUub249bmV3IGksZS51bj0wLGUuYW49bmV3IFNldCxlLmNuPWZ1bmN0aW9uKCl7dmFyIG49ZS5mbix0PW4uaW5zdGFsbGluZztlLnRuPjB8fCFvKHQuc2NyaXB0VVJMLGUuc24udG9TdHJpbmcoKSl8fHBlcmZvcm1hbmNlLm5vdygpPmUudW4rNmU0PyhlLnZuPXQsbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidXBkYXRlZm91bmRcIixlLmNuKSk6KGUuaG49dCxlLmFuLmFkZCh0KSxlLnJuLnJlc29sdmUodCkpLCsrZS50bix0LmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLGUubG4pfSxlLmxuPWZ1bmN0aW9uKG4pe3ZhciB0PWUuZm4scj1uLnRhcmdldCxpPXIuc3RhdGUsbz1yPT09ZS52bixhPXtzdzpyLGlzRXh0ZXJuYWw6byxvcmlnaW5hbEV2ZW50Om59OyFvJiZlLm1uJiYoYS5pc1VwZGF0ZT0hMCksZS5kaXNwYXRjaEV2ZW50KG5ldyB1KGksYSkpLFwiaW5zdGFsbGVkXCI9PT1pP2Uud249c2VsZi5zZXRUaW1lb3V0KChmdW5jdGlvbigpe1wiaW5zdGFsbGVkXCI9PT1pJiZ0LndhaXRpbmc9PT1yJiZlLmRpc3BhdGNoRXZlbnQobmV3IHUoXCJ3YWl0aW5nXCIsYSkpfSksMjAwKTpcImFjdGl2YXRpbmdcIj09PWkmJihjbGVhclRpbWVvdXQoZS53biksb3x8ZS5lbi5yZXNvbHZlKHIpKX0sZS5kbj1mdW5jdGlvbihuKXt2YXIgdD1lLmhuLHI9dCE9PW5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmNvbnRyb2xsZXI7ZS5kaXNwYXRjaEV2ZW50KG5ldyB1KFwiY29udHJvbGxpbmdcIix7aXNFeHRlcm5hbDpyLG9yaWdpbmFsRXZlbnQ6bixzdzp0LGlzVXBkYXRlOmUubW59KSkscnx8ZS5vbi5yZXNvbHZlKHQpfSxlLmduPShjPWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0YSxyPW4ucG9ydHMsaT1uLnNvdXJjZTtyZXR1cm4gYShlLmdldFNXKCksKGZ1bmN0aW9uKCl7ZS5hbi5oYXMoaSkmJmUuZGlzcGF0Y2hFdmVudChuZXcgdShcIm1lc3NhZ2VcIix7ZGF0YTp0LG9yaWdpbmFsRXZlbnQ6bixwb3J0czpyLHN3Oml9KSl9KSl9LGZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKW5bdF09YXJndW1lbnRzW3RdO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGMuYXBwbHkodGhpcyxuKSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0pLGUuc249bixlLm5uPXQsbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixlLmduKSxlfWM9ciwoZT12KS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLl9fcHJvdG9fXz1jO3ZhciBoLGwsbSx3PXYucHJvdG90eXBlO3JldHVybiB3LnJlZ2lzdGVyPWZ1bmN0aW9uKG4pe3ZhciB0PSh2b2lkIDA9PT1uP3t9Om4pLmltbWVkaWF0ZSxyPXZvaWQgMCE9PXQmJnQ7dHJ5e3ZhciBlPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dmFyIHI9bigpO2lmKHImJnIudGhlbilyZXR1cm4gci50aGVuKHQpO3JldHVybiB0KHIpfSgoZnVuY3Rpb24oKXtpZighciYmXCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZSlyZXR1cm4gcyhuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLG4pfSkpKX0pLChmdW5jdGlvbigpe3JldHVybiBlLm1uPUJvb2xlYW4obmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlciksZS55bj1lLnBuKCksYShlLmJuKCksKGZ1bmN0aW9uKG4pe2UuZm49bixlLnluJiYoZS5obj1lLnluLGUuZW4ucmVzb2x2ZShlLnluKSxlLm9uLnJlc29sdmUoZS55biksZS55bi5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIixlLmxuLHtvbmNlOiEwfSkpO3ZhciB0PWUuZm4ud2FpdGluZztyZXR1cm4gdCYmbyh0LnNjcmlwdFVSTCxlLnNuLnRvU3RyaW5nKCkpJiYoZS5obj10LFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5kaXNwYXRjaEV2ZW50KG5ldyB1KFwid2FpdGluZ1wiLHtzdzp0LHdhc1dhaXRpbmdCZWZvcmVSZWdpc3RlcjohMH0pKX0pKS50aGVuKChmdW5jdGlvbigpe30pKSksZS5obiYmKGUucm4ucmVzb2x2ZShlLmhuKSxlLmFuLmFkZChlLmhuKSksZS5mbi5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZm91bmRcIixlLmNuKSxuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwiY29udHJvbGxlcmNoYW5nZVwiLGUuZG4pLGUuZm59KSl9KSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy51cGRhdGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHRoaXMuZm4/cyh0aGlzLmZuLnVwZGF0ZSgpKTp2b2lkIDB9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy5nZXRTVz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmhuP1Byb21pc2UucmVzb2x2ZSh0aGlzLmhuKTp0aGlzLnJuLnByb21pc2V9LHcubWVzc2FnZVNXPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYSh0aGlzLmdldFNXKCksKGZ1bmN0aW9uKHIpe3JldHVybiBuKHIsdCl9KSl9Y2F0Y2gobil7cmV0dXJuIFByb21pc2UucmVqZWN0KG4pfX0sdy5tZXNzYWdlU2tpcFdhaXRpbmc9ZnVuY3Rpb24oKXt0aGlzLmZuJiZ0aGlzLmZuLndhaXRpbmcmJm4odGhpcy5mbi53YWl0aW5nLGYpfSx3LnBuPWZ1bmN0aW9uKCl7dmFyIG49bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlcjtyZXR1cm4gbiYmbyhuLnNjcmlwdFVSTCx0aGlzLnNuLnRvU3RyaW5nKCkpP246dm9pZCAwfSx3LmJuPWZ1bmN0aW9uKCl7dHJ5e3ZhciBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dHJ5e3ZhciByPW4oKX1jYXRjaChuKXtyZXR1cm4gdChuKX1pZihyJiZyLnRoZW4pcmV0dXJuIHIudGhlbih2b2lkIDAsdCk7cmV0dXJuIHJ9KChmdW5jdGlvbigpe3JldHVybiBhKG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKG4uc24sbi5ubiksKGZ1bmN0aW9uKHQpe3JldHVybiBuLnVuPXBlcmZvcm1hbmNlLm5vdygpLHR9KSl9KSwoZnVuY3Rpb24obil7dGhyb3cgbn0pKX1jYXRjaChuKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qobil9fSxoPXYsKGw9W3trZXk6XCJhY3RpdmVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbi5wcm9taXNlfX0se2tleTpcImNvbnRyb2xsaW5nXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24ucHJvbWlzZX19XSkmJnQoaC5wcm90b3R5cGUsbCksbSYmdChoLG0pLHZ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMuUG49bmV3IE1hcH12YXIgdD1uLnByb3RvdHlwZTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKG4sdCl7dGhpcy5TbihuKS5hZGQodCl9LHQucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihuLHQpe3RoaXMuU24obikuZGVsZXRlKHQpfSx0LmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24obil7bi50YXJnZXQ9dGhpcztmb3IodmFyIHQscj1lKHRoaXMuU24obi50eXBlKSk7ISh0PXIoKSkuZG9uZTspeygwLHQudmFsdWUpKG4pfX0sdC5Tbj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5Qbi5oYXMobil8fHRoaXMuUG4uc2V0KG4sbmV3IFNldCksdGhpcy5Qbi5nZXQobil9LG59KCkpO2V4cG9ydHt2IGFzIFdvcmtib3gsdSBhcyBXb3JrYm94RXZlbnQsbiBhcyBtZXNzYWdlU1d9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d29ya2JveC13aW5kb3cucHJvZC5lczUubWpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs\n");
12501
12468
 
12502
12469
  /***/ }),
12503
12470
 
@@ -12590,7 +12557,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
12590
12557
  /******/ // This function allow to reference async chunks
12591
12558
  /******/ __webpack_require__.u = (chunkId) => {
12592
12559
  /******/ // return url for filenames based on template
12593
- /******/ return "" + {"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef":"57bf7b27114b3f54","src_run_ts":"f29978db163aaa3d","src_ui_breadcrumbs_tsx":"3975decbab0164f3"}[chunkId] + ".js";
12560
+ /******/ return "" + {"vendors-node_modules_i18next-browser-languagedetector_dist_esm_i18nextBrowserLanguageDetector-bec0ef":"49af280eabf5f1f5","src_run_ts":"f29978db163aaa3d","src_ui_breadcrumbs_tsx":"3975decbab0164f3"}[chunkId] + ".js";
12594
12561
  /******/ };
12595
12562
  /******/ })();
12596
12563
  /******/
@@ -12718,8 +12685,8 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
12718
12685
  /******/ var promises = [];
12719
12686
  /******/ switch(name) {
12720
12687
  /******/ case "default": {
12721
- /******/ register("@openmrs/esm-framework/src/internal", "5.3.2-pre.1214", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/internal.ts */ "../../framework/esm-framework/src/internal.ts"))), 1);
12722
- /******/ register("@openmrs/esm-framework", "5.3.2-pre.1214", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/index.ts */ "../../framework/esm-framework/src/index.ts"))), 1);
12688
+ /******/ register("@openmrs/esm-framework/src/internal", "5.3.2-pre.1219", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/internal.ts */ "../../framework/esm-framework/src/internal.ts"))), 1);
12689
+ /******/ register("@openmrs/esm-framework", "5.3.2-pre.1219", () => (() => (__webpack_require__(/*! ../../framework/esm-framework/src/index.ts */ "../../framework/esm-framework/src/index.ts"))), 1);
12723
12690
  /******/ register("dayjs", "1.11.5", () => (() => (__webpack_require__(/*! ../../../node_modules/dayjs/dayjs.min.js */ "../../../node_modules/dayjs/dayjs.min.js"))), 1);
12724
12691
  /******/ register("i18next", "21.10.0", () => (() => (__webpack_require__(/*! ../../../node_modules/i18next/dist/esm/i18next.js */ "../../../node_modules/i18next/dist/esm/i18next.js"))), 1);
12725
12692
  /******/ register("react-dom", "18.2.0", () => (() => (__webpack_require__(/*! ../../../node_modules/react-dom/index.js */ "../../../node_modules/react-dom/index.js"))), 1);